Merge pull request #3649 from codyrancher/cis-report

Update the downloaded report
This commit is contained in:
Westly Wright 2019-12-20 09:09:23 -07:00 committed by GitHub
commit f9302a929f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 66 additions and 20 deletions

View File

@ -74,15 +74,9 @@ export default Controller.extend({
return tests.map((test) => {
const state = this.getCheckState(test);
const nodeTypes = test.node_type;
const nodeNames = nodeTypes.reduce((agg, nodeType) => [...agg, ...get(this, `model.scan.report.nodes.${ nodeType }`)], []);
const uniqueNodeNames = Object.keys(nodeNames.reduce((agg, nodeName) => ({
...agg,
[nodeName]: true
}), {}));
const nodeNames = get(this, 'model.scan').getNodeNamesFromNodeType(test.node_type);
const checkNodes = test.nodes || [];
const nodes = uniqueNodeNames.map((nodeName) => ({
const nodes = nodeNames.map((nodeName) => ({
state: this.getNodeState(test, nodeName, checkNodes),
nodeId: get(this, 'model.nodes').findBy('nodeName', nodeName).id,
name: nodeName

View File

@ -3,6 +3,7 @@ import { computed, get, set, observer } from '@ember/object';
import moment from 'moment';
import { downloadFile } from 'shared/utils/download-files';
import ObjectsToCsv from 'objects-to-csv';
import { extractUniqueStrings } from '../utils/util';
const ClusterScan = Resource.extend({
type: 'clusterScan',
@ -49,25 +50,23 @@ const ClusterScan = Resource.extend({
}),
referencedResults: computed('report', function() {
const results = (get(this, 'report.results') || [])
return (get(this, 'report.results') || [])
.map((result) => result.checks)
.reduce((agg, check) => [...agg, ...(check || [])], []);
const nodes = get(this, 'report.nodes') || {};
return results.map((result) => {
return {
...result,
nodes: this.getNodes(nodes, result.node_type)
};
});
}),
resultsForCsv: computed('referencedResults', function() {
resultsForCsv: computed('referencedResults', 'report', function() {
return get(this, 'referencedResults').map((result) => {
const nodesAndStateForTest = this.getNodesAndStateForTestResult(result);
const version = `Version: ${ get(this, 'report.version') }`;
return {
[version]: '',
...result,
nodes: result.nodes.join(','),
node_type: result.node_type.join(',')
nodes: nodesAndStateForTest.nodes.join(','),
passed_nodes: nodesAndStateForTest.passedNodes.join(','),
failed_nodes: nodesAndStateForTest.failedNodes.join(','),
node_type: result.node_type.join(',')
};
})
}),
@ -114,6 +113,48 @@ const ClusterScan = Resource.extend({
return nodeTypes.reduce((agg, nodeType) => [...agg, ...nodes[nodeType]], []);
},
getNodeNamesFromNodeType(nodeType) {
const nodeNames = nodeType
.reduce((agg, nodeType) => [...agg, ...get(this, `report.nodes.${ nodeType }`)], []);
return extractUniqueStrings(nodeNames);
},
getNodesAndStateForTestResult(testResult) {
if (testResult.state === 'skip') {
return {
nodes: [],
passedNodes: [],
failedNodes: []
}
}
const nodeNames = this.getNodeNamesFromNodeType(testResult.node_type);
if (testResult.state === 'pass') {
return {
nodes: nodeNames,
passedNodes: nodeNames,
failedNodes: []
}
}
if (testResult.state === 'fail') {
return {
nodes: nodeNames,
passedNodes: [],
failedNodes: nodeNames
}
}
// if mixed
return {
nodes: nodeNames,
passedNodes: nodeNames.filter((node) => !testResult.nodes.includes(node)),
failedNodes: testResult.nodes
}
},
async _loadReport() {
try {
const report = await this.followLink('report');

View File

@ -556,6 +556,15 @@ export function parseCamelcase(str = '') {
return ucFirst(str).replace(/([A-Z]+)*([A-Z][a-z])/g, '$1 $2')
}
export function extractUniqueStrings(strings) {
const index = strings.reduce((agg, s) => ({
...agg,
[s]: true
}), {});
return Object.keys(index);
}
var Util = {
absoluteUrl,
addAuthorization,
@ -601,6 +610,7 @@ var Util = {
validateEndpoint,
requiredError,
parseCamelcase,
extractUniqueStrings,
};
window.Util = Util;

View File

@ -31,4 +31,5 @@ export {
isNumeric,
requiredError,
parseCamelcase,
extractUniqueStrings,
} from 'shared/utils/util';