summaryrefslogtreecommitdiff
path: root/src/main/webapp/WEB-INF
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/webapp/WEB-INF')
-rw-r--r--src/main/webapp/WEB-INF/appengine-web.xml24
-rw-r--r--src/main/webapp/WEB-INF/cron.xml42
-rw-r--r--src/main/webapp/WEB-INF/datastore-indexes.xml176
-rw-r--r--src/main/webapp/WEB-INF/jsp/auth_error.jsp38
-rw-r--r--src/main/webapp/WEB-INF/jsp/dashboard_main.jsp351
-rw-r--r--src/main/webapp/WEB-INF/jsp/error_msg.jsp38
-rw-r--r--src/main/webapp/WEB-INF/jsp/footer.jsp25
-rw-r--r--src/main/webapp/WEB-INF/jsp/header.jsp70
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_coverage.jsp210
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp505
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp188
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_graph.jsp292
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp104
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp101
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp100
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_plan_release.jsp119
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_plan_run.jsp236
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp44
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp172
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_release.jsp80
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_suite_release.jsp362
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_table.jsp338
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp52
-rw-r--r--src/main/webapp/WEB-INF/jsp/show_tree.jsp323
-rw-r--r--src/main/webapp/WEB-INF/queue.xml35
-rw-r--r--src/main/webapp/WEB-INF/web.xml363
26 files changed, 0 insertions, 4388 deletions
diff --git a/src/main/webapp/WEB-INF/appengine-web.xml b/src/main/webapp/WEB-INF/appengine-web.xml
deleted file mode 100644
index 714aa54..0000000
--- a/src/main/webapp/WEB-INF/appengine-web.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright 2016 Google Inc.
- 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.
--->
-
-<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
- <threadsafe>true</threadsafe>
- <sessions-enabled>true</sessions-enabled>
- <runtime>java8</runtime>
- <instance-class>F4_1G</instance-class>
-
- <system-properties>
- </system-properties>
-
-</appengine-web-app> \ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/cron.xml b/src/main/webapp/WEB-INF/cron.xml
deleted file mode 100644
index 78beefb..0000000
--- a/src/main/webapp/WEB-INF/cron.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright 2016 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.
--->
-<cronentries>
- <cron>
- <url>/cron/vts_performance_job</url>
- <description>Send daily performance digests.</description>
- <schedule>every day 07:30</schedule>
- <timezone>America/Los_Angeles</timezone>
- </cron>
- <cron>
- <url>/cron/vts_inactivity_job</url>
- <description>Send daily inactivity warnings.</description>
- <schedule>every day 07:30</schedule>
- <timezone>America/Los_Angeles</timezone>
- </cron>
- <cron>
- <url>/cron/test_suite_report_gcs_monitor</url>
- <description>Process suite test report from gcs.</description>
- <schedule>every 5 mins</schedule>
- <timezone>America/Los_Angeles</timezone>
- </cron>
- <cron>
- <url>/cron/vts_spreadsheet_sync_job</url>
- <description>Sync google spreadsheet data with datastore entity.</description>
- <schedule>every day 00:30</schedule>
- <timezone>America/Los_Angeles</timezone>
- </cron>
-</cronentries> \ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/datastore-indexes.xml b/src/main/webapp/WEB-INF/datastore-indexes.xml
deleted file mode 100644
index e4f4a10..0000000
--- a/src/main/webapp/WEB-INF/datastore-indexes.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright 2017 Google Inc.
- 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.
--->
-
-<datastore-indexes autoGenerate="true">
-
- <datastore-index kind="TestPlanRun" ancestor="true" source="manual">
- <property name="type" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestPlanRun" ancestor="true" source="manual">
- <property name="type" direction="asc"/>
- <property name="__key__" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestPlanRun" ancestor="true" source="manual">
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestPlanRun" ancestor="true" source="manual">
- <property name="passCount" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestPlanRun" ancestor="true" source="manual">
- <property name="failCount" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestStatus" ancestor="false" source="manual">
- <property name="failCount" direction="asc"/>
- <property name="passCount" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="true" source="manual">
- <property name="type" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="true" source="manual">
- <property name="type" direction="asc"/>
- <property name="__key__" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="true" source="manual">
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="true" source="manual">
- <property name="hasCoverage" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="true" source="manual">
- <property name="passCount" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="true" source="manual">
- <property name="failCount" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="false" source="manual">
- <property name="testName" direction="asc"/>
- <property name="startTimestamp" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="false" source="manual">
- <property name="testName" direction="asc"/>
- <property name="startTimestamp" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="false" source="manual">
- <property name="testName" direction="asc"/>
- <property name="type" direction="asc"/>
- <property name="startTimestamp" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestRun" ancestor="false" source="manual">
- <property name="testName" direction="asc"/>
- <property name="type" direction="asc"/>
- <property name="startTimestamp" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="ProfilingPointSummary" ancestor="true" source="manual">
- <property name="branch" direction="asc"/>
- <property name="buildFlavor" direction="asc"/>
- <property name="startTime" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="DeviceInfo" ancestor="true" source="manual">
- <property name="branch" direction="asc"/>
- <property name="buildFlavor" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteFileEntity" ancestor="false" source="manual">
- <property name="day" direction="asc"/>
- <property name="month" direction="asc"/>
- <property name="year" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="branch" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="hostName" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="buildId" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="deviceName" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="testType" direction="asc"/>
- <property name="suitePlan" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="suitePlan" direction="asc"/>
- <property name="testTypeIndex.TOT" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="suitePlan" direction="asc"/>
- <property name="testTypeIndex.OTA" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="suitePlan" direction="asc"/>
- <property name="testTypeIndex.SIGNED" direction="asc"/>
- <property name="__key__" direction="desc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="suitePlan" direction="asc"/>
- <property name="branch" direction="asc"/>
- <property name="target" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="branch" direction="asc"/>
- <property name="failedTestCaseCount" direction="asc"/>
- <property name="suitePlan" direction="asc"/>
- <property name="target" direction="asc"/>
- <property name="__key__" direction="asc"/>
- <property name="buildId" direction="asc"/>
- </datastore-index>
-
- <datastore-index kind="TestSuiteResultEntity" ancestor="false" source="manual">
- <property name="branch" direction="asc"/>
- <property name="suitePlan" direction="asc"/>
- <property name="target" direction="asc"/>
- <property name="__key__" direction="asc"/>
- <property name="buildId" direction="asc"/>
- </datastore-index>
-</datastore-indexes>
diff --git a/src/main/webapp/WEB-INF/jsp/auth_error.jsp b/src/main/webapp/WEB-INF/jsp/auth_error.jsp
deleted file mode 100644
index 43bd9f3..0000000
--- a/src/main/webapp/WEB-INF/jsp/auth_error.jsp
+++ /dev/null
@@ -1,38 +0,0 @@
-<%--
- ~ Copyright (c) 2018 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <link rel='stylesheet' href='/css/dashboard_main.css'>
- <%@ include file='header.jsp' %>
- <body>
-
- <div class='container wide'>
-
- <div class="card-panel">
- <span class="red-text text-darken-2">
- <h3> Sorry! you got a wrong email account. </h3>
- <br/>
- You have to register an account to access dashboard.
- </span>
- </div>
-
- </div>
- <%@ include file='footer.jsp' %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/dashboard_main.jsp b/src/main/webapp/WEB-INF/jsp/dashboard_main.jsp
deleted file mode 100644
index 71f6679..0000000
--- a/src/main/webapp/WEB-INF/jsp/dashboard_main.jsp
+++ /dev/null
@@ -1,351 +0,0 @@
-<%--
- ~ Copyright (c) 2016 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <link rel='stylesheet' href='/css/dashboard_main.css'>
- <%@ include file='header.jsp' %>
- <body>
- <script>
- var allTests = ${allTestsJson};
- var testSet = new Set(allTests);
- var subscriptionMap = ${subscriptionMapJson};
-
- var addFavorite = function() {
- if ($(this).hasClass('disabled')) {
- return;
- }
- var test = $('#input-box').val();
- if (!testSet.has(test) || test in subscriptionMap) {
- return;
- }
- $('#add-button').addClass('disabled');
- $.post('/api/favorites', { testName: test}).then(function(data) {
- if (!data.key) {
- return;
- }
- subscriptionMap[test] = data.key;
- var wrapper = $('<div></div>');
- var a = $('<a></a>')
- .attr('href', '${resultsUrl}?testName=' + test);
- var div = $('<div class="col s11 card hoverable option"></div>');
- div.addClass('valign-wrapper waves-effect');
- div.appendTo(a);
- var span = $('<span class="entry valign"></span>').text(test);
- span.appendTo(div);
- a.appendTo(wrapper);
-
- var btnContainer = $('<div class="col s1 center btn-container"></div>');
- var silence = $('<a class="col s6 btn-flat notification-button active"></a>');
- silence.append('<i class="material-icons">notifications_active</i>');
- silence.attr('test', test);
- silence.attr('title', 'Disable notifications');
- silence.appendTo(btnContainer);
- silence.click(toggleNotifications);
-
- var clear = $('<a class="col s6 btn-flat remove-button"></a>');
- clear.append('<i class="material-icons">clear</i>');
- clear.attr('test', test);
- clear.attr('title', 'Remove favorite');
- clear.appendTo(btnContainer);
- clear.click(removeFavorite);
-
- btnContainer.appendTo(wrapper);
-
- wrapper.prependTo('#options').hide()
- .slideDown(150);
- $('#input-box').val(null);
- Materialize.updateTextFields();
- }).always(function() {
- $('#add-button').removeClass('disabled');
- });
- }
-
- var toggleNotifications = function() {
- var self = $(this);
- if (self.hasClass('disabled')) {
- return;
- }
- self.addClass('disabled');
- var test = self.attr('test');
- if (!(test in subscriptionMap)) {
- return;
- }
- var muteStatus = self.hasClass('active');
- var element = self;
- $.post('/api/favorites', { userFavoritesKey: subscriptionMap[test], muteNotifications: muteStatus}).then(function(data) {
- element = self.clone();
- if (element.hasClass('active')) {
- element.find('i').text('notifications_off')
- element.removeClass('active');
- element.addClass('inactive');
- element.attr('title', 'Enable notifications');
- } else {
- element.find('i').text('notifications_active')
- element.removeClass('inactive');
- element.addClass('active');
- element.attr('title', 'Disable notifications');
- }
- element.click(toggleNotifications);
- self.replaceWith(function() {
- return element;
- });
- }).always(function() {
- element.removeClass('disabled');
- });
- }
-
- var removeFavorite = function() {
- var self = $(this);
- if (self.hasClass('disabled')) {
- return;
- }
- var test = self.attr('test');
- if (!(test in subscriptionMap)) {
- return;
- }
- self.addClass('disabled');
- $.ajax({
- url: '/api/favorites/' + subscriptionMap[test],
- type: 'DELETE'
- }).always(function() {
- self.removeClass('disabled');
- }).then(function() {
- delete subscriptionMap[test];
- self.parent().parent().slideUp(150, function() {
- self.remove();
- });
- });
- }
-
- var addFavoriteButton = function() {
- var self = $(this);
- var test = self.attr('test');
-
- $.post('/api/favorites', { testName: test}).then(function(data) {
- if (data.key) {
- subscriptionMap[test] = data.key;
-
- self.children().text("star");
- self.switchClass("add-fav-button", "min-fav-button", 0);
-
- self.off('click', addFavoriteButton);
- self.on('click', removeFavoriteButton);
- }
- })
- .fail(function() {
- alert( "Error occurred on registering your favorite test case!" );
- });
- }
-
- var removeFavoriteButton = function() {
- var self = $(this);
- var test = self.attr('test');
-
- $.ajax({
- url: '/api/favorites/' + subscriptionMap[test],
- type: 'DELETE'
- }).then(function() {
- delete subscriptionMap[test];
-
- self.children().text("star_border");
- self.switchClass("min-fav-button", "add-fav-button", 0);
-
- self.off('click', removeFavoriteButton);
- self.on('click', addFavoriteButton);
- });
- }
-
- $.widget('custom.sizedAutocomplete', $.ui.autocomplete, {
- _resizeMenu: function() {
- this.menu.element.outerWidth($('#input-box').width());
- }
- });
-
- $(function() {
- $('#input-box').sizedAutocomplete({
- source: allTests,
- classes: {
- 'ui-autocomplete': 'card'
- }
- });
-
- $('#input-box').keyup(function(event) {
- if (event.keyCode == 13) { // return button
- $('#add-button').click();
- }
- });
-
- $('.remove-button').click(removeFavorite);
- $('.notification-button').click(toggleNotifications);
- $('#add-button').click(addFavorite);
-
- $('.add-fav-button').click(addFavoriteButton);
-
- $('.min-fav-button').click(removeFavoriteButton);
-
- $('#favoritesLink').click(function() {
- window.open('/', '_self');
- });
- $('#allLink').click(function() {
- window.open('/?showAll=true', '_self');
- });
- $('#acksLink').click(function() {
- window.open('/show_test_acknowledgments', '_self');
- });
- });
- </script>
- <div class='container wide'>
-
- <c:if test="${!showAll}">
- <ul id="guide_collapsible" class="collapsible" data-collapsible="accordion">
- <li>
- <div class="collapsible-header">
- <i class="material-icons">library_books</i>
- Notice
- <span class="new badge right" style="position: inherit;">1</span>
- </div>
- <div class="collapsible-body">
- <div class='row'>
- <div class='col s12' style="margin: 15px 0px 0px 30px;">
- <c:choose>
- <c:when test="${fn:endsWith(serverName, 'googleplex.com')}">
- <c:set var="dataVersion" scope="page" value="new"/>
- <c:choose>
- <c:when test="${fn:startsWith(serverName, 'android-vts-internal')}">
- <c:set var="dataLink" scope="page" value="https://android-vts.appspot.com"/>
- </c:when>
- <c:when test="${fn:startsWith(serverName, 'android-vts-staging')}">
- <c:set var="dataLink" scope="page" value="https://android-vts-staging.appspot.com"/>
- </c:when>
- <c:otherwise>
- <c:set var="dataLink" scope="page" value="https://android-vts-staging.appspot.com"/>
- </c:otherwise>
- </c:choose>
- </c:when>
- <c:when test="${fn:endsWith(serverName, 'appspot.com')}">
- <c:set var="dataVersion" scope="page" value="previous"/>
- <c:choose>
- <c:when test="${fn:startsWith(serverName, 'android-vts-staging')}">
- <c:set var="dataLink" scope="page" value="https://android-vts-staging.googleplex.com"/>
- </c:when>
- <c:when test="${fn:startsWith(serverName, 'android-vts')}">
- <c:set var="dataLink" scope="page" value="https://android-vts-internal.googleplex.com"/>
- </c:when>
- <c:otherwise>
- <c:set var="dataLink" scope="page" value="https://android-vts-staging.googleplex.com"/>
- </c:otherwise>
- </c:choose>
- </c:when>
- <c:otherwise>
- <c:set var="dataVersion" scope="page" value="local dev"/>
- <c:set var="dataLink" scope="page" value="http://localhost"/>
- </c:otherwise>
- </c:choose>
- Recently, we launched new appspot servers for dashboard. Thus you will have two diffrent versions of server for each staging and production data.
- <br/>
- If you want to find the <c:out value = "${dataVersion}"/> test data, please visit the next url <a href="<c:out value = "${dataLink}"/>"><c:out value = "${dataLink}"/></a>.
- </div>
- </div>
- </div>
- </li>
- </ul>
- </c:if>
-
- <c:choose>
- <c:when test='${not empty error}'>
- <div id='error-container' class='row card'>
- <div class='col s12 center-align'>
- <h5>${error}</h5>
- </div>
- </div>
- </c:when>
- <c:otherwise>
- <div class='row home-tabs-row'>
- <div class='col s12'>
- <ul class='tabs'>
- <li class='tab col s4' id='favoritesLink'><a class='${showAll ? "inactive" : "active"}'>Favorites</a></li>
- <li class='tab col s4' id='allLink'><a class='${showAll ? "active" : "inactive"}'>All Tests</a></li>
- <li class='tab col s4' id='acksLink'><a>Test Acknowledgements</a></li>
- </ul>
- </div>
- </div>
- <c:set var='width' value='${showAll ? 11 : 11}' />
- <c:if test='${not showAll}'>
- <div class='row'>
- <div class='input-field col s8'>
- <input type='text' id='input-box'></input>
- <label for='input-box'>Search for tests to add to favorites</label>
- </div>
- <div id='add-button-wrapper' class='col s1 valign-wrapper'>
- <a id='add-button' class='btn-floating btn waves-effect waves-light red valign'><i class='material-icons'>add</i></a>
- </div>
- </div>
- </c:if>
- <div class='row' id='options'>
- <c:forEach items='${testNames}' var='test'>
- <div>
- <a href='${resultsUrl}?testName=${test.name}'>
- <div class='col s${width} card hoverable option valign-wrapper waves-effect'>
- <span class='entry valign'>${test.name}
- <c:if test='${test.failCount >= 0 && test.passCount >= 0}'>
- <c:set var='color' value='${test.failCount > 0 ? "red" : (test.passCount > 0 ? "green" : "grey")}' />
- <span class='indicator right center ${color}'>
- ${test.passCount} / ${test.passCount + test.failCount}
- </span>
- </c:if>
- </span>
- </div>
- </a>
- <c:choose>
- <c:when test="${showAll}">
- <div class="col s1 center btn-container">
- <c:choose>
- <c:when test="${test.isFavorite}">
- <a class="col s6 btn-flat min-fav-button" test="${test.name}" title="Remove favorite">
- <i class="material-icons">star</i>
- </a>
- </c:when>
- <c:otherwise>
- <a class="col s6 btn-flat add-fav-button" test="${test.name}" title="Add favorite">
- <i class="material-icons">star_border</i>
- </a>
- </c:otherwise>
- </c:choose>
- </div>
- </c:when>
- <c:otherwise>
- <div class='col s1 center btn-container'>
- <a class='col s6 btn-flat notification-button ${test.muteNotifications ? "inactive" : "active"}' test='${test.name}' title='${test.muteNotifications ? "Enable" : "Disable"} notifications'>
- <i class='material-icons'>notifications_${test.muteNotifications ? "off" : "active"}</i>
- </a>
- <a class='col s6 btn-flat remove-button' test='${test.name}' title='Remove favorite'>
- <i class='material-icons'>clear</i>
- </a>
- </div>
- </c:otherwise>
- </c:choose>
- </div>
- </c:forEach>
- </div>
- </c:otherwise>
- </c:choose>
- </div>
- <%@ include file='footer.jsp' %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/error_msg.jsp b/src/main/webapp/WEB-INF/jsp/error_msg.jsp
deleted file mode 100644
index 13e6657..0000000
--- a/src/main/webapp/WEB-INF/jsp/error_msg.jsp
+++ /dev/null
@@ -1,38 +0,0 @@
-<%--
- ~ Copyright (c) 2018 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
-<link rel='stylesheet' href='/css/dashboard_main.css'>
-<%@ include file='header.jsp' %>
-<body>
-
-<div class='container wide'>
-
- <div class="card-panel">
- <span class="red-text text-darken-2">
- <h3> <c:out value="${error_title}"></c:out> </h3>
- <br/>
- <c:out value="${error_message}"></c:out>
- </span>
- </div>
-
-</div>
-<%@ include file='footer.jsp' %>
-</body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/footer.jsp b/src/main/webapp/WEB-INF/jsp/footer.jsp
deleted file mode 100644
index b804a21..0000000
--- a/src/main/webapp/WEB-INF/jsp/footer.jsp
+++ /dev/null
@@ -1,25 +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.
- --%>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<footer class="page-footer" style="height: 70px;">
- <div class="footer-copyright">
- <div class="container">
- © 2017 - The Android Open Source Project
- </div>
- </div>
-</footer>
diff --git a/src/main/webapp/WEB-INF/jsp/header.jsp b/src/main/webapp/WEB-INF/jsp/header.jsp
deleted file mode 100644
index 1d7de87..0000000
--- a/src/main/webapp/WEB-INF/jsp/header.jsp
+++ /dev/null
@@ -1,70 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<head>
- <link rel='stylesheet' href='https://www.gstatic.com/external_hosted/materialize/all_styles-bundle.css'>
- <link rel='icon' href='https://www.gstatic.com/images/branding/googleg/1x/googleg_standard_color_32dp.png' sizes='32x32'>
- <link rel='stylesheet' href='https://fonts.googleapis.com/icon?family=Material+Icons'>
- <link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700'>
- <link rel='stylesheet' href='/css/navbar.css'>
- <link rel='stylesheet' href='/css/common.css'>
- <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
- <script src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js'></script>
- <script src='https://www.gstatic.com/external_hosted/materialize/materialize.min.js'></script>
- <script type='text/javascript'>
- if (${analyticsID}) {
- // Autogenerated from Google Analytics
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
- ga('create', ${analyticsID}, 'auto');
- ga('send', 'pageview');
- }
- </script>
- <title>VTS Dashboard</title>
-</head>
-<body>
- <nav id='navbar'>
- <div class='nav-wrapper'>
- <a href='#' class='brand-logo center'>VTS Dashboard</a>
- <ul class='nav-list'>
- <c:forEach items='${navbarLinks}' var='link' varStatus='loop'>
- <li class='${loop.index == activeIndex ? "active" : ""}'>
- <a class='nav-list-item' href='${link.url}'>${link.name}</a>
- </li>
- </c:forEach>
- </ul>
- <ul class='right'><li>
- <a id='dropdown-button' class='dropdown-button btn red lighten-3' href='#' data-activates='dropdown'>
- ${email}
- </a>
- </li></ul>
- <ul id='dropdown' class='dropdown-content'>
- <li><a href='${logoutURL}'>Log out</a></li>
- </ul>
- <c:if test='${breadcrumbLinks != null}'>
- <div id='nav-sublist'>
- <c:forEach items='${breadcrumbLinks}' var='link'>
- <a href='${link.url}' class='nav-sublist-item breadcrumb'>${link.name}</a>
- </c:forEach>
- </div>
- </c:if>
- </div>
- </nav>
-</body>
diff --git a/src/main/webapp/WEB-INF/jsp/show_coverage.jsp b/src/main/webapp/WEB-INF/jsp/show_coverage.jsp
deleted file mode 100644
index ee68588..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_coverage.jsp
+++ /dev/null
@@ -1,210 +0,0 @@
-<%--
- ~ Copyright (c) 2016 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link rel="stylesheet" href="/css/show_coverage.css">
- <script async defer src="https://apis.google.com/js/api.js"
- onload="this.onload=function(){};handleClientLoad()"
- onreadystatechange="if (this.readyState === 'complete') this.onload()">
- </script>
- <body>
- <script type="text/javascript">
- $(document).ready(function() {
- // Initialize AJAX for CORS
- $.ajaxSetup({
- xhrFields : {
- withCredentials: true
- }
- });
-
- $('.collapsible.popout').collapsible({
- accordion : true
- }).find('.collapsible-header').click(onClick);
-
-
- $("div.collapsible-header > span.indicator.waves-effect").click(function(evt) {
- evt.preventDefault();
-
- $("#loader-indicator").show();
-
- var cmd = $(evt.target).text();
- var testRunId = $(evt.target).data("id");
- var postData = { coverageId: testRunId, testName: "${testName}", testRunId: "${startTime}", cmd: cmd};
- $.post("/api/coverage/data", postData, function() {
- // success
- console.log("success");
- var detachedLi = $(evt.target).parent().parent().detach();
- if (cmd == "enable") {
- $(evt.target).text("disable");
- $(evt.target).parent().removeClass("grey");
- $('ul.collapsible.popout').prepend(detachedLi);
- } else {
- $(evt.target).text("enable");
- $(evt.target).parent().addClass("grey");
- $('ul.collapsible.popout').append(detachedLi);
- }
- })
- .done(function() {
- // Done
- $("#loader-indicator").fadeOut("slow");
- })
- .fail(function() {
- alert( "Error occurred during changing the status" );
- });
- });
- });
-
- function handleClientLoad() {
- // Load the API client and auth2 library
- gapi.load('client:auth2', initClient);
- }
-
- function initClient() {
- gapi.client.init({
- client_id: ${clientId},
- scope: ${gerritScope}
- }).then(function () {
- // displayEntries();
- });
- }
-
- /* Open a window to Gerrit so that user can login.
- Minimize the previously clicked entry.
- */
- var gerritLogin = function(element) {
- window.open(${gerritURI}, "Ratting", "toolbar=0,status=0");
- element.click();
- }
-
- /* Loads source code for a particular entry and displays it with
- coverage information as the accordion entry expands.
- */
- var onClick = function() {
- // Remove source code from the accordion entry that was open before
- var self = $(this);
- var prev = self.parent().siblings('li.active');
- if (prev.length > 0) {
- prev.find('.table-container').empty();
- }
- var url = self.parent().data('url');
- var container = self.parent().find('.table-container');
- container.html('<div class="center-align">Loading...</div>');
- var coverageVectors = self.parent().data('coverage');
- if (self.parent().hasClass('active')) {
- // Remove the code from display
- container.empty();
- } else {
- /* Fetch and display the code.
- Note: a coverageVector may be shorter than sourceContents due
- to non-executable (i.e. comments or language-specific syntax)
- lines in the code. Trailing source lines that have no
- coverage information are assumed to be non-executable.
- */
- $.ajax({
- url: url,
- dataType: 'text'
- }).promise().done(function(src) {
- src = atob(src);
- if (!src) return;
- srcLines = src.split('\n');
- covered = 0;
- total = 0;
- var table = $('<table class="table"></table>');
- var rows = srcLines.forEach(function(line, j) {
- var count = coverageVectors[j];
- var row = $('<tr></tr>');
- if (typeof count == 'undefined' || count < 0) {
- count = "--";
- } else if (count == 0) {
- row.addClass('uncovered');
- total += 1;
- } else {
- row.addClass('covered');
- total += 1;
- }
- row.append('<td class="count">' + String(count) + '</td>');
- row.append('<td class="line_no">' + String(j+1) + '</td>');
- code = $('<td class="code"></td>');
- code.text(String(line));
- code.appendTo(row);
- row.appendTo(table);
- });
- container.empty();
- container.append(table);
- }).fail(function(error) {
- if (error.status == 0) { // origin error, refresh cookie
- container.empty();
- container.html('<div class="center-align">' +
- '<span class="login-button">' +
- 'Click to authorize Gerrit access' +
- '</span></div>');
- container.find('.login-button').click(function() {
- gerritLogin(self);
- });
- } else {
- container.html('<div class="center-align">' +
- 'Not found.</div>');
- }
- });
- }
- }
- </script>
- <div id='coverage-container' class='wide container'>
- <h4 class="section-title"><b>Coverage:</b> </h4>
- <ul class="collapsible popout" data-collapsible="accordion">
- <c:forEach var="coverageEntity" items="${coverageEntityList}" varStatus="loop">
- <li data-url="<c:url value="${coverageEntity.gerritUrl}"/>" data-index="${loop.index}" data-coverage="${coverageEntity.lineCoverage}">
- <div class="collapsible-header <c:out value='${coverageEntity.isIgnored ? "grey" : ""}'/>">
- <i class="material-icons">library_books</i>
- <div class="truncate"><b>${coverageEntity.projectName}</b>/${coverageEntity.filePath}</div>
- <div class="right total-count">${coverageEntity.coveredCount}/${coverageEntity.totalCount}</div>
- <div class="indicator ${coverageEntity.percentage >= 70 ? "green" : "red"}">${coverageEntity.percentage}%</div>
- <c:if test="${isModerator}">
- <span data-id="${coverageEntity.id}" class="indicator waves-effect blue lighten-1" style="margin-left: 5px;"><c:out value='${coverageEntity.isIgnored ? "enable" : "disable"}'/></span>
- </c:if>
- </div>
- <div class="collapsible-body row">
- <div class="html-container">
- <div class="table-container"></div>
- </div>
- </div>
- </li>
- </c:forEach>
- </ul>
- </div>
-
- <div id="loader-indicator" class="loader-background" style="display: none">
- <div class="preloader-wrapper big active">
- <div class="spinner-layer spinner-blue-only">
- <div class="circle-clipper left">
- <div class="circle"></div>
- </div>
- <div class="gap-patch">
- <div class="circle"></div>
- </div>
- <div class="circle-clipper right">
- <div class="circle"></div>
- </div>
- </div>
- </div>
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp b/src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp
deleted file mode 100644
index 0516c9d..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_coverage_overview.jsp
+++ /dev/null
@@ -1,505 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
-<%@ taglib prefix='fmt' uri='http://java.sun.com/jsp/jstl/fmt' %>
-
-<html>
- <!-- <link rel='stylesheet' href='/css/dashboard_main.css'> -->
- <%@ include file='header.jsp' %>
- <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'>
- <link type='text/css' href='/css/test_results.css' rel='stylesheet'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/common.js'></script>
- <script src='js/time.js'></script>
- <script type='text/javascript'>
- google.charts.load('current', {'packages':['table', 'corechart']});
- google.charts.setOnLoadCallback(drawStatsChart);
- google.charts.setOnLoadCallback(drawCoverageCharts);
-
- $(document).ready(function() {
-
- $('select').material_select();
-
- $(".search-icon-wrapper").click(function() {
- $(".search-wrapper").toggle();
- });
-
- var inputIdList = ["device", "branch"];
-
- $("#schBtn").click(function (evt) {
- if($(this).hasClass('disabled')) return;
- var queryParam = "?";
- $.each(inputIdList, function( index, value ) {
- var selectId = value.charAt(0).toUpperCase() + value.slice(1)
- var result = $("#search" + selectId).val();
- if ( !$.isEmptyObject(result) ) {
- queryParam += value + "=" + result.trim() + "&";
- }
- });
- var link = '${pageContext.request.contextPath}' + '/show_coverage_overview' + queryParam;
- window.open(link, '_self');
- });
-
- var no_data_msg = "NO DATA";
-
- $('#coverageModalGraph').modal({
- width: '75%',
- dismissible: true, // Modal can be dismissed by clicking outside of the modal
- opacity: .5, // Opacity of modal background
- inDuration: 300, // Transition in duration
- outDuration: 200, // Transition out duration
- startingTop: '4%', // Starting top style attribute
- endingTop: '10%', // Ending top style attribute
- ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available.
- var testname = modal.data('testname');
- $('#coverageModalTitle').text("Code Coverage Chart : " + testname);
- var query = new google.visualization.Query('show_coverage_overview?pageType=datatable&testName=' + testname);
- // Send the query with a callback function.
- query.send(handleQueryResponse);
- },
- complete: function() {
- $('#coverage_combo_chart_div').empty();
- $('#coverage_line_chart_div').empty();
- $('#coverage_table_chart_div').empty();
-
- $("div.valign-wrapper > h2.center-align:contains('" + no_data_msg + "')").each(function(index){
- $(this).parent().remove();
- });
- $("span.indicator.badge.blue:contains('Graph')").each(function( index ) {
- $(this).removeClass('blue');
- $(this).addClass('grey');
- });
-
- $('#dataTableLoading').show("slow");
- } // Callback for Modal close
- });
-
- // Handle the query response.
- function handleQueryResponse(response) {
- $('#dataTableLoading').hide("slow");
- if (response.isError()) {
- alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
- return;
- }
- // Draw the visualization.
- var data = response.getDataTable();
- if (data.getNumberOfRows() == 0) {
- var blankData = '<div class="valign-wrapper" style="height: 90%;">'
- + '<h2 class="center-align" style="width: 100%;">' + no_data_msg + '</h2>'
- + '</div>';
- $('#coverageModalTitle').after(blankData);
- return;
- }
- data.sort([{column: 0}]);
-
- var date_formatter = new google.visualization.DateFormat({ pattern: "yyyy-MM-dd" });
- date_formatter.format(data, 0);
-
- var dataView = new google.visualization.DataView(data);
-
- // Disable coveredLine and totalLine
- dataView.hideColumns([1,2]);
-
- var lineOptions = {
- title: 'Source Code Line Coverage',
- width: '100%',
- height: 450,
- curveType: 'function',
- intervals: { 'color' : 'series-color' },
- interval: {
- 'fill': {
- 'style': 'area',
- 'curveType': 'function',
- 'fillOpacity': 0.2
- },
- 'bar': {
- 'style': 'bars',
- 'barWidth': 0,
- 'lineWidth': 1,
- 'pointSize': 3,
- 'fillOpacity': 1
- }},
- legend: { position: 'bottom' },
- tooltip: { isHtml: true },
- fontName: 'Roboto',
- titleTextStyle: {
- color: '#757575',
- fontSize: 16,
- bold: false
- },
- pointsVisible: true,
- vAxis:{
- title: 'Code Coverage Ratio (%)',
- titleTextStyle: {
- color: '#424242',
- fontSize: 12,
- italic: false
- },
- textStyle: {
- fontSize: 12,
- color: '#757575'
- },
- },
- hAxis: {
- title: 'Date',
- format: 'yyyy-MM-dd',
- minTextSpacing: 0,
- showTextEvery: 1,
- slantedText: true,
- slantedTextAngle: 45,
- textStyle: {
- fontSize: 12,
- color: '#757575'
- },
- titleTextStyle: {
- color: '#424242',
- fontSize: 12,
- italic: false
- }
- },
- };
- var lineChart = new google.visualization.LineChart(document.getElementById('coverage_line_chart_div'));
- lineChart.draw(dataView, lineOptions);
-
- var tableOptions = {
- title: 'Covered/Total Source Code Line Count (SLOC)',
- width: '95%',
- // height: 350,
- is3D: true
- };
- var tableChart = new google.visualization.Table(document.getElementById('coverage_table_chart_div'));
- tableChart.draw(data, tableOptions);
- }
-
- $('.collapsible').collapsible({
- accordion: false,
- onOpen: function(el) {
- var header = $( el[0].children[0] );
- var body = $( el[0].children[1] );
- var icon = header.children('.material-icons.expand-arrow');
- var testName = header.data('test');
- var timestamp = header.data('time');
- var url = '/api/test_run?test=' + testName + '&timestamp=' + timestamp;
- $.get(url).done(function(data) {
- displayTestDetails(body, data, 16);
- }).fail(function() {
- icon.removeClass('rotate');
- }).always(function() {
- header.removeClass('disabled');
- });
- }, // Callback for Collapsible open
- onClose: function(el) {
- console.log(el);
- var body = $( el[0].children[1] );
- body.empty();
- } // Callback for Collapsible close
- });
-
- $( "span.indicator.badge:contains('Coverage')" ).click(function (evt) {
- var header = $(evt.currentTarget.parentElement);
- var testName = header.data('test');
- var startTime = header.data('time');
- var url = '/show_coverage?testName=' + testName + '&startTime=' + startTime;
- window.location.href = url;
- return false;
- });
-
- $( "span.indicator.badge:contains('Links')" ).click(function (evt) {
- var header = $(evt.currentTarget.parentElement);
- var logLinks = header.data('links');
- showLinks($('body'), logLinks);
- return false;
- });
-
- $( "span.indicator.badge:contains('Graph')" ).click(function (evt) {
- var header = $(evt.currentTarget.parentElement);
- var testname = header.data('test');
- $('#coverageModalGraph').data("testname", testname);
- $('#coverageModalGraph').modal('open');
- $(evt.target).removeClass("grey");
- $(evt.target).addClass("blue");
- return false;
- });
- });
-
- // draw test statistics chart
- function drawStatsChart() {
- var testStats = ${testStats};
- if (testStats.length < 1) {
- return;
- }
- var resultNames = ${resultNamesJson};
- var rows = resultNames.map(function(res, i) {
- nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ')
- .trim().toLowerCase();
- return [nickname, parseInt(testStats[i])];
- });
- rows.unshift(['Result', 'Count']);
-
- // Get CSS color definitions (or default to white)
- var colors = resultNames.map(function(res) {
- return $('.' + res).css('background-color') || 'white';
- });
-
- var data = google.visualization.arrayToDataTable(rows);
- var options = {
- is3D: false,
- colors: colors,
- fontName: 'Roboto',
- fontSize: '14px',
- legend: {position: 'labeled'},
- tooltip: {showColorCode: true, ignoreBounds: false},
- chartArea: {height: '80%', width: '90%'},
- pieHole: 0.4
- };
-
- var chart = new google.visualization.PieChart(document.getElementById('pie-chart-stats'));
- chart.draw(data, options);
- }
-
- // draw the coverage pie charts
- function drawCoverageCharts() {
- var coveredLines = ${coveredLines};
- var uncoveredLines = ${uncoveredLines};
- var rows = [
- ["Result", "Count"],
- ["Covered Lines", coveredLines],
- ["Uncovered Lines", uncoveredLines]
- ];
-
- // Get CSS color definitions (or default to white)
- var colors = [
- $('.TEST_CASE_RESULT_PASS').css('background-color') || 'white',
- $('.TEST_CASE_RESULT_FAIL').css('background-color') || 'white'
- ]
-
- var data = google.visualization.arrayToDataTable(rows);
-
- var optionsRaw = {
- is3D: false,
- colors: colors,
- fontName: 'Roboto',
- fontSize: '14px',
- pieSliceText: 'value',
- legend: {position: 'bottom'},
- chartArea: {height: '80%', width: '90%'},
- tooltip: {showColorCode: true, ignoreBounds: false, text: 'value'},
- pieHole: 0.4
- };
-
- var optionsNormalized = {
- is3D: false,
- colors: colors,
- fontName: 'Roboto',
- fontSize: '14px',
- legend: {position: 'bottom'},
- tooltip: {showColorCode: true, ignoreBounds: false, text: 'percentage'},
- chartArea: {height: '80%', width: '90%'},
- pieHole: 0.4
- };
-
- var chart = new google.visualization.PieChart(document.getElementById('pie-chart-coverage-raw'));
- chart.draw(data, optionsRaw);
-
- chart = new google.visualization.PieChart(document.getElementById('pie-chart-coverage-normalized'));
- chart.draw(data, optionsNormalized);
- }
-
- // refresh the page to see the runs matching the specified filter
- function refresh() {
- var link = '${pageContext.request.contextPath}' +
- '/show_coverage_overview?' + search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- </script>
-
- <body>
- <div class='wide container'>
- <div id="filter-bar">
- <div class="row card search-bar expanded">
- <div class="header-wrapper">
- <h5 class="section-header">
- <b>Code Coverage</b>
- </h5>
- <div class="search-icon-wrapper">
- <i class="material-icons">search</i>
- </div>
- </div>
- <div class="search-wrapper" ${empty branch and empty device ? 'style="display: none"' : ''}>
- <div class="row">
- <div class="col s9">
- <div class="input-field col s4">
- <c:set var="branchVal" value='${fn:replace(branch, "\\\"", "")}'></c:set>
- <select id="searchBranch">
- <option value="" <c:if test="${empty branch}">disabled selected</c:if> >Choose your branch</option>
- <c:forEach items='${branchOptions}' var='branchOption'>
- <option value="${branchOption}" ${branchVal == branchOption ? 'selected' : ''}>${branchOption}</option>
- </c:forEach>
- </select>
- <label>Branch Select</label>
- </div>
- <div class="input-field col s4">
- <c:set var="deviceVal" value='${fn:replace(device, "\\\"", "")}'></c:set>
- <select id="searchDevice">
- <option value="" <c:if test="${empty device}">disabled selected</c:if> >Choose your device</option>
- <c:forEach items='${deviceOptions}' var='deviceOption'>
- <option value="${deviceOption}" ${deviceVal == deviceOption ? 'selected' : ''}>${deviceOption}</option>
- </c:forEach>
- </select>
- <label>Device Select</label>
- </div>
- <div class="col s4"></div>
- </div>
- <div class="refresh-wrapper col s3">
- <a id="schBtn" class="btn-floating btn-medium red waves-effect waves-light" style="margin-right: 30px;">
- <i class="medium material-icons">cached</i>
- </a>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class='row'>
- <div class='col s12'>
- <div class='col s12 card center-align'>
- <div id='legend-wrapper'>
- <c:forEach items='${resultNames}' var='res'>
- <div class='center-align legend-entry'>
- <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/>
- <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/>
- <label for='${res}'>${nickname}</label>
- <div id='${res}' class='${res} legend-bubble'></div>
- </div>
- </c:forEach>
- </div>
- </div>
- </div>
- <div class='col s4 valign-wrapper'>
- <!-- pie chart -->
- <div class='pie-chart-wrapper col s12 valign center-align card'>
- <h6 class='pie-chart-title'>Test Statistics</h6>
- <div id='pie-chart-stats' class='pie-chart-div'></div>
- </div>
- </div>
- <div class='col s4 valign-wrapper'>
- <!-- pie chart -->
- <div class='pie-chart-wrapper col s12 valign center-align card'>
- <h6 class='pie-chart-title'>Line Coverage (Raw)</h6>
- <div id='pie-chart-coverage-raw' class='pie-chart-div'></div>
- </div>
- </div>
- <div class='col s4 valign-wrapper'>
- <!-- pie chart -->
- <div class='pie-chart-wrapper col s12 valign center-align card'>
- <h6 class='pie-chart-title'>Line Coverage (Normalized)</h6>
- <div id='pie-chart-coverage-normalized' class='pie-chart-div'></div>
- </div>
- </div>
- </div>
- <div class='col s12' id='test-results-container'>
- <ul class="collapsible popout test-runs" data-collapsible="expandable">
- <c:forEach var="testRunEntity" items="${testRunEntityList}" varStatus="loop">
- <li class="test-run-container">
- <div data-test="<c:out value="${testRunEntity.testName}" />" data-time="<c:out value="${testRunEntity.startTimestamp}" />" data-links='${testRunEntity.jsonLogLinks}' class="collapsible-header test-run">
- <span class="test-run-metadata">
- <span class="test-run-label">
- <c:out value="${testRunEntity.testName}" />
- </span>
- <br />
- <b>VTS Build: </b><c:out value="${testRunEntity.testBuildId}" />
- <br />
- <b>Host: </b><c:out value="${testRunEntity.hostName}" />
- <br />
- <c:out value="${testRunEntity.startDateTime}" /> - <c:out value="${testRunEntity.endDateTime}" />+0900 (<c:out value="${(testRunEntity.endTimestamp - testRunEntity.startTimestamp) / 1000}" />s)
- </span>
- <span class="indicator badge green" style="color: white;">
- <c:out value="${testRunEntity.passCount}" />/<c:out value="${testRunEntity.passCount + testRunEntity.passCount}" />
- </span>
-
- <c:set var="coveredLineCnt" value="${codeCoverageEntityMap[testRunEntity.id].coveredLineCount}" />
- <c:set var="totalLineCnt" value="${codeCoverageEntityMap[testRunEntity.id].totalLineCount}" />
- <c:set var="covPct"
- value="${(coveredLineCnt / totalLineCnt * 1000) / 10}"/>
-
- <c:choose>
- <c:when test = "${covPct <= 20}">
- <c:set var="badgeColor" value="red" />
- </c:when>
- <c:when test = "${covPct >= 70}">
- <c:set var="badgeColor" value="green" />
- </c:when>
- <c:otherwise>
- <c:set var="badgeColor" value="orange" />
- </c:otherwise>
- </c:choose>
-
- <span class="indicator badge padded hoverable waves-effect <c:out value="${badgeColor}" />" style="color: white; margin-left: 1px;">
- Coverage: <c:out value="${coveredLineCnt}" />/<c:out value="${totalLineCnt}" />
- (<fmt:formatNumber value="${(coveredLineCnt / totalLineCnt * 1000) / 10}" type="number" pattern="#.##"/>%)
- </span>
- <span class="indicator badge padded hoverable waves-effect grey lighten-1" style="color: white; margin-left: 1px;">Links</span>
- <span class="indicator badge padded hoverable waves-effect grey lighten-1" style="color: white; margin-left: 1px;">Graph</span>
- <i class="material-icons expand-arrow">expand_more</i>
- </div>
- <div class="collapsible-body test-results row"></div>
- </li>
- </c:forEach>
- </ul>
-
- </div>
- </div>
-
- <!-- Coverage Graph Modal Structure -->
- <div id="coverageModalGraph" class="modal modal-fixed-footer" style="width: 75%;">
- <div class="modal-content">
- <h4 id="coverageModalTitle">Code Coverage Chart</h4>
-
- <div class="preloader-wrapper big active loaders">
- <div id="dataTableLoading" class="spinner-layer spinner-blue-only">
- <div class="circle-clipper left">
- <div class="circle"></div>
- </div>
- <div class="gap-patch">
- <div class="circle"></div>
- </div>
- <div class="circle-clipper right">
- <div class="circle"></div>
- </div>
- </div>
- </div>
-
- <!--Div that will hold the visualization graph -->
- <div id="coverage_line_chart_div"></div>
- <p></p>
- <p></p>
- <div id="coverage_table_chart_div" class="center-align"></div>
- </div>
- <div class="modal-footer">
- <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat ">Close</a>
- </div>
- </div>
-
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp b/src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp
deleted file mode 100644
index 8d73d34..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_gcs_log.jsp
+++ /dev/null
@@ -1,188 +0,0 @@
-<%--
- ~ Copyright (c) 2018 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link rel='stylesheet' href='/css/show_gcs_log.css'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/time.js'></script>
- <script src='js/plan_runs.js'></script>
- <script src='js/search_header.js'></script>
- <script type='text/javascript'>
- $(document).ready(function() {
- var paraMap = {'path': '', 'entry': ''};
- $('.modal').modal({
- dismissible: true, // Modal can be dismissed by clicking outside of the modal
- opacity: .5, // Opacity of modal background
- inDuration: 300, // Transition in duration
- outDuration: 200, // Transition out duration
- startingTop: '4%', // Starting top style attribute
- endingTop: '10%', // Ending top style attribute
- ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available.
- $('.loading-overlay').show();
- if ($(modal).attr("id") == "logEntryListModal") {
- console.log($(trigger));
- $(trigger).addClass("active");
- paraMap['path'] = "${path}" + trigger.text().trim();
- var fileName = paraMap['path'].substring(paraMap['path'].lastIndexOf('/')+1); // Getting filename
- $(modal).find('#entry-list-modal-title').text(fileName); // Set file name for modal window
- var url = "${requestScope['javax.servlet.forward.servlet_path']}?path=" + paraMap['path'];
- $(modal).find('#downloadLink').prop('href', url + "&action=download");
- $.get( url, function(data) {
- var entryList = $(modal).find('#modal-entry-list');
- $(data.entryList).each(function( index, element ) {
- entryList.append("<li class='collection-item'><a href='#logEntryViewModal' class='modal-trigger'>" + element + "</a></li>");
- });
- }).done(function() {
- $('.loading-overlay').hide();
- });
- } else {
- paraMap['entry'] = trigger.text().trim();
- $(modal).find('#entry-view-modal-title').text(paraMap['entry']);
- var entryUrl = "${requestScope['javax.servlet.forward.servlet_path']}?path=" + paraMap['path'] + "&entry=" + paraMap['entry'];
- $.get( entryUrl, function(data) {
- $(modal).find('#entry-view-modal-content').text(data.entryContent);
- }).done(function() {
- $('.loading-overlay').hide();
- });
- }
- },
- complete: function(modal) {
- if ($(modal).attr("id") == "logEntryListModal") {
- $(modal).find('#modal-entry-list').find("li").remove();
- $("div.collection > a.collection-item.active").removeClass('active')
- } else {
- $(modal).find('#entry-view-modal-content').text('');
- }
- } // Callback for Modal close
- });
- });
- </script>
-
- <body>
- <div class='wide container'>
- <div class='row' id='release-container'>
- <h5>Current Directory Path : ${path}</h5>
- <hr/>
- <div class="row">
- <div class="col s7">
- <h4>Directory List</h4>
- <ul class="collection">
- <c:forEach varStatus="dirLoop" var="dirName" items="${dirList}">
- <li class="collection-item">
- <a href="${requestScope['javax.servlet.forward.servlet_path']}?path=${dirName}">
- <c:out value="${dirName}"></c:out>
- <c:if test="${dirLoop.first && path ne '/'}">
- (Move to Parent)
- </c:if>
- </a>
- </li>
- <c:if test="${!dirLoop.last}">
- </c:if>
- </c:forEach>
- </ul>
- </div>
- <div class="col s5">
- <h4>File List</h4>
- <div class="collection">
- <c:forEach varStatus="fileLoop" var="fileName" items="${fileList}">
- <a href="#logEntryListModal" class="collection-item modal-trigger">
- <c:out value="${fileName}"></c:out>
- </a>
- <c:if test="${!fileLoop.last}">
- </c:if>
- </c:forEach>
- </div>
- </div>
- </div>
-
- </div>
- </div>
-
- <%@ include file="footer.jsp" %>
-
- <!-- Modal For Zip file entries -->
- <div id="logEntryListModal" class="modal">
- <div class="modal-content">
- <h4 id="entry-list-modal-title" class="truncate"></h4>
- <div id="entry-list-modal-content">
- <ul id="modal-entry-list" class="collection"></ul>
- </div>
- </div>
- <div class="modal-footer">
- <div class="row">
- <div class="col s3 offset-s6">
- <a href="#!" id="downloadLink" class="modal-action modal-close waves-effect waves-green btn">Download</a>
- </div>
- <div class="col s3">
- <a href="#!" class="modal-action modal-close waves-effect waves-green btn">Close</a>
- </div>
- </div>
- </div>
-
- <div class="loading-overlay">
- <div class="preloader-wrapper big active" style="top: 25%; left: 45%;">
- <div class="spinner-layer spinner-blue-only">
- <div class="circle-clipper left">
- <div class="circle"></div>
- </div>
- <div class="gap-patch">
- <div class="circle"></div>
- </div>
- <div class="circle-clipper right">
- <div class="circle"></div>
- </div>
- </div>
- </div>
- </div>
-
- </div>
-
- <!-- Modal For Zip file entry's content -->
- <div id="logEntryViewModal" class="modal modal-fixed-footer">
- <div class="modal-content">
- <h4 id="entry-view-modal-title" class="truncate"></h4>
- <div id="entry-view-modal-content">
-
- </div>
- </div>
- <div class="modal-footer">
- <a href="#!" class="modal-action modal-close waves-effect waves-green btn">Close</a>
- </div>
-
- <div class="loading-overlay">
- <div class="preloader-wrapper big active" style="top: 25%; left: 45%;">
- <div class="spinner-layer spinner-blue-only">
- <div class="circle-clipper left">
- <div class="circle"></div>
- </div>
- <div class="gap-patch">
- <div class="circle"></div>
- </div>
- <div class="circle-clipper right">
- <div class="circle"></div>
- </div>
- </div>
- </div>
- </div>
-
- </div>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_graph.jsp b/src/main/webapp/WEB-INF/jsp/show_graph.jsp
deleted file mode 100644
index 7111f58..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_graph.jsp
+++ /dev/null
@@ -1,292 +0,0 @@
-<%--
- ~ Copyright (c) 2016 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link type='text/css' href='/css/datepicker.css' rel='stylesheet'>
- <link type='text/css' href='/css/show_graph.css' rel='stylesheet'>
- <link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css'>
- <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
- <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js'></script>
- <body>
- <script type='text/javascript'>
- google.charts.load('current', {packages:['corechart', 'table', 'line']});
- google.charts.setOnLoadCallback(drawAllGraphs);
-
- ONE_DAY = 86400000000;
- MICRO_PER_MILLI = 1000;
- N_BUCKETS = 200;
-
- var graphs = ${graphs};
-
- $(function() {
- $('select').material_select();
- var date = $('#date').datepicker({
- showAnim: 'slideDown',
- maxDate: new Date()
- });
- date.datepicker('setDate', new Date(${endTime} / MICRO_PER_MILLI));
- $('#load').click(load);
- $('#outlier-select').change(drawAllGraphs);
- });
-
- // Draw all graphs.
- function drawAllGraphs() {
- $('#profiling-container').empty();
- var percentileIndex = Number($('#outlier-select').val());
-
- // Get histogram extrema
- var histMin = null;
- var histMax = null;
- graphs.forEach(function(g) {
- if (g.type != 'HISTOGRAM') return;
- var minVal;
- var maxVal;
- if (percentileIndex == -1) {
- minVal = g.min;
- maxVal = g.max;
- } else {
- minVal = g.percentile_values[percentileIndex];
- var endIndex = g.percentiles.length - percentileIndex - 1
- maxVal = g.percentile_values[endIndex];
- }
- if (!histMin || minVal < histMin) histMin = minVal;
- if (!histMax || maxVal > histMax) histMax = maxVal;
- });
-
- graphs.forEach(function(graph) {
- if (graph.type == 'LINE_GRAPH') drawLineGraph(graph);
- else if (graph.type == 'HISTOGRAM')
- drawHistogram(graph, histMin, histMax);
- });
- }
-
- /**
- * Draw a line graph.
- *
- * Args:
- * lineGraph: a JSON object containing the following fields:
- * - name: the name of the graph
- * - values: an array of numbers
- * - ticks: an array of strings to use as x-axis labels
- * - ids: an array of string labels for each point (e.g. the
- * build info for the run that produced the point)
- * - x_label: the string label for the x axis
- * - y_label: the string label for the y axis
- */
- function drawLineGraph(lineGraph) {
- if (!lineGraph.ticks || lineGraph.ticks.length < 1) {
- return;
- }
- var title = 'Performance';
- if (lineGraph.name) title += ' (' + lineGraph.name + ')';
- lineGraph.ticks.forEach(function (label, i) {
- lineGraph.values[i].unshift(label);
- });
- var data = new google.visualization.DataTable();
- data.addColumn('string', lineGraph.x_label);
- lineGraph.ids.forEach(function(id) {
- data.addColumn('number', id);
- });
- data.addRows(lineGraph.values);
- var options = {
- chart: {
- title: title,
- subtitle: lineGraph.y_label
- },
- legend: { position: 'none' }
- };
- var container = $('<div class="row card center-align col s12 graph-wrapper"></div>');
- container.appendTo('#profiling-container');
- var chartDiv = $('<div class="col s12 graph"></div>');
- chartDiv.appendTo(container);
- var chart = new google.charts.Line(chartDiv[0]);
- chart.draw(data, options);
- }
-
- /**
- * Draw a histogram.
- *
- * Args:
- * hist: a JSON object containing the following fields:
- * - name: the name of the graph
- * - values: an array of numbers
- * - ids: an array of string labels for each point (e.g. the
- * build info for the run that produced the point)
- * - x_label: the string label for the x axis
- * - y_label: the string label for the y axis
- * min: the minimum value to display
- * max: the maximum value to display
- */
- function drawHistogram(hist, min, max) {
- if (!hist.values || hist.values.length == 0) return;
- var title = 'Performance';
- if (hist.name) title += ' (' + hist.name + ')';
- var values = hist.values;
- var histogramData = values.reduce(function(result, d, i) {
- if (d <= max && d >= min) result.push([hist.ids[i], d]);
- return result;
- }, []);
-
- var data = google.visualization.arrayToDataTable(histogramData, true);
- var bucketSize = (max - min) / N_BUCKETS;
-
- var options = {
- title: title,
- titleTextStyle: {
- color: '#757575',
- fontSize: 16,
- bold: false
- },
- legend: { position: 'none' },
- colors: ['#4285F4'],
- fontName: 'Roboto',
- vAxis:{
- title: hist.y_label,
- titleTextStyle: {
- color: '#424242',
- fontSize: 12,
- italic: false
- },
- textStyle: {
- fontSize: 12,
- color: '#757575'
- },
- },
- hAxis: {
- title: hist.x_label,
- textStyle: {
- fontSize: 12,
- color: '#757575'
- },
- titleTextStyle: {
- color: '#424242',
- fontSize: 12,
- italic: false
- }
- },
- bar: { gap: 0 },
- histogram: {
- minValue: min,
- maxValue: max,
- maxNumBuckets: N_BUCKETS,
- bucketSize: bucketSize
- },
- chartArea: {
- width: '100%',
- top: 40,
- left: 60,
- height: 375
- }
- };
- var container = $('<div class="row card col s12 graph-wrapper"></div>');
- container.appendTo('#profiling-container');
-
- var chartDiv = $('<div class="col s12 graph"></div>');
- chartDiv.appendTo(container);
- var chart = new google.visualization.Histogram(chartDiv[0]);
- chart.draw(data, options);
-
- var tableDiv = $('<div class="col s12"></div>');
- tableDiv.appendTo(container);
-
- var tableHtml = '<table class="percentile-table"><thead><tr>';
- hist.percentiles.forEach(function(p) {
- tableHtml += '<th data-field="id">' + p + '%</th>';
- });
- tableHtml += '</tr></thead><tbody><tr>';
- hist.percentile_values.forEach(function(v) {
- tableHtml += '<td>' + v + '</td>';
- });
- tableHtml += '</tbody></table>';
- $(tableHtml).appendTo(tableDiv);
- }
-
- // Reload the page.
- function load() {
- var endTime = $('#date').datepicker('getDate').getTime();
- endTime = endTime + (ONE_DAY / MICRO_PER_MILLI) - 1;
- var filterVal = $('#outlier-select').val();
- var ctx = '${pageContext.request.contextPath}';
- var link = ctx + '/show_graph?profilingPoint=${profilingPointName}' +
- '&testName=${testName}' +
- '&endTime=' + (endTime * MICRO_PER_MILLI) +
- '&filterVal=' + filterVal;
- if ($('#device-select').prop('selectedIndex') > 1) {
- link += '&device=' + $('#device-select').val();
- }
- window.open(link,'_self');
- }
- </script>
- <div id='download' class='fixed-action-btn'>
- <a id='b' class='btn-floating btn-large red waves-effect waves-light'>
- <i class='large material-icons'>file_download</i>
- </a>
- </div>
- <div class='container wide'>
- <div class='row card'>
- <div id='header-container' class='valign-wrapper col s12'>
- <div class='col s3 valign'>
- <h5>Profiling Point:</h5>
- </div>
- <div class='col s9 right-align valign'>
- <h5 class='profiling-name truncate'>${profilingPointName}</h5>
- </div>
- </div>
- <div id='date-container' class='col s12'>
- <c:set var='offset' value='${showFilterDropdown ? 0 : 2}' />
- <c:if test='${showFilterDropdown}'>
- <div id='outlier-select-wrapper' class='col s2'>
- <select id='outlier-select'>
- <option value='-1' ${filterVal eq -1 ? 'selected' : ''}>Show outliers</option>
- <option value='0' ${filterVal eq 0 ? 'selected' : ''}>Filter outliers (1%)</option>
- <option value='1' ${filterVal eq 1 ? 'selected' : ''}>Filter outliers (2%)</option>
- <option value='2' ${filterVal eq 2 ? 'selected' : ''}>Filter outliers (5%)</option>
- </select>
- </div>
- </c:if>
- <div id='device-select-wrapper' class='input-field col s5 m3 offset-m${offset + 4} offset-s${offset}'>
- <select id='device-select'>
- <option value='' disabled>Select device</option>
- <option value='0' ${empty selectedDevice ? 'selected' : ''}>All Devices</option>
- <c:forEach items='${devices}' var='device' varStatus='loop'>
- <option value=${device} ${selectedDevice eq device ? 'selected' : ''}>${device}</option>
- </c:forEach>
- </select>
- </div>
- <input type='text' id='date' name='date' class='col s4 m2'>
- <a id='load' class='btn-floating btn-medium red right waves-effect waves-light'>
- <i class='medium material-icons'>cached</i>
- </a>
- </div>
- </div>
- <div id='profiling-container'>
- </div>
- <c:if test='${not empty error}'>
- <div id='error-container' class='row card'>
- <div class='col s10 offset-s1 center-align'>
- <!-- Error in case of profiling data is missing -->
- <h5>${error}</h5>
- </div>
- </div>
- </c:if>
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp b/src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp
deleted file mode 100644
index 1bb00dd..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_green_plan_release.jsp
+++ /dev/null
@@ -1,104 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link rel='stylesheet' href='/css/show_plan_release.css'>
- <link rel='stylesheet' href='/css/plan_runs.css'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/time.js'></script>
- <script src='js/plan_runs.js'></script>
- <script src='js/search_header.js'></script>
- <script type='text/javascript'>
- $(document).ready(function() {
-
- });
- </script>
-
- <body>
- <div class='wide container'>
- <div class="row">
- <div class="col s12">
- <h4 id="test-plan-section-header">Test Plans</h4>
- </div>
- </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>
- <a href="/show_plan_run?plan=${plan}&time=${deviceBuildInfo.candidateBuildIdTimestamp}">
- <c:out value="${deviceBuildInfo.candidateBuildId}"></c:out>
- </a>
- </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>
- <a href="/show_plan_run?plan=${plan}&time=${deviceBuildInfo.greenBuildIdTimestamp}">
- <c:out value="${deviceBuildInfo.greenBuildId}"></c:out>
- </a>
- </c:otherwise>
- </c:choose>
- </p>
- <c:if test="${!deviceLoop.last}">
- <hr/>
- </c:if>
- </c:forEach>
- </td>
- </tr>
- </c:forEach>
- </tbody>
- </table>
- </div>
-
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
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
deleted file mode 100644
index c883ee2..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_green_suite_release.jsp
+++ /dev/null
@@ -1,101 +0,0 @@
-<%--
- ~ Copyright (c) 2018 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link rel='stylesheet' href='/css/show_plan_release.css'>
- <link rel='stylesheet' href='/css/plan_runs.css'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/time.js'></script>
- <script src='js/plan_runs.js'></script>
- <script src='js/search_header.js'></script>
- <script type='text/javascript'>
- $(document).ready(function() {
-
- });
- </script>
-
- <body>
- <div class='wide container'>
- <div class="row">
- <div class="col s12">
- <h4 id="test-suite-section-header">Test Suites</h4>
- </div>
- </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>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp b/src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp
deleted file mode 100644
index 224d847..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_performance_digest.jsp
+++ /dev/null
@@ -1,100 +0,0 @@
-<%--
- ~ Copyright (c) 2016 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link type='text/css' href='/css/datepicker.css' rel='stylesheet'>
- <link type='text/css' href='/css/show_performance_digest.css' rel='stylesheet'>
- <link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.css'>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
- <body>
- <script type='text/javascript'>
- ONE_DAY = 86400000000;
- MICRO_PER_MILLI = 1000;
-
- function load() {
- var time = $('#date').datepicker('getDate').getTime() - 1;
- time = time * MICRO_PER_MILLI + ONE_DAY; // end of day
- var ctx = '${pageContext.request.contextPath}';
- var link = ctx + '/show_performance_digest?profilingPoint=${profilingPointName}' +
- '&testName=${testName}' +
- '&startTime=' + time;
- if ($('#device-select').prop('selectedIndex') > 1) {
- link += '&device=' + $('#device-select').val();
- }
- window.open(link,'_self');
- }
-
- $(function() {
- var date = $('#date').datepicker({
- showAnim: "slideDown",
- maxDate: new Date()
- });
- date.datepicker('setDate', new Date(${startTime} / MICRO_PER_MILLI));
- $('#load').click(load);
-
- $('.date-label').each(function(i) {
- var label = $(this);
- label.html(moment(parseInt(label.html())).format('M/D/YY'));
- });
- $('select').material_select();
- });
- </script>
- <div class='wide container'>
- <div class='row card'>
- <div id='header-container' class='col s12'>
- <div class='col s12'>
- <h4>Daily Performance Digest</h4>
- </div>
- <div id='device-select-wrapper' class='input-field col s6 m3 offset-m6'>
- <select id='device-select'>
- <option value='' disabled>Select device</option>
- <option value='0' ${empty selectedDevice ? 'selected' : ''}>All Devices</option>
- <c:forEach items='${devices}' var='device' varStatus='loop'>
- <option value=${device} ${selectedDevice eq device ? 'selected' : ''}>${device}</option>
- </c:forEach>
- </select>
- </div>
- <input type='text' id='date' name='date' class='col s5 m2'>
- <a id='load' class='btn-floating btn-medium red right waves-effect waves-light'>
- <i class='medium material-icons'>cached</i>
- </a>
- </div>
- </div>
- <div class='row'>
- <c:forEach items='${tables}' var='table' varStatus='loop'>
- <div class='col s12 card summary'>
- <div class='col s3 valign'>
- <h5>Profiling Point:</h5>
- </div>
- <div class='col s9 right-align valign'>
- <h5 class="profiling-name truncate">${tableTitles[loop.index]}</h5>
- </div>
- ${table}
- <span class='profiling-subtitle'>
- ${tableSubtitles[loop.index]}
- </span>
- </div>
- </c:forEach>
- </div>
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_plan_release.jsp b/src/main/webapp/WEB-INF/jsp/show_plan_release.jsp
deleted file mode 100644
index 9a312e9..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_plan_release.jsp
+++ /dev/null
@@ -1,119 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link rel='stylesheet' href='/css/show_plan_release.css'>
- <link rel='stylesheet' href='/css/plan_runs.css'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/time.js'></script>
- <script src='js/plan_runs.js'></script>
- <script src='js/search_header.js'></script>
- <script type='text/javascript'>
- var search;
- $(document).ready(function() {
- // disable buttons on load
- if (!${hasNewer}) {
- $('#newer-button').toggleClass('disabled');
- }
- if (!${hasOlder}) {
- $('#older-button').toggleClass('disabled');
- }
-
- $('#newer-button').click(prev);
- $('#older-button').click(next);
- search = $('#filter-bar').createSearchHeader('Plan: ', '${plan}', refresh);
- search.addFilter('Branch', 'branch', {
- corpus: ${branches}
- }, ${branch});
- search.addFilter('Device', 'device', {
- corpus: ${devices}
- }, ${device});
- search.addFilter('Device Build ID', 'deviceBuildId', {}, ${deviceBuildId});
- search.addFilter('Test Build ID', 'testBuildId', {}, ${testBuildId});
- search.addFilter('Host', 'hostname', {}, ${hostname});
- search.addFilter('Passing Count', 'passing', {
- validate: 'inequality',
- width: 's2'
- }, ${passing});
- search.addFilter('Non-Passing Count', 'nonpassing', {
- validate: 'inequality',
- width: 's2'
- }, ${nonpassing});
- search.addRunTypeCheckboxes(${showPresubmit}, ${showPostsubmit});
- search.display();
- $('#release-container').showPlanRuns(${planRuns});
- });
-
- // view older data
- function next() {
- if($(this).hasClass('disabled')) return;
- var endTime = ${startTime};
- var link = '${pageContext.request.contextPath}' +
- '/show_plan_release?plan=${plan}&endTime=' + endTime +
- search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // view newer data
- function prev() {
- if($(this).hasClass('disabled')) return;
- var startTime = ${endTime};
- var link = '${pageContext.request.contextPath}' +
- '/show_plan_release?plan=${plan}&startTime=' + startTime +
- search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // refresh the page to see the runs matching the specified filter
- function refresh() {
- var link = '${pageContext.request.contextPath}' +
- '/show_plan_release?plan=${plan}' + search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
- </script>
-
- <body>
- <div class='wide container'>
- <div id='filter-bar'></div>
- <div class='row' id='release-container'></div>
- <div id='newer-wrapper' class='page-button-wrapper fixed-action-btn'>
- <a id='newer-button' class='btn-floating btn red waves-effect'>
- <i class='large material-icons'>keyboard_arrow_left</i>
- </a>
- </div>
- <div id='older-wrapper' class='page-button-wrapper fixed-action-btn'>
- <a id='older-button' class='btn-floating btn red waves-effect'>
- <i class='large material-icons'>keyboard_arrow_right</i>
- </a>
- </div>
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_plan_run.jsp b/src/main/webapp/WEB-INF/jsp/show_plan_run.jsp
deleted file mode 100644
index bec4c76..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_plan_run.jsp
+++ /dev/null
@@ -1,236 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'>
- <link type='text/css' href='/css/test_results.css' rel='stylesheet'>
- <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/time.js'></script>
- <script src='js/test_results.js'></script>
- <script type='text/javascript'>
- google.charts.load('current', {'packages':['table', 'corechart']});
- google.charts.setOnLoadCallback(drawPieChart);
-
- $(document).ready(function() {
- $('#test-results-container').showTests(${testRuns}, true);
- drawSummary();
-
- $('#apiCoverageModal').modal({
- width: '75%',
- dismissible: true, // Modal can be dismissed by clicking outside of the modal
- opacity: .5, // Opacity of modal background
- inDuration: 300, // Transition in duration
- outDuration: 200, // Transition out duration
- startingTop: '4%', // Starting top style attribute
- endingTop: '10%', // Ending top style attribute
- ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available.
- var urlSafeKeyList = modal.data('urlSafeKeyList');
- var halApiInfoList = [];
- var getAjaxList = $.map( urlSafeKeyList, function( urlSafeKey ) {
- return $.get( "/api/coverage/api/data?key=" + urlSafeKey, function(data) {
- halApiInfoList.push(data);
- })
- .fail(function() {
- alert( "Error : can't bring API coverage data from the server" );
- });
- });
-
- $.when.apply($, getAjaxList).then(function() {
- $.each(halApiInfoList, function( index, data ) {
- $("#halApiList").append(halApiListTemplate());
- var version = data.halMajorVersion + '.' + data.halMinorVersion;
- var defaultInfo = data.halPackageName + '@' + version + '::' + data.halInterfaceName;
- $("#halApiList > li:last > div.collapsible-header").html(
- '<i class="material-icons">report</i> HAL API Information : ' + defaultInfo
- );
- /*
- $("#halApiList > li:last > div.collapsible-body > ul.collection.with-header").append(
- '<li class="collection-header">' +
- '</li>'
- );
- */
-
- $("#halApiList > li:last > div.collapsible-body > ul.collection.with-header").append(
- $.map( data.halApi, function( apiName, idx ) {
- var colorClass = data.coveredHalApi.indexOf(apiName) > -1 ? "green" : "red"
- return '<li class="collection-item ' + colorClass + ' lighten-1">' + apiName + '</li>';
- }).join("")
- );
- $("#halApiList").collapsible('open', index);
- });
- $('#dataTableLoading').hide("slow");
- });
- },
- complete: function() {
- $("#halApiList").empty();
- $('#dataTableLoading').show("slow");
- } // Callback for Modal close
- }
- );
- });
-
- function halApiListTemplate() {
- return '<li>' +
- '<div class="collapsible-header">' +
- '<i class="material-icons">report</i> API Information' +
- '</div>' +
- '<div class="collapsible-body">' +
- '<ul class="collection with-header">' +
- '</ul>' +
- '</div>' +
- '</li>';
- }
-
- // to draw pie chart
- function drawPieChart() {
- var topBuildResultCounts = ${topBuildResultCounts};
- if (topBuildResultCounts.length < 1) {
- return;
- }
- var resultNames = ${resultNamesJson};
- var rows = resultNames.map(function(res, i) {
- nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ')
- .trim().toLowerCase();
- return [nickname, parseInt(topBuildResultCounts[i])];
- });
- rows.unshift(['Result', 'Count']);
-
- // Get CSS color definitions (or default to white)
- var colors = resultNames.map(function(res) {
- return $('.' + res).css('background-color') || 'white';
- });
-
- var data = google.visualization.arrayToDataTable(rows);
- var options = {
- is3D: false,
- colors: colors,
- fontName: 'Roboto',
- fontSize: '14px',
- legend: {position: 'bottom'},
- tooltip: {showColorCode: true, ignoreBounds: false},
- chartArea: {height: '80%', width: '90%'},
- pieHole: 0.4
- };
-
- var chart = new google.visualization.PieChart(document.getElementById('pie-chart-div'));
- chart.draw(data, options);
- }
-
- // Draw a test plan run summary box.
- function drawSummary() {
- var testBuildId = ${testBuildId};
- var startTime = ${startTime};
- var endTime = ${endTime};
- var moduleCount = ${moduleCount};
- var passingTestCaseCount = ${passingTestCaseCount};
- var failingTestCaseCount = ${failingTestCaseCount};
- var div = $('<div></div>');
- var details = $('<span></span>').appendTo(div);
- details.append('<b>VTS Build: </b>' + testBuildId + '<br>');
- details.append('<b>Start Time: </b>' + moment().renderTime(startTime, true) + '<br>');
- details.append('<b>End Time: </b>' + moment().renderTime(endTime, true) + '<br>');
- details.append('<b>Duration: </b>' + moment().renderDuration(endTime - startTime) + '<br>');
- details.append('<b>Modules: </b>' + moduleCount + '<br>');
- details.append('<b>Passing Test Cases: </b>' + passingTestCaseCount + '<br>');
- details.append('<b>Non-Passing Test Cases: </b>' + failingTestCaseCount + '<br>');
-
- <c:if test="${totalApiCount > 0 && totalCoveredApiCount >= 0}">
- details.append('<b>Total API : </b><c:out value="${totalApiCount}"/><br>');
- details.append('<b>Total Covered API : </b><c:out value="${totalCoveredApiCount}"/><br>');
- </c:if>
-
- div.appendTo($('#summary-container'));
- }
- </script>
-
- <body>
- <div class='wide container'>
- <div class='row'>
- <div class='col s7'>
- <div class='col s12 card center-align'>
- <div id='legend-wrapper'>
- <c:forEach items='${resultNames}' var='res'>
- <div class='center-align legend-entry'>
- <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/>
- <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/>
- <label for='${res}'>${nickname}</label>
- <div id='${res}' class='${res} legend-bubble'></div>
- </div>
- </c:forEach>
- </div>
- </div>
- <div id='summary-container' class='col s12 card'>
- <span class='summary-header valign-wrapper'>
- <i class='material-icons'>info_outline</i>Run Details
- </span>
- </div>
- </div>
- <div class='col s5 valign-wrapper'>
- <!-- pie chart -->
- <div id='pie-chart-wrapper' class='col s12 valign center-align card'>
- <div id='pie-chart-div'></div>
- </div>
- </div>
- </div>
-
- <div class='col s12' id='test-results-container'></div>
- </div>
-
- <!-- Modal Structure -->
- <div id="apiCoverageModal" class="modal modal-fixed-footer" style="width: 75%;">
- <div class="modal-content">
- <h4 id="coverageModalTitle">API Coverage</h4>
-
- <div class="preloader-wrapper big active loaders">
- <div id="dataTableLoading" class="spinner-layer spinner-blue-only">
- <div class="circle-clipper left">
- <div class="circle"></div>
- </div>
- <div class="gap-patch">
- <div class="circle"></div>
- </div>
- <div class="circle-clipper right">
- <div class="circle"></div>
- </div>
- </div>
- </div>
-
- <div class="row">
- <div class="col s12">
- <ul class="collection with-header">
- <li class="collection-header">
- <h4>Total HAL API List</h4>
- <ul id="halApiList" class="collapsible popout" data-collapsible="expandable">
-
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat ">Close</a>
- </div>
- </div>
-
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp b/src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp
deleted file mode 100644
index f1615d7..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_profiling_list.jsp
+++ /dev/null
@@ -1,44 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <link rel='stylesheet' href='/css/show_release.css'>
- <%@ include file='header.jsp' %>
- <body>
- <div class='container'>
- <div class='row'>
- <div class='col s12'>
- <h4 id='section-header'>Profiling Tests</h4>
- </div>
- </div>
- <div class='row' id='options'>
- <c:forEach items='${testNames}' var='test'>
- <div>
- <a href='/show_profiling_overview?testName=${test}'>
- <div class='col s12 card hoverable option valign-wrapper waves-effect'>
- <span class='entry valign'>${test}</span>
- </div>
- </a>
- </div>
- </c:forEach>
- </div>
- </div>
- <%@ include file='footer.jsp' %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp b/src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp
deleted file mode 100644
index 62bd8de..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_profiling_overview.jsp
+++ /dev/null
@@ -1,172 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link type='text/css' href='/css/datepicker.css' rel='stylesheet'>
- <link type='text/css' href='/css/show_profiling_overview.css' rel='stylesheet'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/search_header.js'></script>
- <script src='js/time.js'></script>
- <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
- <body>
- <script type='text/javascript'>
- google.charts.load('current', {'packages':['corechart']});
- google.charts.setOnLoadCallback(drawAllPlots);
-
- var plots = ${plots};
- var search;
-
- $(document).ready(function() {
- search = $('#filter-bar').createSearchHeader(
- 'Profiling Analysis', '', refresh);
- search.addFilter('Branch', 'branch', {
- corpus: ${branches}
- }, ${branch});
- search.addFilter('Device', 'device', {
- corpus: ${devices}
- }, ${device});
- search.display();
- });
-
- /**
- * Draw a box plot.
- *
- * Args:
- * container: the jquery selector in which to draw the graph.
- * lineGraph: a JSON-serialized BoxPlot.
- */
- function drawBoxPlot(container, plot) {
- var data = new google.visualization.DataTable();
- data.addColumn('string', 'x');
- plot.seriesList.forEach(function(series) {
- data.addColumn('number', series);
- data.addColumn({id:'fill', type:'number', role:'interval'});
- data.addColumn({id:'fill', type:'number', role:'interval'});
- data.addColumn({id:'bar', type:'number', role:'interval'});
- data.addColumn({id:'bar', type:'number', role:'interval'});
- data.addColumn({type:'string', role:'tooltip', p: {'html': true}});
- });
- var rows = plot.values.map(function(day) {
- var dateString = new moment().renderDate(1 * day.label);
- var statArray = day.values.map(function(stat) {
- var tooltip = (
- dateString +
- '</br><b>Mean:</b> ' +
- stat.mean.toFixed(2) +
- '</br><b>Std:</b> ' +
- stat.std.toFixed(2) +
- '</br><b>Count:</b> ' +
- stat.count.toFixed(0));
- return [
- stat.mean,
- stat.mean + stat.std,
- stat.mean - stat.std,
- stat.mean + stat.std,
- stat.mean - stat.std,
- tooltip];
- });
- return [].concat.apply(
- [dateString], statArray);
- });
- data.addRows(rows);
-
- var options = {
- title: plot.name,
- curveType: 'function',
- intervals: { 'color' : 'series-color' },
- interval: {
- 'fill': {
- 'style': 'area',
- 'curveType': 'function',
- 'fillOpacity': 0.2
- },
- 'bar': {
- 'style': 'bars',
- 'barWidth': 0,
- 'lineWidth': 1,
- 'pointSize': 3,
- 'fillOpacity': 1
- }},
- legend: { position: 'bottom' },
- tooltip: { isHtml: true },
- fontName: 'Roboto',
- titleTextStyle: {
- color: '#757575',
- fontSize: 16,
- bold: false
- },
- pointsVisible: true,
- vAxis:{
- title: plot.y_label,
- titleTextStyle: {
- color: '#424242',
- fontSize: 12,
- italic: false
- },
- textStyle: {
- fontSize: 12,
- color: '#757575'
- },
- },
- hAxis: {
- textStyle: {
- fontSize: 12,
- color: '#757575'
- },
- titleTextStyle: {
- color: '#424242',
- fontSize: 12,
- italic: false
- }
- },
- };
- var plot = new google.visualization.LineChart(container[0]);
- plot.draw(data, options);
- }
-
- // Draw all graphs.
- function drawAllPlots() {
- var container = $('#profiling-container');
- container.empty();
-
- plots.forEach(function(g) {
- var plot = $('<div class="box-plot row card"></div>');
- plot.appendTo(container);
- drawBoxPlot(plot.append('<div></div>'), g);
- });
- }
-
- // refresh the page to see the runs matching the specified filter
- function refresh() {
- if($(this).hasClass('disabled')) return;
- var link = '${pageContext.request.contextPath}' +
- '/show_profiling_overview?testName=${testName}' + search.args();
- window.open(link,'_self');
- }
- </script>
- <div class='container wide'>
- <div id='filter-bar' class='row'></div>
- <div id='profiling-container'>
- </div>
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_release.jsp b/src/main/webapp/WEB-INF/jsp/show_release.jsp
deleted file mode 100644
index 9e8c2eb..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_release.jsp
+++ /dev/null
@@ -1,80 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <link rel='stylesheet' href='/css/show_release.css'>
- <%@ include file='header.jsp' %>
- <script type='text/javascript'>
- $(document).ready(function() {
- $("li.tab").each(function( index ) {
- $(this).click(function() {
- window.open($(this).children().attr("href"), '_self');
- });
- });
- });
- </script>
- <body>
- <div class='container'>
- <div class='row'>
- <div class='col s12'>
-
- <ul class="tabs z-depth-1">
- <li class="tab col s6" id="planTabLink">
- <a class="${testType == 'plan' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?type=plan">Test Plans</a>
- </li>
- <li class="tab col s6" id="suiteTabLink">
- <a class="${testType == 'suite' ? 'active' : 'inactive'}" href="${requestScope['javax.servlet.forward.servlet_path']}?type=suite">Test Suite Plans</a>
- </li>
- </ul>
-
- </div>
- </div>
- <div class='row' id='options'>
- <c:set var="typeParam" scope="session" value="${testType == 'suite' ? '&type=suite' : '&type=plan'}"/>
-
- <c:forEach items='${planNames}' var='plan'>
- <c:choose>
- <c:when test="${isAdmin}">
- <div class="col s10 center">
- <a href='/show_plan_release?plan=${plan}${typeParam}'>
- <div class='col s12 card hoverable option valign-wrapper waves-effect'>
- <span class='entry valign'>${plan}</span>
- </div>
- </a>
- </div>
- <div class="col s2 center btn-container" style="margin-top: 9px;">
- <a href='/show_green_release?plan=${plan}${typeParam}' class="waves-effect waves-light btn">Green</a>
- </div>
- </c:when>
- <c:otherwise>
- <div class="col s12 center">
- <a href='/show_plan_release?plan=${plan}${typeParam}'>
- <div class='col s12 card hoverable option valign-wrapper waves-effect'>
- <span class='entry valign'>${plan}</span>
- </div>
- </a>
- </div>
- </c:otherwise>
- </c:choose>
- </c:forEach>
- </div>
- </div>
- <%@ include file='footer.jsp' %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp b/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp
deleted file mode 100644
index 523291a..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_suite_release.jsp
+++ /dev/null
@@ -1,362 +0,0 @@
-<%--
- ~ Copyright (c) 2018 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-<%@ taglib prefix='fmt' uri='http://java.sun.com/jsp/jstl/fmt'%>
-<jsp:useBean id="startDateObject" class="java.util.Date"/>
-<jsp:useBean id="endDateObject" class="java.util.Date"/>
-<c:set var="timeZone" value="America/Los_Angeles"/>
-
-<html>
- <%@ include file='header.jsp' %>
- <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'>
- <link type='text/css' href='/css/test_results.css' rel='stylesheet'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script type='text/javascript'>
- $(document).ready(function() {
-
- $.deparam = $.deparam || function(uri){
- if(uri === undefined){
- uri = window.location.search;
- }
- var queryString = {};
- uri.replace(
- new RegExp(
- "([^?=&]+)(=([^&#]*))?", "g"),
- function($0, $1, $2, $3) { queryString[$1] = $3; }
- );
- return queryString;
- };
-
- $("li.tab").each(function( index ) {
- $(this).click(function() {
- window.open($(this).children().attr("href"), '_self');
- });
- });
-
- $(".search-icon-wrapper").click(function() {
- $(".search-wrapper").slideToggle("fast", function() {
- // Animation complete.
- });
- });
-
- <c:if test="${not empty branch or not empty hostName or not empty buildId or not empty deviceName}">
- $(".search-wrapper").slideToggle("fast");
- </c:if>
-
- $("#searchBtn").click(function(event) {
- event.preventDefault();
-
- var url = '<c:out value="${requestScope['javax.servlet.forward.servlet_path']}" escapeXml="false"></c:out>';
- var params = $.deparam('<c:out value="${requestScope['javax.servlet.forward.query_string']}" escapeXml="false"></c:out>');
-
- var branch = $("#deviceBranch").val().trim();
- if ( branch.length > 0 ) {
- params['branch'] = branch;
- } else {
- delete params['branch'];
- }
- var host = $("#host").val().trim();
- if ( host.length > 0 ) {
- params['hostName'] = host;
- } else {
- delete params['hostName'];
- }
- var buildId = $("#deviceBuildId").val().trim();
- if ( buildId.length > 0 ) {
- params['buildId'] = buildId;
- } else {
- delete params['buildId'];
- }
- var deviceName = $("#deviceName").val().trim();
- if ( deviceName.length > 0 ) {
- params['deviceName'] = deviceName;
- } else {
- delete params['deviceName'];
- }
-
- $(location).prop('href', url + "?" + decodeURIComponent($.param(params)));
- $(this).prop('href', url);
- });
-
- $("#deviceBranch").autocomplete({
- source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ],
- open: function( event, ui ) {
- alert("open")
- },
- close: function( event, ui ) {
- alert("close")
- }
- });
-
- $( "div.test-case-container > div.input-field > a.btn" ).each(function() {
- $( this ).click(function() {
- $(this).parent().prev().children().select();
- document.execCommand('copy');
- alert("Reproduce Command copied to clipboard.");
- });
- });
- });
- </script>
- <body>
- <div class='wide container'>
-
- <div class="row card search-bar expanded">
- <div class="header-wrapper">
- <h5 class="section-header">
- <b>Plan: </b><span><c:out value="${plan}"></c:out></span>
- </h5>
- <div class="search-icon-wrapper">
- <i class="material-icons">search</i>
- </div>
- </div>
- <div class="search-wrapper" style="display: none">
- <div class="col s12">
- <div class="input-field col s4">
- <input id="deviceBranch" type="text" value="<c:out value="${branch}"></c:out>" autocomplete="off" />
- <label>Device Branch</label>
- </div>
- <div class="input-field col s4">
- <input id="host" type="text" value="<c:out value="${hostName}"></c:out>" autocomplete="off" />
- <label>Host</label>
- </div>
- <div class="input-field col s4">
- <input id="deviceBuildId" type="text" value="<c:out value="${buildId}"></c:out>" autocomplete="off" />
- <label>Device Build ID</label>
- </div>
- </div>
- <div class="col s12">
- <div class="input-field col s4">
- <input id="deviceName" type="text" value="<c:out value="${deviceName}"></c:out>" autocomplete="off" />
- <label>Device Name</label>
- </div>
- <div class="input-field col s4">
-
- </div>
- <div class="run-type-wrapper col s4 right-align">
- <a class="waves-effect waves-light btn" id="searchBtn">
- <i class="material-icons left">search</i>Apply
- </a>
- </div>
- </div>
- </div>
- </div>
-
- <div class='row'>
- <div class='col s12'>
-
- <ul class="tabs z-depth-1">
- <li class="tab col s4" id="totTabLink">
- <a class="<c:out value="${testCategoryType == '1' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=1">TOT</a>
- </li>
- <li class="tab col s4" id="signedTabLink">
- <a class="<c:out value="${testCategoryType == '4' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=4">SIGNED</a>
- </li>
- <li class="tab col s4" id="otaTabLink">
- <a class="<c:out value="${testCategoryType == '2' ? 'active' : 'inactive'}"></c:out>" href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=2">OTA</a>
- </li>
- </ul>
-
- </div>
- </div>
-
- <div class='row' id='test-suite-green-release-container'>
- <div class="col s12">
-
- <ul class="collapsible popout test-runs">
- <c:forEach var="testSuiteResultEntity" items="${testSuiteResultEntityPagination.list}">
- <li class="test-run-container">
- <div class="collapsible-header test-run">
- <div class="row" style="margin-bottom: 0px; line-height: 30px;">
- <div class="col s9">
- <b><c:out value="${testSuiteResultEntity.branch}"></c:out>/<c:out value="${testSuiteResultEntity.target}"></c:out> (<c:out value="${testSuiteResultEntity.buildId}"></c:out>)</b>
- </div>
- <div class="col s3">
- <span class="indicator right center
- <c:choose>
- <c:when test="${testSuiteResultEntity.passedTestCaseCount eq 0 and testSuiteResultEntity.failedTestCaseCount eq 0}">
- black
- </c:when>
- <c:otherwise>
- green
- </c:otherwise>
- </c:choose>
- ">
- <c:out value="${testSuiteResultEntity.passedTestCaseCount}"></c:out>/<c:out value="${testSuiteResultEntity.passedTestCaseCount + testSuiteResultEntity.failedTestCaseCount}"></c:out>
- (
- <c:set var="integerVal" value="${fn:substringBefore(testSuiteResultEntity.passedTestCaseRatio, '.')}" />
- <c:choose>
- <c:when test="${integerVal eq '100'}">
- 100%
- </c:when>
- <c:otherwise>
- <c:set var="decimalVal" value="${fn:substring(fn:substringAfter(testSuiteResultEntity.passedTestCaseRatio, '.'), 0, 2)}" />
- <c:choose>
- <c:when test="${decimalVal eq '00'}">
- <c:out value="${integerVal}"></c:out>%
- </c:when>
- <c:otherwise>
- <c:out value="${integerVal}"></c:out>.<c:out value="${decimalVal}"></c:out>%
- </c:otherwise>
- </c:choose>
- </c:otherwise>
- </c:choose>
- )
- </span>
- <c:if test="${!testSuiteResultEntity.bootSuccess}">
- <span class="indicator right center" style="min-width: 0px; padding: 0 2px;"></span>
- <span class="indicator right center red">Boot Error</span>
- </c:if>
- </div>
- <div class="col s5">
- <span class="suite-test-run-metadata">
- <b>Suite Build Number: </b><c:out value="${testSuiteResultEntity.suiteBuildNumber}"></c:out><br>
- <b>Device Name: </b><c:out value="${testSuiteResultEntity.deviceName}"></c:out><br>
- </span>
- </div>
- <div class="col s5">
- <span class="suite-test-run-metadata">
- <b>Host: </b><c:out value="${testSuiteResultEntity.hostName}"></c:out><br>
- <b>Modules: </b><c:out value="${testSuiteResultEntity.modulesDone}"></c:out>/<c:out value="${testSuiteResultEntity.modulesTotal}"></c:out><br>
- </span>
- </div>
- <div class="col s2" style="padding: 5px 12px;">
- <a href="<c:out value="${testSuiteResultEntity.buganizerLink}"></c:out>" class="waves-effect waves-light btn right blue-grey" style="padding: 0 15px;" target="_blank">
- Buganizer
- </a>
- </div>
- <div class="col s12">
- <span class="suite-test-run-metadata">
- <b>Result Log Path: </b>
- <a href="show_gcs_log?path=${testSuiteResultEntity.screenResultLogPath}">
- <c:out value="${testSuiteResultEntity.screenResultLogPath}"></c:out>
- </a>
- <br>
- <b>Infra Log Path: </b>
- <a href="show_gcs_log/download?file=${testSuiteResultEntity.screenInfraLogPath}">
- <c:out value="${testSuiteResultEntity.screenInfraLogPath}"></c:out>
- </a>
- <br>
- </span>
- </div>
- <div class="col s10">
- <span style="font-size: 13px;">
- <jsp:setProperty name="startDateObject" property="time" value="${testSuiteResultEntity.startTime}"/>
- <jsp:setProperty name="endDateObject" property="time" value="${testSuiteResultEntity.endTime}"/>
- <fmt:formatDate value="${startDateObject}" pattern="yyyy-MM-dd HH:mm:ss" timeZone="${timeZone}" /> - <fmt:formatDate value="${endDateObject}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="${timeZone}" />
- <c:set var="executionTime" scope="page" value="${(testSuiteResultEntity.endTime - testSuiteResultEntity.startTime) / 1000}"/>
- (<c:out value="${executionTime}"></c:out>s)
- </span>
- </div>
- <div class="col s2">
- <i class="material-icons expand-arrow">expand_more</i>
- </div>
- </div>
- </div>
- <div class="collapsible-body test-results row" style="display: none;">
- <div class="col test-col grey lighten-5 s12 left-most right-most">
- <h5 class="test-result-label white" style="text-transform: capitalize;">
- Vendor Fingerprint
- </h5>
- <div class="test-case-container">
- <c:out value="${testSuiteResultEntity.buildVendorFingerprint}"></c:out>
- </div>
- </div>
- <div class="col test-col grey lighten-5 s12 left-most right-most">
- <h5 class="test-result-label white" style="text-transform: capitalize;">
- System Fingerprint
- </h5>
- <div class="test-case-container">
- <c:out value="${testSuiteResultEntity.buildSystemFingerprint}"></c:out>
- </div>
- </div>
- <div class="col test-col grey lighten-5 s12 left-most right-most">
- <h5 class="test-result-label white" style="text-transform: capitalize;">
- Reproduce Command
- </h5>
- <div class="row test-case-container">
- <div class="input-field col s9">
- <input type="text" class="validate" readonly="true" onclick="this.select()" value="reproduce --report_path=gs://vts-report/<c:out value="${testSuiteResultEntity.getTestSuiteFileEntityKey().getName()}"></c:out> --suite=<c:out value="${fn:toLowerCase(testSuiteResultEntity.getSuiteName())}"></c:out>" />
- </div>
- <div class="input-field col s3">
- <a class="waves-effect waves-light btn right"><i class="material-icons left">content_copy</i>Copy</a>
- </div>
- </div>
- </div>
- </div>
- </li>
- </c:forEach>
- </ul>
-
- </div>
- </div>
-
- <div class="row">
- <c:set var="searchQueryString" value="" />
- <c:if test="${not empty branch}">
- <c:set var="searchQueryString" value="${searchQueryString}&branch=${branch}" />
- </c:if>
- <c:if test="${not empty hostName}">
- <c:set var="searchQueryString" value="${searchQueryString}&hostName=${hostName}" />
- </c:if>
- <c:if test="${not empty buildId}">
- <c:set var="searchQueryString" value="${searchQueryString}&buildId=${buildId}" />
- </c:if>
- <c:if test="${not empty deviceName}">
- <c:set var="searchQueryString" value="${searchQueryString}&deviceName=${deviceName}" />
- </c:if>
- <div class="col s12 center-align">
- <ul class="pagination">
- <c:choose>
- <c:when test="${testSuiteResultEntityPagination.minPageRange gt testSuiteResultEntityPagination.pageSize}">
- <li class="waves-effect">
- <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.minPageRange - 1}&nextPageToken=${testSuiteResultEntityPagination.previousPageCountToken}${searchQueryString}">
- <i class="material-icons">chevron_left</i>
- </a>
- </li>
- </c:when>
- <c:otherwise>
-
- </c:otherwise>
- </c:choose>
- <c:forEach var="pageLoop" begin="${testSuiteResultEntityPagination.minPageRange}" end="${testSuiteResultEntityPagination.maxPageRange}">
- <li class="waves-effect<c:if test="${pageLoop eq page}"> active</c:if>">
- <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${pageLoop}<c:if test="${testSuiteResultEntityPagination.currentPageCountToken ne ''}">&nextPageToken=${testSuiteResultEntityPagination.currentPageCountToken}</c:if>${searchQueryString}">
- <c:out value="${pageLoop}" />
- </a>
- </li>
- </c:forEach>
- <c:choose>
- <c:when test="${testSuiteResultEntityPagination.maxPages gt testSuiteResultEntityPagination.pageSize}">
- <li class="waves-effect">
- <a href="${requestScope['javax.servlet.forward.servlet_path']}?plan=${plan}&type=${testType}&testCategoryType=${testCategoryType}&page=${testSuiteResultEntityPagination.maxPageRange + 1}&nextPageToken=${testSuiteResultEntityPagination.nextPageCountToken}${searchQueryString}">
- <i class="material-icons">chevron_right</i>
- </a>
- </li>
- </c:when>
- <c:otherwise>
-
- </c:otherwise>
- </c:choose>
- </ul>
- </div>
- </div>
-
- </div>
- <%@ include file='footer.jsp' %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_table.jsp b/src/main/webapp/WEB-INF/jsp/show_table.jsp
deleted file mode 100644
index ec4597c..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_table.jsp
+++ /dev/null
@@ -1,338 +0,0 @@
-<%--
- ~ Copyright (c) 2016 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link type='text/css' href='/css/show_table.css' rel='stylesheet'>
- <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'>
- <link type='text/css' href='/css/search_header.css' rel='stylesheet'>
- <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/search_header.js'></script>
- <script src='js/time.js'></script>
- <script type='text/javascript'>
- google.charts.load('current', {'packages':['table', 'corechart']});
- google.charts.setOnLoadCallback(drawGridTable);
- google.charts.setOnLoadCallback(activateLogLinks);
- google.charts.setOnLoadCallback(drawPieChart);
- google.charts.setOnLoadCallback(function() {
- $('.gradient').removeClass('gradient');
- });
-
- var search;
-
- $(document).ready(function() {
- search = $('#filter-bar').createSearchHeader('Module: ', '${testName}', refresh);
- search.addFilter('Branch', 'branch', {
- corpus: ${branches}
- }, ${branch});
- search.addFilter('Device', 'device', {
- corpus: ${devices}
- }, ${device});
- search.addFilter('Device Build ID', 'deviceBuildId', {}, ${deviceBuildId});
- search.addFilter('Test Build ID', 'testBuildId', {}, ${testBuildId});
- search.addFilter('Host', 'hostname', {}, ${hostname});
- search.addFilter('Passing Count', 'passing', {
- validate: 'inequality',
- width: 's2'
- }, ${passing});
- search.addFilter('Non-Passing Count', 'nonpassing', {
- validate: 'inequality',
- width: 's2'
- }, ${nonpassing});
- search.addRunTypeCheckboxes(${showPresubmit}, ${showPostsubmit});
- search.display();
-
- // disable buttons on load
- if (!${hasNewer}) {
- $('#newer-button').toggleClass('disabled');
- }
- if (!${hasOlder}) {
- $('#older-button').toggleClass('disabled');
- }
- $('#treeLink').click(function() {
- window.open('/show_tree?testName=${testName}&treeDefault=true', '_self');
- });
- $('#newer-button').click(prev);
- $('#older-button').click(next);
- });
-
- // Actives the log links to display the log info modal when clicked.
- function activateLogLinks() {
- $('.info-btn').click(function(e) {
- showLog(${logInfoMap}[$(this).data('col')]);
- });
- }
-
- /** Displays a modal window with the specified log entries.
- *
- * @param logEntries Array of string arrays. Each entry in the outer array
- * must contain (1) name string, and (2) url string.
- */
- function showLog(logEntries) {
- if (!logEntries || logEntries.length == 0) return;
-
- var logList = $('<ul class="collection"></ul>');
- var entries = logEntries.reduce(function(acc, entry) {
- if (!entry || entry.length == 0) return acc;
- var link = '<a href="' + entry[1] + '"';
- link += 'class="collection-item">' + entry[0] + '</li>';
- return acc + link;
- }, '');
- logList.html(entries);
- var infoContainer = $('#info-modal>.modal-content>.info-container');
- infoContainer.empty();
- logList.appendTo(infoContainer);
- var modal = $('#info-modal');
- modal.modal();
- modal.modal('open');
- }
-
- // refresh the page to see the selected test types (pre-/post-submit)
- function refresh() {
- if($(this).hasClass('disabled')) return;
- var link = '${pageContext.request.contextPath}' +
- '/show_table?testName=${testName}' + search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // view older data
- function next() {
- if($(this).hasClass('disabled')) return;
- var endTime = ${startTime};
- var link = '${pageContext.request.contextPath}' +
- '/show_table?testName=${testName}&endTime=' + endTime +
- search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // view newer data
- function prev() {
- if($(this).hasClass('disabled')) return;
- var startTime = ${endTime};
- var link = '${pageContext.request.contextPath}' +
- '/show_table?testName=${testName}&startTime=' + startTime +
- search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // to draw pie chart
- function drawPieChart() {
- var topBuildResultCounts = ${topBuildResultCounts};
- if (topBuildResultCounts.length < 1) {
- return;
- }
- var resultNames = ${resultNamesJson};
- var rows = resultNames.map(function(res, i) {
- nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ')
- .trim().toLowerCase();
- return [nickname, parseInt(topBuildResultCounts[i])];
- });
- rows.unshift(['Result', 'Count']);
-
- // Get CSS color definitions (or default to white)
- var colors = resultNames.map(function(res) {
- return $('.' + res).css('background-color') || 'white';
- });
-
- var data = google.visualization.arrayToDataTable(rows);
- var options = {
- is3D: false,
- colors: colors,
- fontName: 'Roboto',
- fontSize: '14px',
- legend: {position: 'bottom'},
- tooltip: {showColorCode: true, ignoreBounds: false},
- chartArea: {height: '80%', width: '90%'},
- pieHole: 0.4
- };
-
- var chart = new google.visualization.PieChart(document.getElementById('pie-chart-div'));
- chart.draw(data, options);
- }
-
- // table for grid data
- function drawGridTable() {
- var data = new google.visualization.DataTable();
-
- // Add column headers.
- headerRow = ${headerRow};
- headerRow.forEach(function(d, i) {
- var classNames = 'table-header-content';
- if (i == 0) classNames += ' table-header-legend';
- data.addColumn('string', '<span class="' + classNames + '">' +
- d + '</span>');
- });
-
- var timeGrid = ${timeGrid};
- var durationGrid = ${durationGrid};
- var summaryGrid = ${summaryGrid};
- var resultsGrid = ${resultsGrid};
-
- // Format time grid to a formatted date
- timeGrid = timeGrid.map(function(row) {
- return row.map(function(cell, j) {
- if (j == 0) return cell;
- return moment().renderTime(cell);
- });
- });
-
- // Format duration grid to HH:mm:ss.SSS
- durationGrid = durationGrid.map(function(row) {
- return row.map(function(cell, j) {
- if (j == 0) return cell;
- return moment().renderDuration(cell);
- });
- });
-
- // add rows to the data.
- data.addRows(timeGrid);
- data.addRows(durationGrid);
- data.addRows(summaryGrid);
- data.addRows(resultsGrid);
-
- var table = new google.visualization.Table(document.getElementById('grid-table-div'));
- var classNames = {
- headerRow : 'table-header',
- headerCell : 'table-header-cell'
- };
- var options = {
- showRowNumber: false,
- alternatingRowStyle: true,
- allowHtml: true,
- frozenColumns: 1,
- cssClassNames: classNames,
- sort: 'disable'
- };
- table.draw(data, options);
- }
- </script>
-
- <body>
- <div class='wide container'>
- <div class='row'>
- <div class='col s12'>
- <div class='card'>
- <ul class='tabs'>
- <li class='tab col s6' id='treeLink'><a>Tree</a></li>
- <li class='tab col s6'><a class='active'>Table</a></li>
- </ul>
- </div>
- <div id='filter-bar'></div>
- </div>
- <div class='col s7'>
- <div class='col s12 card center-align'>
- <div id='legend-wrapper'>
- <c:forEach items='${resultNames}' var='res'>
- <div class='center-align legend-entry'>
- <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/>
- <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/>
- <label for='${res}'>${nickname}</label>
- <div id='${res}' class='${res} legend-bubble'></div>
- </div>
- </c:forEach>
- </div>
- </div>
- <div id='profiling-container' class='col s12'>
- <c:choose>
- <c:when test='${empty profilingPointNames}'>
- <div id='error-div' class='center-align card'><h5>${error}</h5></div>
- </c:when>
- <c:otherwise>
- <ul id='profiling-body' class='collapsible' data-collapsible='accordion'>
- <li>
- <div class='collapsible-header'><i class='material-icons'>timeline</i>Profiling Graphs</div>
- <div class='collapsible-body'>
- <ul id='profiling-list' class='collection'>
- <c:forEach items='${profilingPointNames}' var='pt'>
- <c:set var='profPointArgs' value='testName=${testName}&profilingPoint=${pt}'/>
- <c:set var='timeArgs' value='endTime=${endTime}'/>
- <a href='/show_graph?${profPointArgs}&${timeArgs}'
- class='collection-item profiling-point-name'>${pt}
- </a>
- </c:forEach>
- </ul>
- </div>
- </li>
- <li>
- <a class='collapsible-link' href='/show_performance_digest?testName=${testName}'>
- <div class='collapsible-header'><i class='material-icons'>toc</i>Performance Digest</div>
- </a>
- </li>
- </ul>
- </c:otherwise>
- </c:choose>
- </div>
- </div>
- <div class='col s5 valign-wrapper'>
- <!-- pie chart -->
- <div id='pie-chart-wrapper' class='col s12 valign center-align card'>
- <h6 class='pie-chart-title'>Test Status for Device Build ID: ${topBuildId}</h6>
- <div id='pie-chart-div'></div>
- </div>
- </div>
- </div>
-
- <div class='col s12'>
- <div id='chart-holder' class='col s12 card'>
- <!-- Grid tables-->
- <div id='grid-table-div'></div>
- </div>
- </div>
- <div id='newer-wrapper' class='page-button-wrapper fixed-action-btn'>
- <a id='newer-button' class='btn-floating btn red waves-effect'>
- <i class='large material-icons'>keyboard_arrow_left</i>
- </a>
- </div>
- <div id='older-wrapper' class='page-button-wrapper fixed-action-btn'>
- <a id='older-button' class='btn-floating btn red waves-effect'>
- <i class='large material-icons'>keyboard_arrow_right</i>
- </a>
- </div>
- </div>
- <div id="help-modal" class="modal">
- <div class="modal-content">
- <h4>${searchHelpHeader}</h4>
- <p>${searchHelpBody}</p>
- </div>
- <div class="modal-footer">
- <a href="#!" class="modal-action modal-close waves-effect btn-flat">Close</a>
- </div>
- </div>
- <div id="info-modal" class="modal">
- <div class="modal-content">
- <h4>Logs</h4>
- <div class="info-container"></div>
- </div>
- <div class="modal-footer">
- <a href="#!" class="modal-action modal-close waves-effect btn-flat">Close</a>
- </div>
- </div>
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp b/src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp
deleted file mode 100644
index 84ece88..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_test_acknowledgments.jsp
+++ /dev/null
@@ -1,52 +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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <link rel='stylesheet' href='/css/show_test_acknowledgments.css'>
- <link rel='stylesheet' href='/css/test_acknowledgments.css'>
- <%@ include file='header.jsp' %>
- <script src='js/test_acknowledgments.js'></script>
- <script>
- $(document).ready(function() {
- $('#favoritesLink').click(function() {
- window.open('/', '_self');
- });
- $('#allLink').click(function() {
- window.open('/?showAll=true', '_self');
- });
- var acks = $('#acknowledgments').testAcknowledgments(
- ${allTests}, ${branches}, ${devices}, ${testAcknowledgments}, ${readOnly});
- });
- </script>
- <body>
- <div class='container wide'>
- <div class='row home-tabs-row'>
- <div class='col s12'>
- <ul class='tabs'>
- <li class='tab col s4' id='favoritesLink'><a>Favorites</a></li>
- <li class='tab col s4' id='allLink'><a>All Tests</a></li>
- <li class='tab col s4'><a class='active'>Test Acknowledgements</a></li>
- </ul>
- </div>
- </div>
- <div class='row' id='acknowledgments'></div>
- </div>
- <%@ include file='footer.jsp' %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/jsp/show_tree.jsp b/src/main/webapp/WEB-INF/jsp/show_tree.jsp
deleted file mode 100644
index aa9b311..0000000
--- a/src/main/webapp/WEB-INF/jsp/show_tree.jsp
+++ /dev/null
@@ -1,323 +0,0 @@
-<%--
- ~ Copyright (c) 2016 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.
- --%>
-<%@ page contentType='text/html;charset=UTF-8' language='java' %>
-<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
-<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
-
-<html>
- <%@ include file="header.jsp" %>
- <link type='text/css' href='/css/show_test_runs_common.css' rel='stylesheet'>
- <link type='text/css' href='/css/test_results.css' rel='stylesheet'>
- <link rel='stylesheet' href='/css/search_header.css'>
- <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
- <script src='https://www.gstatic.com/external_hosted/moment/min/moment-with-locales.min.js'></script>
- <script src='js/search_header.js'></script>
- <script src='js/time.js'></script>
- <script src='js/test_results.js'></script>
- <script type='text/javascript'>
- google.charts.load('current', {'packages':['table', 'corechart']});
- google.charts.setOnLoadCallback(drawPieChart);
-
- var search;
-
- $(document).ready(function() {
- search = $('#filter-bar').createSearchHeader('Module: ', '${testName}', refresh);
- search.addFilter('Branch', 'branch', {
- corpus: ${branches}
- }, ${branch});
- search.addFilter('Device', 'device', {
- corpus: ${devices}
- }, ${device});
- search.addFilter('Device Build ID', 'deviceBuildId', {}, ${deviceBuildId});
- search.addFilter('Test Build ID', 'testBuildId', {}, ${testBuildId});
- search.addFilter('Host', 'hostname', {}, ${hostname});
- search.addFilter('Passing Count', 'passing', {
- validate: 'inequality',
- width: 's2'
- }, ${passing});
- search.addFilter('Non-Passing Count', 'nonpassing', {
- validate: 'inequality',
- width: 's2'
- }, ${nonpassing});
- search.addRunTypeCheckboxes(${showPresubmit}, ${showPostsubmit});
- search.display();
-
- // disable buttons on load
- if (!${hasNewer}) {
- $('#newer-button').toggleClass('disabled');
- }
- if (!${hasOlder}) {
- $('#older-button').toggleClass('disabled');
- }
- $('#tableLink').click(function() {
- window.open('/show_table?testName=${testName}&treeDefault=false', '_self');
- });
- $('#newer-button').click(prev);
- $('#older-button').click(next);
- $('#test-results-container').showTests(${testRuns});
-
- $('#apiCoverageModal').modal({
- width: '75%',
- dismissible: true, // Modal can be dismissed by clicking outside of the modal
- opacity: .5, // Opacity of modal background
- inDuration: 300, // Transition in duration
- outDuration: 200, // Transition out duration
- startingTop: '4%', // Starting top style attribute
- endingTop: '10%', // Ending top style attribute
- ready: function(modal, trigger) { // Callback for Modal open. Modal and trigger parameters available.
- var urlSafeKeyList = modal.data('urlSafeKeyList');
- var halApiInfoList = [];
- var getAjaxList = $.map( urlSafeKeyList, function( urlSafeKey ) {
- return $.get( "/api/coverage/api/data?key=" + urlSafeKey, function(data) {
- halApiInfoList.push(data);
- })
- .fail(function() {
- alert( "Error : can't bring API coverage data from the server" );
- });
- });
-
- $.when.apply($, getAjaxList).then(function() {
- $.each(halApiInfoList, function( index, data ) {
- $("#halApiList").append(halApiListTemplate());
- var version = data.halMajorVersion + '.' + data.halMinorVersion;
- var defaultInfo = data.halPackageName + '@' + version + '::' + data.halInterfaceName;
- $("#halApiList > li:last > div.collapsible-header").html(
- '<i class="material-icons">report</i> HAL API Information : ' + defaultInfo
- );
-
- $("#halApiList > li:last > div.collapsible-body > ul.collection.with-header").append(
- $.map( data.halApi, function( apiName, idx ) {
- var colorClass = data.coveredHalApi.indexOf(apiName) > -1 ? "green" : "red"
- return '<li class="collection-item ' + colorClass + ' lighten-1">' + apiName + '</li>';
- }).join("")
- );
- $("#halApiList").collapsible('open', index);
- });
- $('#dataTableLoading').hide("slow");
- });
- },
- complete: function() {
- $("#halApiList").empty();
- $('#dataTableLoading').show("slow");
- } // Callback for Modal close
- }
- );
- });
-
- function halApiListTemplate() {
- return '<li>' +
- '<div class="collapsible-header">' +
- '<i class="material-icons">report</i> API Information' +
- '</div>' +
- '<div class="collapsible-body">' +
- '<ul class="collection with-header">' +
- '</ul>' +
- '</div>' +
- '</li>';
- }
-
- // refresh the page to see the selected test types (pre-/post-submit)
- function refresh() {
- if($(this).hasClass('disabled')) return;
- var link = '${pageContext.request.contextPath}' +
- '/show_tree?testName=${testName}' + search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // view older data
- function next() {
- if($(this).hasClass('disabled')) return;
- var endTime = ${startTime};
- var link = '${pageContext.request.contextPath}' +
- '/show_tree?testName=${testName}&endTime=' + endTime +
- search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // view newer data
- function prev() {
- if($(this).hasClass('disabled')) return;
- var startTime = ${endTime};
- var link = '${pageContext.request.contextPath}' +
- '/show_tree?testName=${testName}&startTime=' + startTime +
- search.args();
- if (${unfiltered}) {
- link += '&unfiltered=';
- }
- window.open(link,'_self');
- }
-
- // to draw pie chart
- function drawPieChart() {
- var topBuildResultCounts = ${topBuildResultCounts};
- if (topBuildResultCounts.length < 1) {
- return;
- }
- var resultNames = ${resultNamesJson};
- var rows = resultNames.map(function(res, i) {
- nickname = res.replace('TEST_CASE_RESULT_', '').replace('_', ' ')
- .trim().toLowerCase();
- return [nickname, parseInt(topBuildResultCounts[i])];
- });
- rows.unshift(['Result', 'Count']);
-
- // Get CSS color definitions (or default to white)
- var colors = resultNames.map(function(res) {
- return $('.' + res).css('background-color') || 'white';
- });
-
- var data = google.visualization.arrayToDataTable(rows);
- var options = {
- is3D: false,
- colors: colors,
- fontName: 'Roboto',
- fontSize: '14px',
- legend: {position: 'bottom'},
- tooltip: {showColorCode: true, ignoreBounds: false},
- chartArea: {height: '80%', width: '90%'},
- pieHole: 0.4
- };
-
- var chart = new google.visualization.PieChart(document.getElementById('pie-chart-div'));
- chart.draw(data, options);
- }
- </script>
-
- <body>
- <div class='wide container'>
- <div class='row'>
- <div class='col s12'>
- <div class='card'>
- <ul class='tabs'>
- <li class='tab col s6'><a class='active'>Tree</a></li>
- <li class='tab col s6' id='tableLink'><a>Table</a></li>
- </ul>
- </div>
- <div id='filter-bar'></div>
- </div>
- <div class='col s7'>
- <div class='col s12 card center-align'>
- <div id='legend-wrapper'>
- <c:forEach items='${resultNames}' var='res'>
- <div class='center-align legend-entry'>
- <c:set var='trimmed' value='${fn:replace(res, "TEST_CASE_RESULT_", "")}'/>
- <c:set var='nickname' value='${fn:replace(trimmed, "_", " ")}'/>
- <label for='${res}'>${nickname}</label>
- <div id='${res}' class='${res} legend-bubble'></div>
- </div>
- </c:forEach>
- </div>
- </div>
- <div id='profiling-container' class='col s12'>
- <c:choose>
- <c:when test='${empty profilingPointNames}'>
- <div id='error-div' class='center-align card'><h5>${error}</h5></div>
- </c:when>
- <c:otherwise>
- <ul id='profiling-body' class='collapsible' data-collapsible='accordion'>
- <li>
- <div class='collapsible-header'><i class='material-icons'>timeline</i>Profiling Graphs</div>
- <div class='collapsible-body'>
- <ul id='profiling-list' class='collection'>
- <c:forEach items='${profilingPointNames}' var='pt'>
- <c:set var='profPointArgs' value='testName=${testName}&profilingPoint=${pt}'/>
- <c:set var='timeArgs' value='endTime=${endTime}'/>
- <a href='/show_graph?${profPointArgs}&${timeArgs}'
- class='collection-item profiling-point-name'>${pt}
- </a>
- </c:forEach>
- </ul>
- </div>
- </li>
- <li>
- <a class='collapsible-link' href='/show_performance_digest?testName=${testName}'>
- <div class='collapsible-header'><i class='material-icons'>toc</i>Performance Digest</div>
- </a>
- </li>
- </ul>
- </c:otherwise>
- </c:choose>
- </div>
- </div>
- <div class='col s5 valign-wrapper'>
- <!-- pie chart -->
- <div id='pie-chart-wrapper' class='col s12 valign center-align card'>
- <h6 class='pie-chart-title'>${topBuildId}</h6>
- <div id='pie-chart-div'></div>
- </div>
- </div>
- </div>
-
- <div class='col s12' id='test-results-container'>
- </div>
- <div id='newer-wrapper' class='page-button-wrapper fixed-action-btn'>
- <a id='newer-button' class='btn-floating btn red waves-effect'>
- <i class='large material-icons'>keyboard_arrow_left</i>
- </a>
- </div>
- <div id='older-wrapper' class='page-button-wrapper fixed-action-btn'>
- <a id='older-button' class='btn-floating btn red waves-effect'>
- <i class='large material-icons'>keyboard_arrow_right</i>
- </a>
- </div>
- </div>
-
- <!-- Modal Structure -->
- <div id="apiCoverageModal" class="modal modal-fixed-footer" style="width: 75%;">
- <div class="modal-content">
- <h4 id="coverageModalTitle">API Coverage</h4>
-
- <div class="preloader-wrapper big active loaders">
- <div id="dataTableLoading" class="spinner-layer spinner-blue-only">
- <div class="circle-clipper left">
- <div class="circle"></div>
- </div>
- <div class="gap-patch">
- <div class="circle"></div>
- </div>
- <div class="circle-clipper right">
- <div class="circle"></div>
- </div>
- </div>
- </div>
-
- <div class="row">
- <div class="col s12">
- <ul class="collection with-header">
- <li class="collection-header">
- <h4>Total HAL API List</h4>
- <ul id="halApiList" class="collapsible popout" data-collapsible="expandable">
-
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat ">Close</a>
- </div>
- </div>
-
- <%@ include file="footer.jsp" %>
- </body>
-</html>
diff --git a/src/main/webapp/WEB-INF/queue.xml b/src/main/webapp/WEB-INF/queue.xml
deleted file mode 100644
index 3a116f2..0000000
--- a/src/main/webapp/WEB-INF/queue.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<queue-entries>
- <queue>
- <name>profilingStatsQueue</name>
- <rate>200/s</rate>
- <bucket-size>40</bucket-size>
- </queue>
- <queue>
- <name>suiteTestQueue</name>
- <rate>20/s</rate>
- <bucket-size>40</bucket-size>
- <max-concurrent-requests>10</max-concurrent-requests>
- </queue>
- <queue>
- <name>coverageApiQueue</name>
- <rate>20/s</rate>
- <bucket-size>100</bucket-size>
- <max-concurrent-requests>10</max-concurrent-requests>
- </queue>
-</queue-entries> \ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index a683f48..0000000
--- a/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,363 +0,0 @@
-<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
-<!--
-Copyright 2016 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.
--->
-
-<listener>
- <listener-class>
- com.android.vts.config.ObjectifyListener
- </listener-class>
-</listener>
-
-<filter>
- <filter-name>ObjectifyFilter</filter-name>
- <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
-</filter>
-<filter-mapping>
- <filter-name>ObjectifyFilter</filter-name>
- <url-pattern>/*</url-pattern>
-</filter-mapping>
-
-<servlet>
- <servlet-name>dashboard_main</servlet-name>
- <servlet-class>com.android.vts.servlet.DashboardMainServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_release</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowReleaseServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_green_release</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowGreenReleaseServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_coverage_overview</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowCoverageOverviewServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_tree</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowTreeServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_table</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowTableServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_graph</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowGraphServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_profiling_list</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowProfilingListServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_profiling_overview</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowProfilingOverviewServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_plan_release</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowPlanReleaseServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_plan_run</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowPlanRunServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_performance_digest</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowPerformanceDigestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_coverage</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowCoverageServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_test_acknowledgments</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowTestAcknowledgmentServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>show_gcs_log</servlet-name>
- <servlet-class>com.android.vts.servlet.ShowGcsLogServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>test_data_api</servlet-name>
- <servlet-class>com.android.vts.api.TestDataForDevServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>datastore_api</servlet-name>
- <servlet-class>com.android.vts.api.DatastoreRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>data_api</servlet-name>
- <servlet-class>com.android.vts.api.DataRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>coverage_api</servlet-name>
- <servlet-class>com.android.vts.api.CoverageRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>test_run_api</servlet-name>
- <servlet-class>com.android.vts.api.TestRunRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>favorites_api</servlet-name>
- <servlet-class>com.android.vts.api.UserFavoriteRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>test_suite_api</servlet-name>
- <servlet-class>com.android.vts.api.TestSuiteResultRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>bigtable_legacy_api</servlet-name>
- <servlet-class>com.android.vts.api.BigtableLegacyJsonServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>test_acknowledgments</servlet-name>
- <servlet-class>com.android.vts.api.TestAcknowledgmentRestServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>vts_alert_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsAlertJobServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>vts_performance_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsPerformanceJobServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>vts_profiling_stats_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsProfilingStatsJobServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>vts_coverage_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsCoverageAlertJobServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>vts_inactivity_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsInactivityJobServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>vts_spreadsheet_sync_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsSpreadSheetSyncServlet</servlet-class>
-</servlet>
-
-<servlet>
- <servlet-name>suite_test_report_gcs_monitor_job</servlet-name>
- <servlet-class>com.android.vts.job.VtsSuiteTestJobServlet</servlet-class>
-</servlet>
-
-<servlet-mapping>
- <servlet-name>dashboard_main</servlet-name>
- <url-pattern>/</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_release</servlet-name>
- <url-pattern>/show_release/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_green_release</servlet-name>
- <url-pattern>/show_green_release/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_coverage_overview</servlet-name>
- <url-pattern>/show_coverage_overview/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_tree</servlet-name>
- <url-pattern>/show_tree/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_table</servlet-name>
- <url-pattern>/show_table/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_graph</servlet-name>
- <url-pattern>/show_graph/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_profiling_list</servlet-name>
- <url-pattern>/show_profiling_list/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_profiling_overview</servlet-name>
- <url-pattern>/show_profiling_overview/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_plan_release</servlet-name>
- <url-pattern>/show_plan_release/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_plan_run</servlet-name>
- <url-pattern>/show_plan_run/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_performance_digest</servlet-name>
- <url-pattern>/show_performance_digest/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_coverage</servlet-name>
- <url-pattern>/show_coverage/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_test_acknowledgments</servlet-name>
- <url-pattern>/show_test_acknowledgments/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>show_gcs_log</servlet-name>
- <url-pattern>/show_gcs_log/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>bigtable_legacy_api</servlet-name>
- <url-pattern>/api/bigtable/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>test_data_api</servlet-name>
- <url-pattern>/api/test_data/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>datastore_api</servlet-name>
- <url-pattern>/api/datastore/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>data_api</servlet-name>
- <url-pattern>/api/data/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>coverage_api</servlet-name>
- <url-pattern>/api/coverage/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>test_run_api</servlet-name>
- <url-pattern>/api/test_run/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>favorites_api</servlet-name>
- <url-pattern>/api/favorites/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>test_acknowledgments</servlet-name>
- <url-pattern>/api/test_acknowledgments/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>test_suite_api</servlet-name>
- <url-pattern>/api/test_suite/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>vts_alert_job</servlet-name>
- <url-pattern>/task/vts_alert_job/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>vts_coverage_job</servlet-name>
- <url-pattern>/task/vts_coverage_job/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>vts_profiling_stats_job</servlet-name>
- <url-pattern>/task/vts_profiling_stats_job/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>vts_performance_job</servlet-name>
- <url-pattern>/cron/vts_performance_job/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>vts_inactivity_job</servlet-name>
- <url-pattern>/cron/vts_inactivity_job/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>vts_spreadsheet_sync_job</servlet-name>
- <url-pattern>/cron/vts_spreadsheet_sync_job/*</url-pattern>
-</servlet-mapping>
-
-<servlet-mapping>
- <servlet-name>suite_test_report_gcs_monitor_job</servlet-name>
- <url-pattern>/cron/test_suite_report_gcs_monitor/*</url-pattern>
-</servlet-mapping>
-
-<security-constraint>
- <web-resource-collection>
- <web-resource-name>tasks</web-resource-name>
- <url-pattern>/cron/*</url-pattern>
- <url-pattern>/task/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>admin</role-name>
- </auth-constraint>
-</security-constraint>
-
-<security-constraint>
- <web-resource-collection>
- <web-resource-name>all</web-resource-name>
- <url-pattern>/show_*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>*</role-name>
- </auth-constraint>
-</security-constraint>
-</web-app>