diff options
Diffstat (limited to 'src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java')
-rw-r--r-- | src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java | 415 |
1 files changed, 0 insertions, 415 deletions
diff --git a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java deleted file mode 100644 index 0fa28f2..0000000 --- a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright (c) 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You may - * obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.android.vts.servlet; - -import com.android.vts.entity.DeviceInfoEntity; -import com.android.vts.entity.TestPlanEntity; -import com.android.vts.entity.TestPlanRunEntity; -import com.android.vts.entity.TestSuiteResultEntity; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.Pagination; - -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.DatastoreServiceFactory; -import com.google.appengine.api.datastore.Entity; -import com.google.appengine.api.datastore.Key; -import com.google.appengine.api.datastore.KeyFactory; -import com.google.appengine.api.datastore.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import org.apache.commons.lang.StringUtils; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.logging.Level; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import static com.googlecode.objectify.ObjectifyService.ofy; - -public class ShowPlanReleaseServlet extends BaseServlet { - private static final int MAX_RUNS_PER_PAGE = 90; - - /** the previous cursor string token list where to start */ - private static final LinkedHashSet<String> pageCountTokenSet = new LinkedHashSet<>(); - - @Override - public PageType getNavParentType() { - return PageType.RELEASE; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - String testType = - request.getParameter("type") == null ? "plan" : request.getParameter("type"); - List<Page> links = new ArrayList<>(); - String planName = request.getParameter("plan"); - if (testType.equals("plan")) { - links.add(new Page(PageType.RELEASE, "TEST PLANS", "?type=" + testType, true)); - links.add(new Page(PageType.PLAN_RELEASE, planName, "?plan=" + planName)); - } else { - links.add(new Page(PageType.RELEASE, "TEST SUITES", "?type=" + testType, true)); - links.add( - new Page( - PageType.PLAN_RELEASE, - planName, - "?plan=" + planName + "&type=" + testType)); - } - return links; - } - - /** Model to describe each test plan run . */ - private class TestPlanRunMetadata implements Comparable<TestPlanRunMetadata> { - public final TestPlanRunEntity testPlanRun; - public final List<String> devices; - public final Set<DeviceInfoEntity> deviceSet; - - public TestPlanRunMetadata(TestPlanRunEntity testPlanRun) { - this.testPlanRun = testPlanRun; - this.devices = new ArrayList<>(); - this.deviceSet = new HashSet<>(); - } - - public void addDevice(DeviceInfoEntity device) { - if (device == null || deviceSet.contains(device)) return; - devices.add( - device.getBranch() - + "/" - + device.getBuildFlavor() - + " (" - + device.getBuildId() - + ")"); - deviceSet.add(device); - } - - public JsonObject toJson() { - JsonObject obj = new JsonObject(); - obj.add("testPlanRun", testPlanRun.toJson()); - obj.add("deviceInfo", new JsonPrimitive(StringUtils.join(devices, ", "))); - return obj; - } - - @Override - public int compareTo(TestPlanRunMetadata o) { - return new Long(o.testPlanRun.getStartTimestamp()) - .compareTo(this.testPlanRun.getStartTimestamp()); - } - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - String testType = - request.getParameter("type") == null ? "plan" : request.getParameter("type"); - - RequestDispatcher dispatcher; - if (testType.equalsIgnoreCase("plan")) { - dispatcher = this.getTestPlanDispatcher(request, response); - } else { - dispatcher = this.getTestSuiteDispatcher(request, response); - } - - try { - request.setAttribute("testType", testType); - response.setStatus(HttpServletResponse.SC_OK); - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e); - } - } - - private RequestDispatcher getTestPlanDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_plan_release.jsp"; - - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - Long startTime = null; // time in microseconds - Long endTime = null; // time in microseconds - if (request.getParameter("startTime") != null) { - String time = request.getParameter("startTime"); - try { - startTime = Long.parseLong(time); - startTime = startTime > 0 ? startTime : null; - } catch (NumberFormatException e) { - startTime = null; - } - } - if (request.getParameter("endTime") != null) { - String time = request.getParameter("endTime"); - try { - endTime = Long.parseLong(time); - endTime = endTime > 0 ? endTime : null; - } catch (NumberFormatException e) { - endTime = null; - } - } - SortDirection dir = SortDirection.DESCENDING; - if (startTime != null && endTime == null) { - dir = SortDirection.ASCENDING; - } - boolean unfiltered = request.getParameter("unfiltered") != null; - boolean showPresubmit = request.getParameter("showPresubmit") != null; - boolean showPostsubmit = request.getParameter("showPostsubmit") != null; - // If no params are specified, set to default of postsubmit-only. - if (!(showPresubmit || showPostsubmit)) { - showPostsubmit = true; - } - - // If unfiltered, set showPre- and Post-submit to true for accurate UI. - if (unfiltered) { - showPostsubmit = true; - showPresubmit = true; - } - Filter typeFilter = FilterUtil.getTestTypeFilter(showPresubmit, showPostsubmit, unfiltered); - String testPlan = request.getParameter("plan"); - Key testPlanKey = KeyFactory.createKey(TestPlanEntity.KIND, testPlan); - Filter testPlanRunFilter = - FilterUtil.getTimeFilter( - testPlanKey, TestPlanRunEntity.KIND, startTime, endTime, typeFilter); - Map<String, String[]> parameterMap = request.getParameterMap(); - List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); - userTestFilters.add(0, testPlanRunFilter); - Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); - - List<TestPlanRunMetadata> testPlanRuns = new ArrayList<>(); - Map<Key, TestPlanRunMetadata> testPlanMap = new HashMap<>(); - Key minKey = null; - Key maxKey = null; - List<Key> gets = - FilterUtil.getMatchingKeys( - testPlanKey, - TestPlanRunEntity.KIND, - userTestFilters, - userDeviceFilter, - dir, - MAX_RUNS_PER_PAGE); - Map<Key, Entity> entityMap = datastore.get(gets); - logger.log(Level.INFO, "entityMap => " + entityMap); - for (Key key : gets) { - if (!entityMap.containsKey(key)) { - continue; - } - TestPlanRunEntity testPlanRun = TestPlanRunEntity.fromEntity(entityMap.get(key)); - if (testPlanRun == null) { - continue; - } - TestPlanRunMetadata metadata = new TestPlanRunMetadata(testPlanRun); - testPlanRuns.add(metadata); - testPlanMap.put(key, metadata); - if (minKey == null || key.compareTo(minKey) < 0) { - minKey = key; - } - if (maxKey == null || key.compareTo(maxKey) > 0) { - maxKey = key; - } - } - if (minKey != null && maxKey != null) { - Filter deviceFilter = - FilterUtil.getDeviceTimeFilter( - testPlanKey, TestPlanRunEntity.KIND, minKey.getId(), maxKey.getId()); - Query deviceQuery = - new Query(DeviceInfoEntity.KIND) - .setAncestor(testPlanKey) - .setFilter(deviceFilter) - .setKeysOnly(); - List<Key> deviceGets = new ArrayList<>(); - for (Entity device : - datastore - .prepare(deviceQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - if (testPlanMap.containsKey(device.getParent())) { - deviceGets.add(device.getKey()); - } - } - logger.log(Level.INFO, "deviceGets => " + deviceGets); - Map<Key, Entity> devices = datastore.get(deviceGets); - for (Key key : devices.keySet()) { - if (!testPlanMap.containsKey(key.getParent())) continue; - DeviceInfoEntity device = DeviceInfoEntity.fromEntity(devices.get(key)); - if (device == null) continue; - TestPlanRunMetadata metadata = testPlanMap.get(key.getParent()); - metadata.addDevice(device); - } - } - - testPlanRuns.sort(Comparator.naturalOrder()); - logger.log(Level.INFO, "testPlanRuns => " + testPlanRuns); - - if (testPlanRuns.size() > 0) { - TestPlanRunMetadata firstRun = testPlanRuns.get(0); - endTime = firstRun.testPlanRun.getStartTimestamp(); - - TestPlanRunMetadata lastRun = testPlanRuns.get(testPlanRuns.size() - 1); - startTime = lastRun.testPlanRun.getStartTimestamp(); - } - - List<JsonObject> testPlanRunObjects = new ArrayList<>(); - for (TestPlanRunMetadata metadata : testPlanRuns) { - testPlanRunObjects.add(metadata.toJson()); - } - - FilterUtil.setAttributes(request, parameterMap); - - request.setAttribute("plan", request.getParameter("plan")); - request.setAttribute( - "hasNewer", - new Gson() - .toJson( - DatastoreHelper.hasNewer( - testPlanKey, TestPlanRunEntity.KIND, endTime))); - request.setAttribute( - "hasOlder", - new Gson() - .toJson( - DatastoreHelper.hasOlder( - testPlanKey, TestPlanRunEntity.KIND, startTime))); - request.setAttribute("planRuns", new Gson().toJson(testPlanRunObjects)); - - request.setAttribute("unfiltered", unfiltered); - request.setAttribute("showPresubmit", showPresubmit); - request.setAttribute("showPostsubmit", showPostsubmit); - request.setAttribute("startTime", new Gson().toJson(startTime)); - request.setAttribute("endTime", new Gson().toJson(endTime)); - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - - RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP); - return dispatcher; - } - - private RequestDispatcher getTestSuiteDispatcher( - HttpServletRequest request, HttpServletResponse response) { - String PLAN_RELEASE_JSP = "WEB-INF/jsp/show_suite_release.jsp"; - - String testPlan = request.getParameter("plan"); - String testCategoryType = - Objects.isNull(request.getParameter("testCategoryType")) - ? "1" - : request.getParameter("testCategoryType"); - int page = - Objects.isNull(request.getParameter("page")) - ? 1 - : Integer.valueOf(request.getParameter("page")); - String nextPageToken = - Objects.isNull(request.getParameter("nextPageToken")) - ? "" - : request.getParameter("nextPageToken"); - - com.googlecode.objectify.cmd.Query<TestSuiteResultEntity> testSuiteResultEntityQuery = - ofy().load() - .type(TestSuiteResultEntity.class) - .filter("suitePlan", testPlan) - .filter(this.getTestTypeFieldName(testCategoryType), true); - - if (Objects.nonNull(request.getParameter("branch"))) { - request.setAttribute("branch", request.getParameter("branch")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter("branch", request.getParameter("branch")); - } - if (Objects.nonNull(request.getParameter("hostName"))) { - request.setAttribute("hostName", request.getParameter("hostName")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter("hostName", request.getParameter("hostName")); - } - if (Objects.nonNull(request.getParameter("buildId"))) { - request.setAttribute("buildId", request.getParameter("buildId")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter("buildId", request.getParameter("buildId")); - } - if (Objects.nonNull(request.getParameter("deviceName"))) { - request.setAttribute("deviceName", request.getParameter("deviceName")); - testSuiteResultEntityQuery = - testSuiteResultEntityQuery.filter( - "deviceName", request.getParameter("deviceName")); - } - testSuiteResultEntityQuery = testSuiteResultEntityQuery.orderKey(true); - - Pagination<TestSuiteResultEntity> testSuiteResultEntityPagination = - new Pagination( - testSuiteResultEntityQuery, - page, - Pagination.DEFAULT_PAGE_SIZE, - nextPageToken, - pageCountTokenSet); - - String nextPageTokenPagination = testSuiteResultEntityPagination.getNextPageCountToken(); - if (!nextPageTokenPagination.trim().isEmpty()) { - this.pageCountTokenSet.add(nextPageTokenPagination); - } - - logger.log(Level.INFO, "pageCountTokenSet => " + pageCountTokenSet); - - logger.log(Level.INFO, "list => " + testSuiteResultEntityPagination.getList()); - logger.log( - Level.INFO, - "next page count token => " - + testSuiteResultEntityPagination.getNextPageCountToken()); - logger.log( - Level.INFO, - "page min range => " + testSuiteResultEntityPagination.getMinPageRange()); - logger.log( - Level.INFO, - "page max range => " + testSuiteResultEntityPagination.getMaxPageRange()); - logger.log(Level.INFO, "page size => " + testSuiteResultEntityPagination.getPageSize()); - logger.log(Level.INFO, "total count => " + testSuiteResultEntityPagination.getTotalCount()); - - request.setAttribute("plan", testPlan); - request.setAttribute("page", page); - request.setAttribute("testType", "suite"); - request.setAttribute("testCategoryType", testCategoryType); - request.setAttribute("testSuiteResultEntityPagination", testSuiteResultEntityPagination); - RequestDispatcher dispatcher = request.getRequestDispatcher(PLAN_RELEASE_JSP); - return dispatcher; - } - - private String getTestTypeFieldName(String testCategoryType) { - String fieldName; - switch (testCategoryType) { - case "1": // TOT - fieldName = "testTypeIndex.TOT"; - break; - case "2": // OTA - fieldName = "testTypeIndex.OTA"; - break; - case "4": // SIGNED - fieldName = "testTypeIndex.SIGNED"; - break; - default: - fieldName = "testTypeIndex.TOT"; - break; - } - return fieldName; - } -} |