Simplify dynamic visualizations loading schema

This commit is contained in:
havidarou 2018-04-08 13:55:29 -04:00 committed by Jesús Ángel
parent 7e756f91d5
commit c8070b95d1
13 changed files with 623 additions and 690 deletions

View File

@ -3,8 +3,8 @@ import $ from 'jquery';
app.controller('overviewController', function ($scope, $location, $rootScope, appState, genericReq, errorHandler, metricService) {
// Timestamp for visualizations at controller's startup
if(!$rootScope.visTimestamp) $rootScope.visTimestamp = new Date().getTime();
$rootScope.backFinished = false;
if(!$rootScope.$$phase) $rootScope.$digest
$rootScope.page = 'overview';
@ -63,7 +63,7 @@ app.controller('overviewController', function ($scope, $location, $rootScope, ap
awsRevoked :'[vis-id="\'Wazuh-App-Overview-AWS-Metric-Revoke-security\'"]'
}
// Check the url hash and retrieve the tabView information
// Check the url hash and retrieve tabView information
if ($location.search().tabView) {
$scope.tabView = $location.search().tabView;
} else { // If tabView doesn't exist, default it to 'panels'
@ -71,7 +71,7 @@ app.controller('overviewController', function ($scope, $location, $rootScope, ap
$location.search('tabView', 'panels');
}
// Check the url hash and retrivew the tab information
// Check the url hash and retrieve tab information
if ($location.search().tab) {
$scope.tab = $location.search().tab;
} else { // If tab doesn't exist, default it to 'general'
@ -140,8 +140,6 @@ app.controller('overviewController', function ($scope, $location, $rootScope, ap
if(!$rootScope.$$phase) $rootScope.$digest();
}
checkMetrics($scope.tab, $scope.tabView);
// Switch subtab
$scope.switchSubtab = subtab => {
if ($scope.tabView === subtab) return;
@ -153,54 +151,39 @@ app.controller('overviewController', function ($scope, $location, $rootScope, ap
$scope.switchTab = tab => {
if ($scope.tab === tab) return;
// call backend to create visualizations
$rootScope.backFinished = false;
genericReq.request('GET',`/api/wazuh-elastic/delete-vis/${$rootScope.visTimestamp}`)
.then(() => genericReq.request('GET',`/api/wazuh-elastic/create-vis/overview-${$scope.tab}/${$rootScope.visTimestamp}/${appState.getCurrentPattern()}`))
// Create current tab visualizations
genericReq.request('GET',`/api/wazuh-elastic/create-vis/overview-${$scope.tab}/${$rootScope.visTimestamp}/${appState.getCurrentPattern()}`)
.then(() => {
// Render visualizations
$rootScope.$broadcast('updateVis');
checkMetrics(tab, 'panels');
// Deleting app state traces in the url
$location.search('_a', null);
$rootScope.backFinished = true;
if(!$rootScope.$$phase) $rootScope.$digest();
})
.catch(console.error)
})
.catch(error => {
errorHandler.handle(error, 'Overview');
});
};
// Watch tabView
$scope.$watch('tabView', () => {
$rootScope.backFinished = false;
$location.search('tabView', $scope.tabView);
if($scope.tabView === 'panels'){
// Update the implicit filter
genericReq.request('GET',`/api/wazuh-elastic/delete-vis/${$rootScope.visTimestamp}`)
.then(() => genericReq.request('GET',`/api/wazuh-elastic/create-vis/overview-${$scope.tab}/${$rootScope.visTimestamp}/${appState.getCurrentPattern()}`))
.then(() => {
$rootScope.backFinished = true;
if(!$rootScope.$$phase) $rootScope.$digest();
})
.catch(console.error)
} else {
genericReq.request('GET',`/api/wazuh-elastic/delete-vis/${$rootScope.visTimestamp}`)
.then(() => {
if ($rootScope.ownHandlers) {
for (let h of $rootScope.ownHandlers) {
h._scope.$destroy();
}
}
$rootScope.ownHandlers = [];
$rootScope.loadedVisualizations = [];
$rootScope.backFinished = true;
if(!$rootScope.$$phase) $rootScope.$digest();
})
.catch(console.error)
}
$location.search('tabView', $scope.tabView);
if ($rootScope.ownHandlers) {
for (let h of $rootScope.ownHandlers) {
h._scope.$destroy();
}
}
$rootScope.ownHandlers = [];
$rootScope.loadedVisualizations = [];
});
// Watch tab
$scope.$watch('tab', () => {
$location.search('tab', $scope.tab);
@ -222,10 +205,7 @@ app.controller('overviewController', function ($scope, $location, $rootScope, ap
});
$scope.$on('$destroy', () => {
$rootScope.backFinished = false;
genericReq.request('GET',`/api/wazuh-elastic/delete-vis/${$rootScope.visTimestamp}`)
.then(() => $rootScope.backFinished = true)
.catch(console.error)
if ($rootScope.ownHandlers) {
for (let h of $rootScope.ownHandlers) {
h._scope.$destroy();
@ -237,16 +217,18 @@ app.controller('overviewController', function ($scope, $location, $rootScope, ap
$rootScope.ownHandlers = [];
});
// call backend to create visualizations at controller's initialization
genericReq.request('GET',`/api/wazuh-elastic/delete-vis/${$rootScope.visTimestamp}`)
.then(() => genericReq.request('GET',`/api/wazuh-elastic/create-vis/overview-${$scope.tab}/${$rootScope.visTimestamp}/${appState.getCurrentPattern()}`))
// Create visualizations for controller's first execution
genericReq.request('GET',`/api/wazuh-elastic/create-vis/overview-${$scope.tab}/${$rootScope.visTimestamp}/${appState.getCurrentPattern()}`)
.then(() => {
$rootScope.backFinished = true;
if(!$rootScope.$$phase) $rootScope.$digest();
// Render visualizations
$rootScope.$broadcast('updateVis');
checkMetrics($scope.tab, $scope.tabView);
})
.catch(console.error)
.catch(error => {
errorHandler.handle(error, 'Overview');
});
//PCI tab
let tabs = [];

View File

@ -1,6 +1,6 @@
import $ from 'jquery';
const ownLoader = require('./loader/loader-import');
let accumulate = {},stopLoop = false;
var app = require('ui/modules').get('apps/webinar_app', [])
.directive('kbnVis', [function () {
return {
@ -9,8 +9,7 @@ var app = require('ui/modules').get('apps/webinar_app', [])
visID: '=visId',
specificTimeRange: '=specificTimeRange'
},
controller: function VisController($scope, $rootScope, $location, savedVisualizations, $window,genericReq) {
controller: function VisController($scope, $rootScope, $location, savedVisualizations, genericReq) {
if(!$rootScope.ownHandlers) $rootScope.ownHandlers = [];
let originalImplicitFilter = '';
let implicitFilter = '';
@ -22,15 +21,13 @@ var app = require('ui/modules').get('apps/webinar_app', [])
let renderInProgress = false;
const myRender = function() {
if(typeof accumulate[$scope.visID] === 'undefined') accumulate[$scope.visID] = 'pending'
if ($rootScope.visTimestamp) { // Only render if we already have the timestamp for it
if (($rootScope.discoverPendingUpdates && $rootScope.discoverPendingUpdates.length != 0) || $scope.visID.includes('Ruleset') ){ // There are pending updates from the discover (which is the one who owns the true app state)
if (($rootScope.discoverPendingUpdates && $rootScope.discoverPendingUpdates.length != 0) || $scope.visID.includes('Ruleset') ) { // There are pending updates from the discover (which is the one who owns the true app state)
if(!visualization && !rendered && !renderInProgress) { // There's no visualization object -> create it with proper filters
renderInProgress = true;
savedVisualizations.get(!$scope.visID.includes('Agents-status') ? $scope.visID + "-" + $rootScope.visTimestamp : $scope.visID)
.then(savedObj => {
if(!visualization && !rendered && !renderInProgress) { // There's no visualization object -> create it with proper filters
renderInProgress = true;
if ($rootScope.visTimestamp) {
savedVisualizations.get($scope.visID + "-" + $rootScope.visTimestamp).then(savedObj => {
originalImplicitFilter = savedObj.searchSource.get('query')['query'];
visTitle = savedObj.vis.title;
visualization = savedObj;
@ -74,28 +71,27 @@ var app = require('ui/modules').get('apps/webinar_app', [])
$rootScope.ownHandlers.push(visHandler);
visHandler.addRenderCompleteListener(renderComplete);
});
}
} else if (rendered) { // There's a visualization object -> just update its filters
} else if (rendered) { // There's a visualization object -> just update its filters
// There's an original filter
if (originalImplicitFilter.length > 0 ) {
// And also a pending one -> concatenate them
if ($rootScope.discoverPendingUpdates && typeof $rootScope.discoverPendingUpdates[0].query === 'string' && $rootScope.discoverPendingUpdates[0].query.length > 0) {
implicitFilter = originalImplicitFilter + ' AND ' + $rootScope.discoverPendingUpdates[0].query;
} else {
// Only the original filter
implicitFilter = originalImplicitFilter;
}
// There's an original filter
if (originalImplicitFilter.length > 0 ) {
// And also a pending one -> concatenate them
if ($rootScope.discoverPendingUpdates && typeof $rootScope.discoverPendingUpdates[0].query === 'string' && $rootScope.discoverPendingUpdates[0].query.length > 0) {
implicitFilter = originalImplicitFilter + ' AND ' + $rootScope.discoverPendingUpdates[0].query;
} else {
// Other case, use the pending one, if it is empty, it won't matter
implicitFilter = $rootScope.discoverPendingUpdates ? $rootScope.discoverPendingUpdates[0].query : '';
}
if (visTitle !== 'Wazuh App Overview General Agents status') { // We don't want to filter that visualization as it uses another index-pattern
visualization.searchSource
.query({ language: 'lucene', query: implicitFilter })
.set('filter', $rootScope.discoverPendingUpdates ? $rootScope.discoverPendingUpdates[1] : {});
// Only the original filter
implicitFilter = originalImplicitFilter;
}
} else {
// Other case, use the pending one, if it is empty, it won't matter
implicitFilter = $rootScope.discoverPendingUpdates ? $rootScope.discoverPendingUpdates[0].query : '';
}
if (visTitle !== 'Wazuh App Overview General Agents status') { // We don't want to filter that visualization as it uses another index-pattern
visualization.searchSource
.query({ language: 'lucene', query: implicitFilter })
.set('filter', $rootScope.discoverPendingUpdates ? $rootScope.discoverPendingUpdates[1] : {});
}
}
}
@ -106,46 +102,32 @@ var app = require('ui/modules').get('apps/webinar_app', [])
myRender();
});
const renderComplete = () => {
if(accumulate[$scope.visID] === 'pending'){
accumulate[$scope.visID] = 'complete'
}
var renderComplete = function() {
rendered = true;
if(typeof $rootScope.loadedVisualizations === 'undefined') $rootScope.loadedVisualizations = [];
$rootScope.loadedVisualizations.push(true);
let currentCompleted = Math.round(($rootScope.loadedVisualizations.length / $rootScope.tabVisualizations[$location.search().tab]) * 100);
$rootScope.loadingStatus = `Rendering visualizations... ${currentCompleted > 100 ? 100 : currentCompleted} %`;
let completed = true;
for(let key in accumulate){
if(accumulate[key] === 'pending') completed = false;
break;
}
if (completed && currentCompleted >= 100) {
if(!stopLoop){
stopLoop =true;
if (currentCompleted >= 100) {
if ($rootScope.visTimestamp) {
genericReq.request('GET',`/api/wazuh-elastic/delete-vis/${$rootScope.visTimestamp}`)
.then(() => {
if (!visTitle !== 'Wazuh App Overview General Agents status') $rootScope.rendered = true;
// Forcing a digest cycle
if(!$rootScope.$$phase) $rootScope.$digest();
})
.catch(error => console.error(error.message || error))
} else {
if (!visTitle !== 'Wazuh App Overview General Agents status') $rootScope.rendered = true;
// Forcing a digest cycle
if(!$rootScope.$$phase) $rootScope.$digest();
$rootScope.visTimestamp = null;
});
}
} else if (!visTitle !== 'Wazuh App Overview General Agents status') {
$rootScope.rendered = false;
if (!visTitle !== 'Wazuh App Overview General Agents status') $rootScope.rendered = true;
// Forcing a digest cycle
if(!$rootScope.$$phase) $rootScope.$digest();
}
else if (!visTitle !== 'Wazuh App Overview General Agents status') $rootScope.rendered = false;
};
// Initializing the visualization
const loader = ownLoader.getVisualizeLoader();
myRender();
}
}
}]);

View File

@ -1,121 +1,118 @@
<md-content flex layout="column" ng-if="tab === 'audit' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="space-around">
<md-content flex layout="column" ng-if="tab === 'audit' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="space-around">
<!-- View: Panels -->
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>New files: <span class="wz-text-bold">{{auditNewFiles}}</span></div>
<div class="wz-text-truncatable" flex>Read files: <span class="wz-text-bold">{{auditReadFiles}}</span></div>
<div class="wz-text-truncatable" flex>Modified files: <span class="wz-text-bold">{{auditModifiedFiles}}</span></div>
<div class="wz-text-truncatable" flex>Removed files: <span class="wz-text-bold">{{auditRemovedFiles}}</span></div>
</md-card-content>
</md-card>
</div>
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>New files: <span class="wz-text-bold">{{auditNewFiles}}</span></div>
<div class="wz-text-truncatable" flex>Read files: <span class="wz-text-bold">{{auditReadFiles}}</span></div>
<div class="wz-text-truncatable" flex>Modified files: <span class="wz-text-bold">{{auditModifiedFiles}}</span></div>
<div class="wz-text-truncatable" flex>Removed files: <span class="wz-text-bold">{{auditRemovedFiles}}</span></div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-New-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Read-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Modified-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Removed-files'"></kbn-vis>
</div>
<div layout="row" layout-align="center stretch" class="height-200">
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Groups</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Groups'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Agents</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Agents'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Directories</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Directories'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Files'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-310">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Alerts-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-448">
<div flex="20" layout="column" layout-align="center stretch">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">File read access</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-File-read-access'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">File write access</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-File-write-access'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-New-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Read-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Modified-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Removed-files'"></kbn-vis>
</div>
<div layout="row" layout-align="center stretch" class="height-200">
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Groups</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Groups'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Agents</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Agents'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Directories</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Directories'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Files'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-310">
<div flex="60" layout="column" layout-align="center stretch">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts over time</span>
<span class="wz-headline-title">Commands</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Alerts-over-time'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Commands'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-448">
<div flex="20" layout="column" layout-align="center stretch">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">File read access</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-File-read-access'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">File write access</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-File-write-access'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div flex="60" layout="column" layout-align="center stretch">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Commands</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Commands'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div flex="20" layout="column" layout-align="center stretch">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Created files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Files-created'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Removed files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Files-deleted'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div flex layout="row" class="height-570">
<md-card flex class="wz-md-card">
<div flex="20" layout="column" layout-align="center stretch">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<span class="wz-headline-title">Created files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Last-alerts'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Files-created'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Removed files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Files-deleted'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div flex layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Audit-Last-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,87 +1,82 @@
<md-content flex layout="column" ng-if="tab === 'aws' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'aws' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<!-- View: Panels -->
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Successful logins: <span class="wz-text-bold">{{awsLogins}}</span></div>
<div class="wz-text-truncatable" flex>Most active user: <span class="wz-text-bold">{{awsMostActiveUser}}</span></div>
<div class="wz-text-truncatable" flex>Authorized security groups: <span class="wz-text-bold">{{awsAuthorized}}</span></div>
<div class="wz-text-truncatable" flex>Revoked security groups: <span class="wz-text-bold">{{awsRevoked}}</span></div>
</md-card-content>
</md-card>
</div>
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Successful logins: <span class="wz-text-bold">{{awsLogins}}</span></div>
<div class="wz-text-truncatable" flex>Most active user: <span class="wz-text-bold">{{awsMostActiveUser}}</span></div>
<div class="wz-text-truncatable" flex>Authorized security groups: <span class="wz-text-bold">{{awsAuthorized}}</span></div>
<div class="wz-text-truncatable" flex>Revoked security groups: <span class="wz-text-bold">{{awsRevoked}}</span></div>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Metric-Successful-logins'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Most-active-user'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Metric-Authorize-security'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Metric-Revoke-security'"></kbn-vis>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Metric-Successful-logins'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Most-active-user'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Metric-Authorize-security'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Metric-Revoke-security'"></kbn-vis>
</div>
<div layout="row" layout-align="center stretch" class="height-300">
<div flex layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Instances</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Instances'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<div flex layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Security groups over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Security-groups-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<div layout="row" layout-align="center stretch" class="height-300">
<div flex layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events over time</span>
<span class="wz-headline-title">Instances</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Events-over-time'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Instances'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex="65" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Event sources over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Event-sources-over-time'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="35" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Success login - Top 5 countries</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Success-login-Top-5-countries'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<div layout="row" layout-align="center stretch" class="height-270">
<div flex layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<span class="wz-headline-title">Security groups over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Alerts-summary'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Security-groups-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Events-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex="65" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Event sources over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Event-sources-over-time'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="35" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Success login - Top 5 countries</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Success-login-Top-5-countries'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-AWS-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,86 +1,84 @@
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'">
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels'" ng-show="resultState === 'ready'">
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Files added: <span class="wz-text-bold">{{fimAdded}}</span></div>
<div class="wz-text-truncatable" flex>Files modified: <span class="wz-text-bold">{{fimModified}}</span></div>
<div class="wz-text-truncatable" flex>Files deleted: <span class="wz-text-bold">{{fimDeleted}}</span></div>
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Files added: <span class="wz-text-bold">{{fimAdded}}</span></div>
<div class="wz-text-truncatable" flex>Files modified: <span class="wz-text-bold">{{fimModified}}</span></div>
<div class="wz-text-truncatable" flex>Files deleted: <span class="wz-text-bold">{{fimDeleted}}</span></div>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Added'" ></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Modified'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Deleted'"></kbn-vis>
</div>
<div layout="row" class="height-400">
<div flex layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Events-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Added'" ></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Modified'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Deleted'"></kbn-vis>
</div>
<div layout="row" class="height-400">
<div flex layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Events-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div flex="30" layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top user owners</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-user-owners'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top group owners</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-group-owners'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" class="height-213">
<div flex="30" layout="column">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top file changes</span>
<span class="wz-headline-title">Top user owners</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-file-changes'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-user-owners'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Root user file changes</span>
<span class="wz-headline-title">Top group owners</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Root-user-file-changes'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">World writable modified files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-World-writable-modified-files'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-group-owners'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Events-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" class="height-213">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top file changes</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-file-changes'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Root user file changes</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Root-user-file-changes'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">World writable modified files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-World-writable-modified-files'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Events-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,4 +1,4 @@
<md-content flex layout="column" ng-if="tab === 'general' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'general' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">

View File

@ -1,91 +1,88 @@
<md-content flex layout="column" ng-if="tab === 'oscap' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'oscap' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<!-- View: Panels -->
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Last score: <span class="wz-text-bold">{{scapLastScore}}</span></div>
<div class="wz-text-truncatable" flex>Highest score: <span class="wz-text-bold">{{scapHighestScore}}</span></div>
<div class="wz-text-truncatable" flex>Lowest score: <span class="wz-text-bold">{{scapLowestScore}}</span></div>
</md-card-content>
</md-card>
</div>
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Last score: <span class="wz-text-bold">{{scapLastScore}}</span></div>
<div class="wz-text-truncatable" flex>Highest score: <span class="wz-text-bold">{{scapHighestScore}}</span></div>
<div class="wz-text-truncatable" flex>Lowest score: <span class="wz-text-bold">{{scapLowestScore}}</span></div>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Last-score'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Highest-score'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Lowest-score'"></kbn-vis>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Last-score'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Highest-score'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Lowest-score'"></kbn-vis>
</div>
<div layout="row" layout-align="center stretch" class="height-215">
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Agents</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Agents'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Profiles</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Profiles'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Content</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Content'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Severity</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Severity'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-215">
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Agents</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Agents'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Profiles</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Profiles'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Content</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Content'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Severity</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Severity'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="start stretch" class="height-240">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 5 Agents - Severity high</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Top-5-agents-Severity-high'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="start stretch" class="height-240">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 5 Agents - Severity high</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Top-5-agents-Severity-high'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-320">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 10 - Alerts</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Top-10-alerts'"></kbn-vis>
</md-card-content>
</md-card>
<div layout="row" layout-align="center stretch" class="height-320">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 10 - Alerts</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Top-10-alerts'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 10 - High risk alerts</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Top-10-high-risk-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 10 - High risk alerts</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Top-10-high-risk-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Last-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-OSCAP-Last-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,76 +1,73 @@
<md-content flex layout="column" ng-if="tab === 'pci' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'pci' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<!-- View: Panels -->
<div layout="row" layout-align="center stretch">
<md-card flex class="wz-md-card">
<md-tabs md-selected="selectedIndex" class="wz-md-tab" md-border-bottom md-dynamic-height id="pciReq_tab">
<md-tab ng-repeat="tab in tabs" ng-disabled="tab.disabled" label="{{tab.title}}">
<div class="md-padding">
<span class="wz-headline-title">PCI DSS Requirement: {{tab.title}}</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10 wz-line-height">
<div ng-bind-html="tab.content"></div>
</div>
<div layout="row" layout-align="center stretch">
<md-card flex class="wz-md-card">
<md-tabs md-selected="selectedIndex" class="wz-md-tab" md-border-bottom md-dynamic-height id="pciReq_tab">
<md-tab ng-repeat="tab in tabs" ng-disabled="tab.disabled" label="{{tab.title}}">
<div class="md-padding">
<span class="wz-headline-title">PCI DSS Requirement: {{tab.title}}</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10 wz-line-height">
<div ng-bind-html="tab.content"></div>
</div>
</md-tab>
</md-tabs>
</md-card>
</div>
</div>
</md-tab>
</md-tabs>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-530">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Last alerts</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-heatmap'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-530">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Last alerts</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-heatmap'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-255">
<md-card flex="70" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Requirements</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="30" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Groups</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Groups'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-255">
<md-card flex="70" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Requirements</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="30" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Groups</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Groups'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-255">
<md-card flex="30" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Agents</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Agents'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="70" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Requirements by agent</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-by-agent'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-255">
<md-card flex="30" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Agents</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Agents'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="70" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Requirements by agent</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-by-agent'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Last-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PCI-DSS-Last-alerts'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,52 +1,49 @@
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<!-- View: Panels -->
<div layout="row" layout-align="center stretch" class="height-290">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Events-over-time'"></kbn-vis>
</md-card-content>
</md-card>
<div layout="row" layout-align="center stretch" class="height-290">
<md-card flex="50" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Events-over-time'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 5 CIS Requirements</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Top-5-CIS-requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 5 CIS Requirements</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Top-5-CIS-requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 5 PCI DSS Requirements</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Top-5-PCI-DSS-requirements'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<md-card flex="25" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 5 PCI DSS Requirements</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Top-5-PCI-DSS-requirements'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-240">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events per agent evolution</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Events-per-agent-evolution'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-240">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Events per agent evolution</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Events-per-agent-evolution'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-PM-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,72 +1,71 @@
<md-content flex layout="column" ng-if="tab === 'virustotal' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'virustotal' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Total malicious: <span class="wz-text-bold">{{virusMalicious}}</span></div>
<div class="wz-text-truncatable" flex>Total positives: <span class="wz-text-bold">{{virusPositives}}</span></div>
<div class="wz-text-truncatable" flex>Total: <span class="wz-text-bold">{{virusTotal}}</span></div>
</md-card-content>
</md-card>
</div>
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Total malicious: <span class="wz-text-bold">{{virusMalicious}}</span></div>
<div class="wz-text-truncatable" flex>Total positives: <span class="wz-text-bold">{{virusPositives}}</span></div>
<div class="wz-text-truncatable" flex>Total: <span class="wz-text-bold">{{virusTotal}}</span></div>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Total-Malicious'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Total-Positives'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Total'"></kbn-vis>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Total-Malicious'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Total-Positives'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Total'"></kbn-vis>
</div>
<div layout="row" class="height-360">
<div flex layout="column">
<div flex layout="row">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Unique malicious files per agent</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Malicious-Per-Agent'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div flex layout="column">
<div flex layout="row">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Last scanned files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Last-Files-Pie'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-360">
<div flex layout="column">
<div flex layout="row">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Unique malicious files per agent</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Malicious-Per-Agent'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
<div layout="row" class="height-550">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 10 agents with positive scans</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Positives-Heatmap'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-250">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Malicious files alerts evolution</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Malicious-Evolution'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Last files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Files-Table'"></kbn-vis>
</md-card-content>
</md-card>
<div flex layout="column">
<div flex layout="row">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Last scanned files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Last-Files-Pie'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</div>
</div>
<div layout="row" class="height-550">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top 10 agents with positive scans</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Positives-Heatmap'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-250">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Malicious files alerts evolution</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Malicious-Evolution'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Last files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-Virustotal-Files-Table'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -1,63 +1,58 @@
<md-content flex layout="column" ng-if="tab === 'vuls' && tabView === 'panels' && backFinished" ng-show="resultState === 'ready'" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'vuls' && tabView === 'panels'" ng-show="resultState === 'ready'" layout-align="start">
<!-- View: Panels -->
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Critical severity alerts: <span class="wz-text-bold">{{vulnCritical}}</span></div>
<div class="wz-text-truncatable" flex>High severity alerts: <span class="wz-text-bold">{{vulnHigh}}</span></div>
<div class="wz-text-truncatable" flex>Medium severity alerts: <span class="wz-text-bold">{{vulnMedium}}</span></div>
<div class="wz-text-truncatable" flex>Low severity alerts: <span class="wz-text-bold">{{vulnLow}}</span></div>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-Critical-severity'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-High-severity'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-Medium-severity'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-Low-severity'"></kbn-vis>
</div>
<div layout="row">
<md-card flex class="wz-metric-color wz-md-card">
<md-card-content layout="row" class="wz-padding-metric">
<div class="wz-text-truncatable" flex>Critical severity alerts: <span class="wz-text-bold">{{vulnCritical}}</span></div>
<div class="wz-text-truncatable" flex>High severity alerts: <span class="wz-text-bold">{{vulnHigh}}</span></div>
<div class="wz-text-truncatable" flex>Medium severity alerts: <span class="wz-text-bold">{{vulnMedium}}</span></div>
<div class="wz-text-truncatable" flex>Low severity alerts: <span class="wz-text-bold">{{vulnLow}}</span></div>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts severity over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Alerts-severity-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div class="wz-no-display">
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-Critical-severity'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-High-severity'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-Medium-severity'"></kbn-vis>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Metric-Low-severity'"></kbn-vis>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex="60" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top Agents severity</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Top-Agents-severity'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="40" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Affected packages - Top 5</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Top-5-affected-packages'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts severity over time</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Alerts-severity-over-time'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="center stretch" class="height-270">
<md-card flex="60" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Top Agents severity</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Top-Agents-severity'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="40" class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Affected packages - Top 5</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Top-5-affected-packages'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" class="height-570">
<md-card flex class="wz-md-card">
<md-card-content class="wazuh-column">
<span class="wz-headline-title">Alerts summary</span>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis vis-id="'Wazuh-App-Overview-VULS-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -34,7 +34,7 @@
<!-- View: Discover -->
<kbn-dis></kbn-dis>
<div class="wazuh-loading" layout="column" layout-aling="center center" ng-show="!backFinished || (resultState === 'ready' && tabView === 'panels' && !rendered)">
<div class="wazuh-loading" layout="column" layout-aling="center center" ng-show="resultState === 'ready' && tabView === 'panels' && !rendered">
<div class="percentage"><i class="fa fa-spinner fa-spin fa-fw" aria-hidden="true"></i></div>
<div class="percentage">{{loadingStatus}}</div>
</div>

View File

@ -343,7 +343,7 @@ module.exports = (server, options) => {
}
}
const deleteVis = async (req,res) => {
const deleteVis = async (req, res) => {
try {
const tmp = await elasticRequest.callWithInternalUser('deleteByQuery', {
index: '.kibana',
@ -354,49 +354,47 @@ module.exports = (server, options) => {
})
await elasticRequest.callWithInternalUser('indices.refresh', { index: ['.kibana']})
return res({aknowledge: true , output: tmp});
return res({acknowledge: true , output: tmp});
} catch(error){
console.log(error.message || error)
return res({error:error.message || error}).code(500);
}
}
/**
* Replaces our visualizations main fields to fit our pattern needs.
* @param {*} app_objects Object with the visualizations raw content.
* @param {*} id Eg: 'wazuh-alerts'
* Replaces visualizations main fields to fit a certain pattern.
* @param {*} app_objects Object containing raw visualizations.
* @param {*} id Index-pattern id to use in the visualizations. Eg: 'wazuh-alerts'
* @param {*} timestamp Milliseconds timestamp used to identify visualizations batch.
*/
const buildVisualizationsBulk = (app_objects,id,timestamp) => {
const buildVisualizationsBulk = (app_objects, id, timestamp) => {
try{
let body = '';
for (let element of app_objects) {
body += '{ "index": { "_index": ".kibana", "_type": "doc", ' + '"_id": "' + element._type + ':' + element._id + '-'+timestamp+'" } }\n';
// Bulk action (you define index, doc and id)
body += '{ "index": { "_index": ".kibana", "_type": "doc", ' + '"_id": "' + element._type + ':' + element._id + '-' + timestamp + '" } }\n';
let temp = {};
let aux = JSON.stringify(element._source);
aux = aux.replace("wazuh-alerts", id);
aux = JSON.parse(aux);
temp[element._type] = aux;
if (temp[element._type].kibanaSavedObjectMeta.searchSourceJSON.index) {
temp[element._type].kibanaSavedObjectMeta.searchSourceJSON.index = id;
}
// Stringify and replace index-pattern for visualizations
let aux_source = JSON.stringify(element._source);
aux_source = aux_source.replace("wazuh-alerts", id);
aux_source = JSON.parse(aux_source);
// Bulk source
let bulk_content = {};
bulk_content[element._type] = aux_source;
temp["type"] = element._type;
temp.visualization.description = timestamp;
bulk_content["type"] = element._type;
bulk_content.visualization.description = timestamp;
body += JSON.stringify(temp) + "\n";
body += JSON.stringify(bulk_content) + "\n";
}
return body;
} catch (error) {
console.log(error.message || error)
return (error.message || error);
}
}
const createVis = async (req,res) => {
const createVis = async (req, res) => {
try {
if(!req.params.pattern ||
!req.params.tab ||
@ -411,17 +409,13 @@ module.exports = (server, options) => {
await elasticRequest.callWithInternalUser('bulk', { index: '.kibana', body: bulkBody });
await elasticRequest.callWithInternalUser('indices.refresh', { index: ['.kibana']})
return res({aknowledge: true});
return res({acknowledge: true});
} catch(error){
console.log(error.message || error)
return res({error:error.message || error}).code(500);
}
}
// Get index patterns list
server.route({
method: 'GET',