summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-03-30 01:07:21 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-30 01:07:21 +0000
commit9cba68549d264aef7b2756b878aec6d9a544b38e (patch)
tree1ee74981e6114de6bfee7e8a1c57bb300f223a2e /src
parent2f5fdd36c8da99d4b45a9b95e4fa6ed1e0018192 (diff)
parent6e361f8dcfdbce11436445bb5cc0b86e290d4e75 (diff)
downloaddashboard-9cba68549d264aef7b2756b878aec6d9a544b38e.tar.gz
Merge "Creating Green Build Page for suite test data"
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java109
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp80
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>