diff options
Diffstat (limited to 'src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java')
-rw-r--r-- | src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java | 197 |
1 files changed, 0 insertions, 197 deletions
diff --git a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java deleted file mode 100644 index 5dc8c6e..0000000 --- a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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.ProfilingPointEntity; -import com.android.vts.entity.ProfilingPointSummaryEntity; -import com.android.vts.util.BoxPlot; -import com.android.vts.util.DatastoreHelper; -import com.android.vts.util.FilterUtil; -import com.android.vts.util.GraphSerializer; -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.Query; -import com.google.appengine.api.datastore.Query.Filter; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.stream.Collectors; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** Servlet for handling requests to load graphs. */ -public class ShowProfilingOverviewServlet extends BaseServlet { - private static final String PROFILING_OVERVIEW_JSP = "WEB-INF/jsp/show_profiling_overview.jsp"; - - @Override - public PageType getNavParentType() { - return PageType.PROFILING_LIST; - } - - @Override - public List<Page> getBreadcrumbLinks(HttpServletRequest request) { - List<Page> links = new ArrayList<>(); - String testName = request.getParameter("testName"); - links.add(new Page(PageType.PROFILING_OVERVIEW, testName, "?testName=" + testName)); - return links; - } - - @Override - public void doGetHandler(HttpServletRequest request, HttpServletResponse response) - throws IOException { - RequestDispatcher dispatcher = null; - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - - String testName = request.getParameter("testName"); - long endTime = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()); - long startTime = endTime - TimeUnit.DAYS.toMicros(30); - - // Create a query for test runs matching the time window filter - - Map<String, String[]> parameterMap = request.getParameterMap(); - boolean hasBranchFilter = parameterMap.containsKey(FilterUtil.FilterKey.BRANCH.getValue()); - Filter deviceFilter; - if (hasBranchFilter) { - deviceFilter = - FilterUtil.FilterKey.BRANCH.getFilterForString( - FilterUtil.getFirstParameter( - parameterMap, FilterUtil.FilterKey.BRANCH.getValue())); - } else { - deviceFilter = - FilterUtil.FilterKey.BRANCH.getFilterForString(ProfilingPointSummaryEntity.ALL); - } - - boolean hasTargetFilter = parameterMap.containsKey(FilterUtil.FilterKey.TARGET.getValue()); - if (hasTargetFilter) { - deviceFilter = - Query.CompositeFilterOperator.and( - deviceFilter, - FilterUtil.FilterKey.TARGET.getFilterForString( - FilterUtil.getFirstParameter( - parameterMap, FilterUtil.FilterKey.TARGET.getValue()))); - } else { - deviceFilter = - Query.CompositeFilterOperator.and( - deviceFilter, - FilterUtil.FilterKey.TARGET.getFilterForString( - ProfilingPointSummaryEntity.ALL)); - } - - Filter startFilter = - new Query.FilterPredicate( - ProfilingPointSummaryEntity.START_TIME, - Query.FilterOperator.GREATER_THAN_OR_EQUAL, - startTime); - Filter endFilter = - new Query.FilterPredicate( - ProfilingPointSummaryEntity.START_TIME, - Query.FilterOperator.LESS_THAN_OR_EQUAL, - endTime); - Filter timeFilter = Query.CompositeFilterOperator.and(startFilter, endFilter); - - Filter filter = Query.CompositeFilterOperator.and(timeFilter, deviceFilter); - - Query profilingPointQuery = - new Query(ProfilingPointEntity.KIND) - .setFilter( - new Query.FilterPredicate( - ProfilingPointEntity.TEST_NAME, - Query.FilterOperator.EQUAL, - testName)); - - List<ProfilingPointEntity> profilingPoints = new ArrayList<>(); - for (Entity e : - datastore - .prepare(profilingPointQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())) { - ProfilingPointEntity pp = ProfilingPointEntity.fromEntity(e); - if (pp == null) continue; - profilingPoints.add(pp); - } - - Map<ProfilingPointEntity, Iterable<Entity>> asyncEntities = new HashMap<>(); - for (ProfilingPointEntity pp : profilingPoints) { - Query profilingQuery = - new Query(ProfilingPointSummaryEntity.KIND) - .setAncestor(pp.getKey()) - .setFilter(filter); - asyncEntities.put( - pp, - datastore - .prepare(profilingQuery) - .asIterable(DatastoreHelper.getLargeBatchOptions())); - } - - Map<String, BoxPlot> plotMap = new HashMap<>(); - for (ProfilingPointEntity pp : profilingPoints) { - if (!plotMap.containsKey(pp.getProfilingPointName())) { - plotMap.put( - pp.getProfilingPointName(), new BoxPlot(pp.getProfilingPointName(), null, pp.getXLabel())); - } - BoxPlot plot = plotMap.get(pp.getProfilingPointName()); - Set<Long> timestamps = new HashSet<>(); - for (Entity e : asyncEntities.get(pp)) { - ProfilingPointSummaryEntity pps = ProfilingPointSummaryEntity.fromEntity(e); - if (pps == null) continue; - plot.addSeriesData(Long.toString(pps.getStartTime()), pps.getSeries(), pps.getGlobalStats()); - timestamps.add(pps.getStartTime()); - } - List<Long> timestampList = new ArrayList<>(timestamps); - timestampList.sort(Comparator.reverseOrder()); - List<String> timestampStrings = - timestampList.stream().map(Object::toString).collect(Collectors.toList()); - plot.setLabels(timestampStrings); - } - - List<BoxPlot> plots = new ArrayList<>(); - for (String key : plotMap.keySet()) { - BoxPlot plot = plotMap.get(key); - if (plot.size() == 0) continue; - plots.add(plot); - } - plots.sort((b1, b2) -> b1.getName().compareTo(b2.getName())); - - Gson gson = - new GsonBuilder() - .registerTypeHierarchyAdapter(BoxPlot.class, new GraphSerializer()) - .create(); - - FilterUtil.setAttributes(request, parameterMap); - request.setAttribute("plots", gson.toJson(plots)); - request.setAttribute("testName", request.getParameter("testName")); - request.setAttribute("branches", new Gson().toJson(DatastoreHelper.getAllBranches())); - request.setAttribute("devices", new Gson().toJson(DatastoreHelper.getAllBuildFlavors())); - dispatcher = request.getRequestDispatcher(PROFILING_OVERVIEW_JSP); - try { - dispatcher.forward(request, response); - } catch (ServletException e) { - logger.log(Level.SEVERE, "Servlet Exception caught : ", e); - } - } -} |