openstack-health/app/js/controllers/tests-detail.js

83 lines
2.0 KiB
JavaScript

'use strict';
var controllersModule = require('./_index');
var _ = require('underscore');
/**
* @ngInject
*/
function TestsDetailController($scope, healthService, testService, key, $location) {
// ViewModel
var vm = this;
vm.searchTest = '';
vm.key = decodeURIComponent(key);
vm.processData = function(data) {
vm.chartData = {};
var testsByHierarchy = _.groupBy(data.tests, function(test) {
var testId = testService.removeIdNoise(test.test_id);
var keyMatcher = /^(\w*)\./g;
var matches = keyMatcher.exec(testId);
if (matches) {
return matches[1];
}
return 'Others';
});
var getTestFailureAvg = function(test) {
return test.failure / test.run_count;
};
_.each(testsByHierarchy, function(tests, hierarchy, list) {
if (!vm.chartData[hierarchy]) {
vm.chartData[hierarchy] = [{
key: hierarchy,
values: [],
tests: []
}];
}
var orderedTests = _.sortBy(tests, function(test) {
return getTestFailureAvg(test) * -1;
});
var topFailures = _.first(orderedTests, 10);
topFailures.forEach(function(test) {
var failureAverage = getTestFailureAvg(test);
if (!isNaN(failureAverage) && parseFloat(failureAverage) > 0.01) {
var chartData = {
label: test.test_id,
value: failureAverage
};
vm.chartData[hierarchy][0].values.push(chartData);
}
});
orderedTests.forEach(function(test) {
test.failureAverage = getTestFailureAvg(test);
vm.chartData[hierarchy][0].tests.push(test);
});
});
};
vm.loadData = function() {
healthService.getTests().then(function(response) {
vm.processData(response.data);
});
};
vm.searchTest = $location.search().searchTest || '';
vm.loadData();
vm.onSearchChange = function() {
$location.search('searchTest', $scope.testsDetail.searchTest);
};
}
controllersModule.controller('TestsDetailController', TestsDetailController);