diff options
author | Young Gyu Park <younggyu@google.com> | 2018-03-29 14:25:25 +0900 |
---|---|---|
committer | Young Gyu Park <younggyu@google.com> | 2018-03-29 14:25:25 +0900 |
commit | 6e361f8dcfdbce11436445bb5cc0b86e290d4e75 (patch) | |
tree | 8569690c40e505958deb1402acae0e483de8d256 /src | |
parent | c9542478819193e4d511e52cfac5c0a53e4711fd (diff) | |
download | dashboard-6e361f8dcfdbce11436445bb5cc0b86e290d4e75.tar.gz |
Creating Green Build Page for suite test data
Test: Tested with browser on local dev server
Bug: 76448184
Change-Id: Ib4a5a53b8fb0c75bea258832287e466cf53a6830
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java | 109 | ||||
-rw-r--r-- | src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp | 80 |
2 files changed, 154 insertions, 35 deletions
diff --git a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java index c719947..5dadb92 100644 --- a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java @@ -20,7 +20,11 @@ import com.android.vts.entity.TestPlanEntity; import com.android.vts.entity.TestPlanRunEntity; import com.android.vts.entity.TestSuiteResultEntity; import com.android.vts.util.FilterUtil; -import com.google.appengine.api.datastore.*; +import com.google.appengine.api.datastore.Entity; +import com.google.appengine.api.datastore.DatastoreService; +import com.google.appengine.api.datastore.DatastoreServiceFactory; +import com.google.appengine.api.datastore.Key; +import com.google.appengine.api.datastore.KeyFactory; import com.google.appengine.api.datastore.Query.Filter; import com.google.appengine.api.datastore.Query.SortDirection; @@ -29,9 +33,21 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.*; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +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; @@ -234,7 +250,7 @@ public class ShowGreenReleaseServlet extends BaseServlet { put( "device", new String[] { - deviceBuildInfo.getDeviceBuildTarget() + deviceBuildInfo.getDeviceBuildTarget() }); } }; @@ -359,7 +375,7 @@ public class ShowGreenReleaseServlet extends BaseServlet { branchKey + "-" + deviceBuildInfo - .getDeviceBuildTarget()) + .getDeviceBuildTarget()) .stream() .filter( entity -> @@ -379,7 +395,6 @@ public class ShowGreenReleaseServlet extends BaseServlet { } }); - request.setAttribute("plan", request.getParameter("plan")); request.setAttribute("greenBuildInfo", baseParamMap); RequestDispatcher dispatcher = request.getRequestDispatcher(GREEN_RELEASE_JSP); @@ -392,10 +407,88 @@ public class ShowGreenReleaseServlet extends BaseServlet { String testPlan = request.getParameter("plan"); - List<TestSuiteResultEntity> testSuiteResultEntityList = - ofy().load().type(TestSuiteResultEntity.class).filter("suitePlan", testPlan).list(); + List<TestSuiteResultEntity> branchTargetInfoList = + ofy().load() + .type(TestSuiteResultEntity.class) + .filter("suitePlan", testPlan) + .project("branch") + .distinct(true) + .project("target") + .distinct(true) + .list(); + + Map<String, List<String>> paramInfoMap = new HashMap<>(); + for (TestSuiteResultEntity testSuiteResultEntity : branchTargetInfoList) { + String branch = testSuiteResultEntity.getBranch(); + String target = testSuiteResultEntity.getTarget(); + if (paramInfoMap.containsKey(branch)) { + paramInfoMap.get(branch).add(target); + } else { + paramInfoMap.put(branch, new LinkedList<>(Arrays.asList(target))); + } + } + + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, -7); + Long oneWeekAgoTimestamp = cal.getTime().getTime() * 1000; + + Map<String, List<DeviceBuildInfo>> baseParamMap = getBasicParamMap(paramInfoMap); + baseParamMap.forEach( + (branchKey, deviceBuildInfoList) -> { + List<List<String>> allPassIdLists = new ArrayList<>(); - request.setAttribute("testSuiteResultEntityList", testSuiteResultEntityList); + deviceBuildInfoList.forEach( + deviceBuildInfo -> { + List<String> passBuildIdList = + ofy().load() + .type(TestSuiteResultEntity.class) + .filter("suitePlan", testPlan) + .filter("branch", branchKey) + .filter( + "target", + deviceBuildInfo.getDeviceBuildTarget()) + .filter("failedTestCaseCount", 0) + .filterKey( + ">=", + com.googlecode.objectify.Key.create( + TestSuiteResultEntity.class, + oneWeekAgoTimestamp)) + .project("buildId") + .list() + .stream() + .map(entity -> entity.getBuildId()) + .collect(Collectors.toList()); + allPassIdLists.add(passBuildIdList); + + TestSuiteResultEntity candidateIdEntity = + ofy().load() + .type(TestSuiteResultEntity.class) + .filter("suitePlan", testPlan) + .filter("branch", branchKey) + .filter( + "target", + deviceBuildInfo.getDeviceBuildTarget()) + .filterKey( + ">=", + com.googlecode.objectify.Key.create( + TestSuiteResultEntity.class, + oneWeekAgoTimestamp)) + .project("buildId") + .order("__key__") + .order("-candidate_percentile") + .first() + .safe(); + if (candidateIdEntity == null) { + deviceBuildInfo.setCandidateBuildId("N/A"); + } else { + deviceBuildInfo.setCandidateBuildId( + candidateIdEntity.getBuildId()); + } + }); + }); + + request.setAttribute("plan", request.getParameter("plan")); + request.setAttribute("greenBuildInfo", baseParamMap); RequestDispatcher dispatcher = request.getRequestDispatcher(GREEN_RELEASE_JSP); return dispatcher; } diff --git a/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp b/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp index b1214cb..c883ee2 100644 --- a/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp +++ b/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp @@ -40,33 +40,59 @@ </div> </div> - <div class='row' id='test-suite-green-release-container'> - <div class="col s12"> - <table class="bordered highlight"> - <thead> - <tr> - <th>Branch</th> - <th>Target</th> - <th>Build ID</th> - <th>Suite Plan</th> - <th>System Fingerprint</th> - <th>Vendor Fingerprint</th> - </tr> - </thead> - <tbody> - <c:forEach var="testSuiteResultEntity" items="${testSuiteResultEntityList}"> - <tr> - <td><c:out value="${testSuiteResultEntity.branch}"></c:out></td> - <td><c:out value="${testSuiteResultEntity.target}"></c:out></td> - <td><c:out value="${testSuiteResultEntity.buildId}"></c:out></td> - <td><c:out value="${testSuiteResultEntity.suitePlan}"></c:out></td> - <td><c:out value="${testSuiteResultEntity.buildSystemFingerprint}"></c:out></td> - <td><c:out value="${testSuiteResultEntity.buildVendorFingerprint}"></c:out></td> - </tr> - </c:forEach> - </tbody> - </table> - </div> + <div class='row' id='test-plan-green-release-container'> + <table class="bordered highlight"> + <thead> + <tr> + <th>Branch</th> + <th>Last Finished Build</th> + <th>Last Green Build</th> + </tr> + </thead> + + <tbody> + <c:forEach var="branchList" items="${greenBuildInfo}"> + <tr> + <td> <c:out value="${branchList.key}"></c:out> </td> + <td> + <c:forEach varStatus="deviceLoop" var="deviceBuildInfo" items="${branchList.value}"> + <p> + <c:out value="${deviceBuildInfo.deviceBuildTarget}"></c:out> : + <c:choose> + <c:when test="${deviceBuildInfo.candidateBuildId eq 'No Test Results'}"> + <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out> + </c:when> + <c:otherwise> + <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out> + </c:otherwise> + </c:choose> + </p> + <c:if test="${!deviceLoop.last}"> + <hr/> + </c:if> + </c:forEach> + </td> + <td> + <c:forEach varStatus="deviceLoop" var="deviceBuildInfo" items="${branchList.value}"> + <p> + <c:choose> + <c:when test="${deviceBuildInfo.greenBuildId eq 'N/A'}"> + <c:out value="${deviceBuildInfo.greenBuildId}"></c:out> + </c:when> + <c:otherwise> + <c:out value="${deviceBuildInfo.greenBuildId}"></c:out> + </c:otherwise> + </c:choose> + </p> + <c:if test="${!deviceLoop.last}"> + <hr/> + </c:if> + </c:forEach> + </td> + </tr> + </c:forEach> + </tbody> + </table> </div> </div> |