Skip to content

Commit

Permalink
Merge pull request ansible#6525 from jaredevantabor/insights-tests
Browse files Browse the repository at this point in the history
Changes to Insights dashboard and Unit Tests
  • Loading branch information
jaredevantabor authored Jun 9, 2017
2 parents e6e4c69 + 4caceb6 commit 66c9139
Show file tree
Hide file tree
Showing 14 changed files with 2,116 additions and 57 deletions.
67 changes: 21 additions & 46 deletions awx/ui/client/src/inventories/insights/insights.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,70 +4,45 @@
* All Rights Reserved
*************************************************/

export default [ 'InsightsData', '$scope', 'moment', '$state', 'resourceData',
function (data, $scope, moment, $state, resourceData) {
export default [ 'InsightsData', '$scope', 'moment', '$state', 'InventoryData',
'InsightsService',
function (data, $scope, moment, $state, InventoryData, InsightsService) {

function init() {

$scope.reports = data.reports;
$scope.reports_dataset = data;
$scope.currentFilter = "total";
$scope.solvable_count = _.filter($scope.reports_dataset.reports, (report) => {return report.maintenance_actions.length > 0;}).length;
$scope.not_solvable_count = _.filter($scope.reports_dataset.reports, (report) => {return report.maintenance_actions.length === 0; }).length;
$scope.critical_count = 0 || _.filter($scope.reports_dataset.reports, (report) => {return report.rule.severity === "CRITICAL"; }).length;
$scope.high_count = _.filter($scope.reports_dataset.reports, (report) => {return report.rule.severity === "ERROR"; }).length;
$scope.med_count = _.filter($scope.reports_dataset.reports, (report) => {return report.rule.severity === "WARN"; }).length;
$scope.low_count = _.filter($scope.reports_dataset.reports, (report) => {return report.rule.severity === "INFO"; }).length;
$scope.solvable_count = filter('solvable').length;
$scope.not_solvable_count = filter('not_solvable').length;
$scope.critical_count = filter('critical').length;
$scope.high_count = filter('high').length;
$scope.med_count = filter('medium').length;
$scope.low_count =filter('low').length;
let a = moment(), b = moment($scope.reports_dataset.last_check_in);
$scope.last_check_in = a.diff(b, 'hours');
$scope.inventory = resourceData.data;
$scope.insights_credential = resourceData.data.summary_fields.insights_credential.id;
$scope.inventory = InventoryData;
$scope.insights_credential = InventoryData.summary_fields.insights_credential.id;
}

function filter(str){
return InsightsService.filter(str, $scope.reports_dataset.reports);
}

init();

$scope.filter = function(filter){
$scope.currentFilter = filter;
if(filter === "total"){
$scope.reports = $scope.reports_dataset.reports;
}
if(filter === "solvable"){
$scope.reports = _.filter($scope.reports_dataset.reports, function(report){
return (report.maintenance_actions.length > 0);
});
}
if(filter === "not_solvable"){
$scope.reports = _.filter($scope.reports_dataset.reports, function(report){
return (report.maintenance_actions.length === 0);
});
}
if(filter === "critical"){
$scope.reports = _.filter($scope.reports_dataset.reports, function(report){
return (report.rule.severity === 'CRITICAL');
});
}
if(filter === "high"){
$scope.reports = _.filter($scope.reports_dataset.reports, function(report){
return (report.rule.severity === 'ERROR');
});
}
if(filter === "medium"){
$scope.reports = _.filter($scope.reports_dataset.reports, function(report){
return (report.rule.severity === 'WARN');
});
}
if(filter === "low"){
$scope.reports = _.filter($scope.reports_dataset.reports, function(report){
return (report.rule.severity === 'INFO');
});
}
$scope.filterReports = function(str){
$scope.currentFilter = str;
$scope.reports = filter(str);
};

$scope.viewDataInInsights = function(){
window.open(`https://access.redhat.com/insights/inventory?machine=${$scope.$parent.host.insights_system_id}`, '_blank');
};

$scope.remediateInventory = function(inv_id, inv_name, insights_credential){
$state.go('templates.addJobTemplate', {inventory_id: inv_id, inventory_name:inv_name, credential_id: insights_credential});
};

$scope.formCancel = function(){
$state.go('inventories', null, {reload: true});
};
Expand Down
14 changes: 7 additions & 7 deletions awx/ui/client/src/inventories/insights/insights.partial.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,31 @@
</div>
<div class="InsightsNav">
<div class="InsightsNav-rightSide">
<div class="InsightsNav-anchor" ng-click="filter('total')"
<div class="InsightsNav-anchor" ng-click="filterReports('total')"
ng-class="{'is-currentFilter' : (currentFilter === 'total')}">
<div class="InsightsNav-badgeTitle"><translate>Total Issues</translate></div>
<span class="badge List-titleBadge InsightsNav-totalIssues">{{reports_dataset.reports.length}}</span>
</div>

<div class="InsightsNav-anchor" ng-click="filter('critical')"
<div class="InsightsNav-anchor" ng-click="filterReports('critical')"
ng-class="{'is-currentFilter' : (currentFilter === 'critical')}"
ng-show="critical_count>0">
<div class="InsightsNav-badgeTitle"><translate>Critical</translate></div>
<span class="badge List-titleBadge InsightsNav-criticalIssues">{{critical_count}}</span>
</div>
<div class="InsightsNav-anchor" ng-click="filter('high')"
<div class="InsightsNav-anchor" ng-click="filterReports('high')"
ng-class="{'is-currentFilter' : (currentFilter === 'high')}"
ng-show="high_count>0">
<div class="InsightsNav-badgeTitle"><translate>High</translate></div>
<span class="badge List-titleBadge InsightsNav-highIssues">{{high_count}}</span>
</div>
<div class="InsightsNav-anchor" ng-click="filter('medium')"
<div class="InsightsNav-anchor" ng-click="filterReports('medium')"
ng-class="{'is-currentFilter' : (currentFilter === 'medium')}"
ng-show="med_count>0">
<div class="InsightsNav-badgeTitle"><translate>Medium</translate></div>
<span class="badge List-titleBadge InsightsNav-mediumIssues">{{med_count}}</span>
</div>
<div class="InsightsNav-anchor" ng-click="filter('low')"
<div class="InsightsNav-anchor" ng-click="filterReports('low')"
ng-class="{'is-currentFilter' : (currentFilter === 'low')}"
ng-show="low_count>0">
<div class="InsightsNav-badgeTitle"><translate>Low</translate></div>
Expand All @@ -38,13 +38,13 @@
</div>
<div class="InsightsNav-leftSide">

<div class="InsightsNav-anchor" ng-click="filter('solvable')"
<div class="InsightsNav-anchor" ng-click="filterReports('solvable')"
ng-class="{'is-currentFilter' : (currentFilter === 'solvable')}"
ng-show="solvable_count>0">
<div class="InsightsNav-badgeTitle"><translate>Solvable With Playbook</translate></div>
<span class="badge List-titleBadge InsightsNav-solvableBadge">{{solvable_count}}</span>
</div>
<div class="InsightsNav-anchor" ng-click="filter('not_solvable')"
<div class="InsightsNav-anchor" ng-click="filterReports('not_solvable')"
ng-class="{'is-currentFilter' : (currentFilter === 'not_solvable')}"
ng-show="not_solvable_count>0">
<div class="InsightsNav-badgeTitle"><translate>Not Solvable With Playbook</translate></div>
Expand Down
21 changes: 21 additions & 0 deletions awx/ui/client/src/inventories/insights/insights.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,26 @@ export default {
});
}
],
InventoryData: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'resourceData',
(Rest, $stateParams, GetBasePath, ProcessErrors, resourceData) => {
if(resourceData.data.type === "host"){
var path = `${GetBasePath('inventory')}${resourceData.data.inventory}`;
Rest.setUrl(path);
return Rest.get()
.then(function(data) {
return (data.data);
}).catch(function(response) {
ProcessErrors(null, response.data, response.status, null, {
hdr: 'Error!',
msg: 'Failed to get insights info. GET returned status: ' +
response.status
});
});
}
else if(resourceData.data.type === 'inventory'){
return resourceData.data;
}
}
]
}
};
36 changes: 36 additions & 0 deletions awx/ui/client/src/inventories/insights/insights.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*************************************************
* Copyright (c) 2017 Ansible, Inc.
*
* All Rights Reserved
*************************************************/

