diff options
Diffstat (limited to 'cvp/3rd_party/static/testapi-ui/components/results')
3 files changed, 0 insertions, 640 deletions
diff --git a/cvp/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html b/cvp/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html deleted file mode 100644 index 2f50b0ce..00000000 --- a/cvp/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html +++ /dev/null @@ -1,19 +0,0 @@ -<div> - - <h4>Enter user name or email</h4> - <input type="text" ng-model="ctrl.userName" /> - - <div style="text-align:center;margin-top:20px;"> - <button class="btn btn-default" ng-disabled="ctrl.userName==null || ctrl.userName==''" ng-click="ctrl.addSharedUser(ctrl.tempResult, ctrl.userName)">Commit</button> - </div> - -</div> - - -<style> - input { - border-radius: 10px; - border: 1px solid #eeeeee; - width: 100%; - } -</style> diff --git a/cvp/3rd_party/static/testapi-ui/components/results/results.html b/cvp/3rd_party/static/testapi-ui/components/results/results.html deleted file mode 100644 index 719e6891..00000000 --- a/cvp/3rd_party/static/testapi-ui/components/results/results.html +++ /dev/null @@ -1,106 +0,0 @@ -<div class="container-fluid common-main-container"> -<h3>{{ctrl.pageHeader}}</h3> -<p>{{ctrl.pageParagraph}}</p> -<form class="form-inline" ng-show="ctrl.isUserResults"> -<h4>Upload Results<i class="glyphicon glyphicon-question-sign opnfv-blue" uib-tooltip="results file is logs.xxx.tar.gz under your dovetail installation path"></i></h4> -<div class="form-group col-m-3"> - <input class="form-contrl btn btn-success cvp-btn medium accent-color regular-button" type = "file" file-model = "resultFile"/> -</div> -<div class="form-group col-m-3"> - <a class="btn btn-success cvp-btn medium accent-color regular-button" ng-click="ctrl.uploadFile()"><span>upload result</span></a> -</div> -<div> -<lable>{{ctrl.uploadState}}</label> -</div> -</form> -<div class="row" style="margin-bottom:24px;"></div> -<div cg-busy="{promise:ctrl.authRequest,message:'Loading'}"></div> -<div cg-busy="{promise:ctrl.resultsRequest,message:'Loading'}"></div> - -<div ng-show="ctrl.data" class="results-table" style="width:100%;overflow-x:scroll"> - <table ng-data="ctrl.data.result" ng-show="ctrl.data" class="table table-striped table-hover"> - <thead> - <tr> - <th>Upload Date</th> - <th>Test ID</th> - <th>Owner</th> - <th>File Name</th> - <th>Label</th> - <th>Status</th> - <th>Log</th> - <th>SUT</th> - <th>SUT Version</th> - <th class="col-md-2">Operation</th> - <th class="col-md-2">Share List</th> - </tr> - </thead> - - <tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"> - <tr ng-repeat="(index, result) in ctrl.data.tests"> - <td>{{ result.upload_date | limitTo:19}}</td> - <td><a uib-tooltip="{{ result.id }}" tooltip-placement="top" tooltip-append-to-body="true" ng-click="ctrl.gotoResultDetail(result.id, result._id)">{{ result.id | limitTo:8 }}</a></td> - <td>{{ result.owner }}</td> - <td>{{ result.filename || "None"}}</td> - <td><div class="popover-wrapper"><a editable-theme="bs3" onbeforesave="ctrl.changeLabel(result, 'label', $data)" editable-text="result.label"> {{ result.label || "None" }}</a></div></td> - <td>{{ result.status }}</td> - <td><a ng-click="ctrl.downloadLogs(result.id)">logs</a></td> - <td><a ng-click="ctrl.gotoSUT(result.id)">info</a></td> - <td><div class="popover-wrapper"><a editable-theme="bs3" onbeforesave="ctrl.changeLabel(result, 'sut_label', $data)" editable-text="result.sut_label"> {{ result.sut_label || "None" }}</a></div></td> - <td> - <div class="btn-group" uib-dropdown> - <a id="single-button" type="button" class="btn btn-success cvp-btn medium accent-color regular-button" uib-dropdown-toggle> - Operation<span class="caret"></span> - </a> - <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button"> - <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status == 'private'}" ng-click="ctrl.toPrivate(result, 'private')">withdraw submit</a></li> - <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status != 'private'}" ng-click="ctrl.toReview(result, 'review')">submit to review</a></li> - <li role="menuitem" ng-if="auth.currentUser.role.indexOf('administrator') != -1" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status == 'approved' || result.status == 'private'}" ng-click="ctrl.toggleCheck(result, 'status', 'approved')">approve</a></li> - <li role="menuitem" ng-if="auth.currentUser.role.indexOf('administrator') != -1" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status == 'not approved' || result.status == 'private'}" ng-click="ctrl.toggleCheck(result, 'status', 'not approved')">not approve</a></li> - <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-click="ctrl.openSharedModal(result)">share with</a></li> - <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-click="ctrl.deleteTest(result._id)">delete</a></li> - </ul> - </div> - </td> - <td> - <div class="btn-group" uib-dropdown> - <a id="single-button" type="button" class="btn btn-success cvp-btn medium accent-color regular-button" style="width:130px" uib-dropdown-toggle> - Share List<span class="caret"></span> - </a> - <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button" style="min-width:200%"> - <li class="menu-item menu-item-type-post_type menu-item-object-page" role="menuitem" ng-repeat="share in result.shared track by $index"><span>{{ share }}<i ng-if="auth.currentUser.openid == result.owner" class="pull-right glyphicon glyphicon-remove" ng-click="ctrl.removeSharedUser(result, share)"></i></span></li> - </ul> - </div> - </td> - - </tr> - </tbody> - </table> - - <div class="pages"> - <uib-pagination - total-items="ctrl.totalItems" - ng-model="ctrl.currentPage" - items-per-page="ctrl.itemsPerPage" - max-size="ctrl.maxSize" - class="pagination-sm" - boundary-links="true" - rotate="false" - num-pages="ctrl.numPages" - ng-change="ctrl.update()"> - </uib-pagination> - </div> -</div> - -</div> -<div ng-show="ctrl.showError" class="alert alert-danger" role="alert"> - <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> - <span class="sr-only">Error:</span> - {{ctrl.error}} -</div> -</div> - -<style> -.button-disabled { - pointer-events:none; -} -</style> diff --git a/cvp/3rd_party/static/testapi-ui/components/results/resultsController.js b/cvp/3rd_party/static/testapi-ui/components/results/resultsController.js deleted file mode 100644 index aa593dc0..00000000 --- a/cvp/3rd_party/static/testapi-ui/components/results/resultsController.js +++ /dev/null @@ -1,515 +0,0 @@ -/* - * 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. - */ - -(function () { - 'use strict'; - - angular - .module('testapiApp') - .controller('ResultsController', ResultsController); - - angular - .module('testapiApp') - .directive('fileModel', ['$parse', function ($parse) { - return { - restrict: 'A', - link: function(scope, element, attrs) { - var model = $parse(attrs.fileModel); - var modelSetter = model.assign; - - element.bind('change', function(){ - scope.$apply(function(){ - modelSetter(scope, element[0].files[0]); - }); - }); - } - }; - }]); - - ResultsController.$inject = [ - '$scope', '$http', '$filter', '$state', 'testapiApiUrl','raiseAlert', 'ngDialog', '$resource' - ]; - - /** - * TestAPI Results Controller - * This controller is for the '/results' page where a user can browse - * a listing of community uploaded results. - */ - function ResultsController($scope, $http, $filter, $state, testapiApiUrl, raiseAlert, ngDialog, $resource) { - var ctrl = this; - - ctrl.uploadFile=uploadFile; - ctrl.update = update; - ctrl.open = open; - ctrl.clearFilters = clearFilters; - ctrl.associateMeta = associateMeta; - ctrl.getVersionList = getVersionList; - ctrl.getUserProducts = getUserProducts; - ctrl.associateProductVersion = associateProductVersion; - ctrl.getProductVersions = getProductVersions; - ctrl.prepVersionEdit = prepVersionEdit; - ctrl.gotoSUT = gotoSUT; - ctrl.gotoResultDetail = gotoResultDetail; - ctrl.toggleCheck = toggleCheck; - ctrl.changeLabel = changeLabel; - ctrl.toReview = toReview; - ctrl.toPrivate = toPrivate; - ctrl.removeSharedUser = removeSharedUser; - ctrl.addSharedUser = addSharedUser; - ctrl.openSharedModal = openSharedModal; - ctrl.downloadLogs = downloadLogs; - ctrl.deleteTest = deleteTest; - - /** Mappings of Interop WG components to marketing program names. */ - ctrl.targetMappings = { - 'platform': 'Openstack Powered Platform', - 'compute': 'OpenStack Powered Compute', - 'object': 'OpenStack Powered Object Storage' - }; - - /** Initial page to be on. */ - ctrl.currentPage = 1; - - /** - * How many results should display on each page. Since pagination - * is server-side implemented, this value should match the - * 'results_per_page' configuration of the TestAPI server which - * defaults to 20. - */ - ctrl.itemsPerPage = 20; - - /** - * How many page buttons should be displayed at max before adding - * the '...' button. - */ - ctrl.maxSize = 5; - - /** The upload date lower limit to be used in filtering results. */ - ctrl.startDate = ''; - - /** The upload date upper limit to be used in filtering results. */ - ctrl.endDate = ''; - - /** The date format for the date picker. */ - ctrl.format = 'yyyy-MM-dd'; - - ctrl.userName = null; - - /** Check to see if this page should display user-specific results. */ - // ctrl.isUserResults = $state.current.name === 'userResults'; - // need auth to browse - ctrl.isUserResults = $state.current.name === 'userResults'; - - ctrl.currentUser = $scope.auth.name; - console.log($scope.auth); - - // Should only be on user-results-page if authenticated. - if (ctrl.isUserResults && !$scope.auth.isAuthenticated) { - $state.go('home'); - } - - ctrl.pageHeader = ctrl.isUserResults ? - 'Private test results' : 'Community test results'; - - ctrl.pageParagraph = ctrl.isUserResults ? - 'Your most recently uploaded test results are listed here.' : - 'The most recently uploaded community test results are listed ' + - 'here.'; - - ctrl.uploadState = ''; - - if (ctrl.isUserResults) { - ctrl.authRequest = $scope.auth.doSignCheck() - .then(ctrl.update); - // ctrl.getUserProducts(); - } else { - ctrl.update(); - } - - function downloadLogs(id) { - // var logsUrl = testapiApiUrl + "/logs/log_" + id+".tar.gz"; - var logsUrl = "/logs/" + id+"/results/"; - window.location.href = logsUrl; - // $http.get(logsUrl); - } - - function deleteTest(inner_id) { - var resp = confirm('Are you sure to delete this test?'); - if (!resp) - return; - - var delUrl = testapiApiUrl + "/tests/" + inner_id; - $http.get(delUrl) - .then( function(resp) { - var results = resp.data.results; - $http.delete(delUrl) - .then( function(ret) { - if(ret.data.code && ret.data.code != 0) { - alert(ret.data.msg); - return; - } - ctrl.update(); - angular.forEach(results, function(ele) { - delUrl = testapiApiUrl + "/results/" + ele; - $http.delete(delUrl); - }); - }); - }); - } - - function toggleCheck(result, item, newValue) { - var id = result._id; - var updateUrl = testapiApiUrl + "/tests/"+ id; - - var data = {}; - data['item'] = item; - data[item] = newValue; - - $http.put(updateUrl, JSON.stringify(data), { - transformRequest: angular.identity, - headers: {'Content-Type': 'application/json'}}).then(function(ret){ - if(ret.data.code && ret.data.code != 0) { - alert(ret.data.msg); - } - else { - result[item] = newValue; - console.log('update success'); - } - }, function(error){ - alert("Error when update data"); - }); - } - - function changeLabel(result, key, data){ - toggleCheck(result, key, data); - } - - function toReview(result, value){ - var resp = confirm('Once you submit a test result for review, it will become readable to all OVP reviewers. Do you want to proceed?'); - if(resp){ - toggleCheck(result, 'status', value); - } - } - - function toPrivate(result, value){ - var resp = confirm('Do you want to proceed?'); - if(resp){ - toggleCheck(result, 'status', value); - } - } - - function openSharedModal(result){ - ctrl.tempResult = result; - ngDialog.open({ - preCloseCallback: function(value) { - }, - template: 'testapi-ui/components/results/modal/sharedModal.html', - scope: $scope, - className: 'ngdialog-theme-default', - width: 950, - showClose: true, - closeByDocument: true - }); - } - - function addSharedUser(result, userId){ - var tempList = copy(result.shared); - tempList.push(userId); - toggleCheck(result, 'shared', tempList); - ngDialog.close(); - } - - function removeSharedUser(result, userId){ - var tempList = copy(result.shared); - var idx = tempList.indexOf(userId); - if(idx != -1){ - tempList.splice(idx, 1); - toggleCheck(result, 'shared', tempList); - } - } - - function copy(arrList){ - var tempList = []; - angular.forEach(arrList, function(ele){ - tempList.push(ele); - }); - return tempList; - } - - function uploadFileToUrl(file, uploadUrl){ - var fd = new FormData(); - fd.append('file', file); - - $http.post(uploadUrl, fd, { - transformRequest: angular.identity, - headers: {'Content-Type': undefined} - }).then(function(data){ - - if(data.data.code && data.data.code != 0){ - alert(data.data.msg); - return; - } - - ctrl.uploadState = ""; - data.data.filename = file.name; - var createTestUrl = testapiApiUrl + "/tests" - - $http.post(createTestUrl, data.data).then(function(data){ - if (data.data.code && data.data.code != 0) { - alert(data.data.msg); - } else { - ctrl.update(); - } - }, function(error){ - }); - - }, function(error){ - ctrl.uploadState = "Upload failed. Error code is " + error.status; - }); - } - - function uploadFile(){ - var file = $scope.resultFile; - console.log('file is ' ); - console.dir(file); - - var uploadUrl = testapiApiUrl + "/results/upload"; - uploadFileToUrl(file, uploadUrl); - }; - - /** - * This will contact the TestAPI API to get a listing of test run - * results. - */ - function update() { - ctrl.showError = false; - // Construct the API URL based on user-specified filters. - var content_url = testapiApiUrl + '/tests' + - '?page=' + ctrl.currentPage; - var start = $filter('date')(ctrl.startDate, 'yyyy-MM-dd'); - if (start) { - content_url = - content_url + '&from=' + start + ' 00:00:00'; - } - var end = $filter('date')(ctrl.endDate, 'yyyy-MM-dd'); - if (end) { - content_url = content_url + '&to=' + end + ' 23:59:59'; - } - if (ctrl.isUserResults) { - content_url = content_url + '&signed'+'&per_page='+ ctrl.itemsPerPage; - } - ctrl.resultsRequest = - $http.get(content_url).success(function (data) { - ctrl.data = data; - ctrl.totalItems = ctrl.data.pagination.total_pages * ctrl.itemsPerPage; - ctrl.currentPage = ctrl.data.pagination.current_page; - ctrl.numPages = ctrl.data.pagination.total_pages; - console.log(ctrl.data); - }).error(function (error) { - ctrl.data = null; - ctrl.totalItems = 0; - ctrl.showError = true; - ctrl.error = - 'Error retrieving results listing from server: ' + - angular.toJson(error); - }); - } - - /** - * This is called when the date filter calendar is opened. It - * does some event handling, and sets a scope variable so the UI - * knows which calendar was opened. - * @param {Object} $event - The Event object - * @param {String} openVar - Tells which calendar was opened - */ - function open($event, openVar) { - $event.preventDefault(); - $event.stopPropagation(); - ctrl[openVar] = true; - } - - /** - * This function will clear all filters and update the results - * listing. - */ - function clearFilters() { - ctrl.startDate = null; - ctrl.endDate = null; - ctrl.update(); - } - - /** - * This will send an API request in order to associate a metadata - * key-value pair with the given testId - * @param {Number} index - index of the test object in the results list - * @param {String} key - metadata key - * @param {String} value - metadata value - */ - function associateMeta(index, key, value) { - var testId = ctrl.data.results[index].id; - var metaUrl = [ - testapiApiUrl, '/results/', testId, '/meta/', key - ].join(''); - - var editFlag = key + 'Edit'; - if (value) { - ctrl.associateRequest = $http.post(metaUrl, value) - .success(function () { - ctrl.data.results[index][editFlag] = false; - }).error(function (error) { - raiseAlert('danger', error.title, error.detail); - }); - } - else { - ctrl.unassociateRequest = $http.delete(metaUrl) - .success(function () { - ctrl.data.results[index][editFlag] = false; - }).error(function (error) { - if (error.code == 404) { - // Key doesn't exist, so count it as a success, - // and don't raise an alert. - ctrl.data.results[index][editFlag] = false; - } - else { - raiseAlert('danger', error.title, error.detail); - } - }); - } - } - - /** - * Retrieve an array of available capability files from the TestAPI - * API server, sort this array reverse-alphabetically, and store it in - * a scoped variable. - * Sample API return array: ["2015.03.json", "2015.04.json"] - */ - function getVersionList() { - if (ctrl.versionList) { - return; - } - var content_url = testapiApiUrl + '/guidelines'; - ctrl.versionsRequest = - $http.get(content_url).success(function (data) { - ctrl.versionList = data.sort().reverse(); - }).error(function (error) { - raiseAlert('danger', error.title, - 'Unable to retrieve version list'); - }); - } - - /** - * Get products user has management rights to or all products depending - * on the passed in parameter value. - */ - function getUserProducts() { - if (ctrl.products) { - return; - } - var contentUrl = testapiApiUrl + '/products'; - ctrl.productsRequest = - $http.get(contentUrl).success(function (data) { - ctrl.products = {}; - angular.forEach(data.products, function(prod) { - if (prod.can_manage) { - ctrl.products[prod.id] = prod; - } - }); - }).error(function (error) { - ctrl.products = null; - ctrl.showError = true; - ctrl.error = - 'Error retrieving Products listing from server: ' + - angular.toJson(error); - }); - } - - /** - * Send a PUT request to the API server to associate a product with - * a test result. - */ - function associateProductVersion(result) { - var verId = (result.selectedVersion ? - result.selectedVersion.id : null); - var testId = result.id; - var url = testapiApiUrl + '/results/' + testId; - ctrl.associateRequest = $http.put(url, {'product_version_id': - verId}) - .success(function (data) { - result.product_version = result.selectedVersion; - if (result.selectedVersion) { - result.product_version.product_info = - result.selectedProduct; - } - result.productEdit = false; - }).error(function (error) { - raiseAlert('danger', error.title, error.detail); - }); - } - - /** - * Get all versions for a product. - */ - function getProductVersions(result) { - if (!result.selectedProduct) { - result.productVersions = []; - result.selectedVersion = null; - return; - } - - var url = testapiApiUrl + '/products/' + - result.selectedProduct.id + '/versions'; - ctrl.getVersionsRequest = $http.get(url) - .success(function (data) { - result.productVersions = data; - - // If the test result isn't already associated to a - // version, default it to the null version. - if (!result.product_version) { - angular.forEach(data, function(ver) { - if (!ver.version) { - result.selectedVersion = ver; - } - }); - } - }).error(function (error) { - raiseAlert('danger', error.title, error.detail); - }); - } - - /** - * Instantiate variables needed for editing product/version - * associations. - */ - function prepVersionEdit(result) { - result.productEdit = true; - if (result.product_version) { - result.selectedProduct = - ctrl.products[result.product_version.product_info.id]; - } - result.selectedVersion = result.product_version; - ctrl.getProductVersions(result); - } - - - - function gotoResultDetail(testId, innerID) { - $state.go('resultsDetail', {'testID': testId, 'innerID': innerID}); - } - - function gotoSUT(testId) { - $state.go('sut', {'testID': testId}); - } - - } -})(); |