diff options
Diffstat (limited to 'src/main/webapp/WEB-INF/jsp')
21 files changed, 0 insertions, 3748 deletions
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 + '×tamp=' + 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> |