export default [ () => {
var val = {
filter: function(str, reports_dataset){
let filteredSet;
if(str === "total"){
filteredSet = reports_dataset;
}
if(str === "solvable"){
filteredSet = _.filter(reports_dataset, (report)=>{return (report.maintenance_actions.length > 0);});
}
if(str === "not_solvable"){
filteredSet = _.filter(reports_dataset, (report)=>{return (report.maintenance_actions.length === 0);});
}
if(str === "critical"){
filteredSet = _.filter(reports_dataset, (report)=>{return (report.rule.severity === 'CRITICAL');});
}
if(str === "high"){
filteredSet = _.filter(reports_dataset, (report)=>{return (report.rule.severity === 'ERROR');});
}
if(str === "medium"){
filteredSet = _.filter(reports_dataset, (report)=>{return (report.rule.severity === 'WARN');});
}
if(str === "low"){
filteredSet = _.filter(reports_dataset, (report)=>{return (report.rule.severity === 'INFO');});
}
return filteredSet;
}
};
return val;
}];
4 changes: 3 additions & 1 deletion awx/ui/client/src/inventories/insights/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@

import controller from './insights.controller';
import planFilter from './plan-filter';
import service from './insights.service';

export default
angular.module('insightsDashboard', [])
.filter('planFilter', planFilter)
.controller('InsightsController', controller);
.controller('InsightsController', controller)
.service('InsightsService', service);
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ export default ['$scope', 'ListDefinition', '$rootScope', 'GetBasePath',
$scope.editHost = function(host){
$state.go('inventories.edit.hosts.edit', {inventory_id: host.inventory_id, host_id: host.id});
};
$scope.goToInsights = function(id){
$state.go('inventories.edit.hosts.edit.insights', {host_id:id});
$scope.goToInsights = function(host){
$state.go('inventories.edit.hosts.edit.insights', {inventory_id: host.inventory_id, host_id:host.id});
};
$scope.deleteHost = function(id, name){
var body = '<div class=\"Prompt-bodyQuery\">Are you sure you want to permanently delete the host below from the inventory?</div><div class=\"Prompt-bodyTarget\">' + $filter('sanitize')(name) + '</div>';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export default {

columnClass: 'col-lg-6 col-md-4 col-sm-4 col-xs-5 text-right',
insights: {
ngClick: "goToInsights(host.id)",
ngClick: "goToInsights(host)",
icon: 'fa-info',
awToolTip: 'View Insights Data',
dataPlacement: 'top',
Expand Down
Loading

0 comments on commit 66c9139

Please sign in to comment.