Merge branch 'issue-1164'

This commit is contained in:
Jesús Ángel 2019-02-07 19:36:12 +01:00
commit 985233245f
14 changed files with 228 additions and 76 deletions

View File

@ -90,8 +90,9 @@ export class AgentsController {
this.ignoredTabs = ['syscollector', 'welcome', 'configuration'];
this.$scope.showSyscheckFiles = false;
this.$scope.editGroup = false;
this.$scope.showRootcheckScan = false;
this.$scope.editGroup = false;
this.$scope.addingGroupToAgent = false;
}
@ -183,6 +184,12 @@ export class AgentsController {
this.$scope.searchSyscheckFile = (term, specificFilter) =>
this.$scope.$broadcast('wazuhSearch', { term, specificFilter });
this.$scope.searchRootcheck = (term, specificFilter) =>
this.$scope.$broadcast('wazuhSearch', { term, specificFilter });
this.$scope.launchRootcheckScan = () => this.launchRootcheckScan();
this.$scope.launchSyscheckScan = () => this.launchSyscheckScan();
this.$scope.startVis2Png = () => this.startVis2Png();
this.$scope.$on('$destroy', () => {
@ -309,6 +316,16 @@ export class AgentsController {
if (!this.$scope.$$phase) this.$scope.$digest();
};
this.$scope.switchRootcheckScan = () => {
this.$scope.showRootcheckScan = !this.$scope.showRootcheckScan;
if (!this.$scope.showRootcheckScan) {
this.$rootScope.$emit('changeTabView', {
tabView: this.$scope.tabView
});
}
if (!this.$scope.$$phase) this.$scope.$digest();
};
this.$scope.goDiscover = () => this.goDiscover();
this.$scope.$on('$routeChangeStart', () =>
@ -468,10 +485,11 @@ export class AgentsController {
(((agentInfo || {}).data || {}).data || {}).status ||
this.$scope.agent.status;
}
} catch (error) {} // eslint-disable-line
} catch (error) { } // eslint-disable-line
try {
this.$scope.showSyscheckFiles = false;
this.$scope.showRootcheckScan = false;
if (tab === 'pci') {
const pciTabs = await this.commonData.getPCI();
this.$scope.pciTabs = pciTabs;
@ -485,7 +503,7 @@ export class AgentsController {
if (tab === 'syscollector')
try {
await this.loadSyscollector(this.$scope.agent.id);
} catch (error) {} // eslint-disable-line
} catch (error) { } // eslint-disable-line
if (tab === 'configuration') {
const isSync = await this.apiReq.request(
'GET',
@ -603,7 +621,7 @@ export class AgentsController {
{}
);
netifaceResponse = ((resultNetiface || {}).data || {}).data || false;
} catch (error) {} // eslint-disable-line
} catch (error) { } // eslint-disable-line
// This API call may fail so we put it out of Promise.all
let netaddrResponse = false;
@ -615,7 +633,7 @@ export class AgentsController {
);
netaddrResponse =
((resultNetaddrResponse || {}).data || {}).data || false;
} catch (error) {} // eslint-disable-line
} catch (error) { } // eslint-disable-line
// Before proceeding, syscollector data is an empty object
this.$scope.syscollector = {};
@ -631,7 +649,7 @@ export class AgentsController {
this.$scope.syscollector = {
hardware:
typeof hardwareResponse === 'object' &&
Object.keys(hardwareResponse).length
Object.keys(hardwareResponse).length
? { ...hardwareResponse }
: false,
os:
@ -815,4 +833,44 @@ export class AgentsController {
syscollectorFilters.length ? syscollectorFilters : null
);
}
async launchRootcheckScan() {
try {
const isActive = ((this.$scope.agent || {}).status || '') === 'Active';
if (!isActive) {
throw new Error('Agent is not active')
}
await this.apiReq.request(
'PUT',
`/rootcheck/${this.$scope.agent.id}`,
{}
);
this.errorHandler.info(
`Policy monitoring scan launched successfully on agent ${
this.$scope.agent.id
}`,
''
);
} catch (error) {
this.errorHandler.handle(error, '');
}
return;
}
async launchSyscheckScan() {
try {
const isActive = ((this.$scope.agent || {}).status || '') === 'Active';
if (!isActive) {
throw new Error('Agent is not active')
}
await this.apiReq.request('PUT', `/syscheck/${this.$scope.agent.id}`, {});
this.errorHandler.info(
`FIM scan launched successfully on agent ${this.$scope.agent.id}`,
''
);
} catch (error) {
this.errorHandler.handle(error, '');
}
return;
}
}

View File

@ -62,8 +62,6 @@ class WzConfigViewer {
);
};
const init = () => {};
const refreshJsonBox = json => {
$scope.jsoncontent = json;
if (!$scope.jsonCodeBox) {
@ -102,7 +100,6 @@ class WzConfigViewer {
refreshXmlBox(params.data);
});
init();
}
}

View File

@ -19,12 +19,13 @@ import { checkGap } from '../wz-table/lib/check-gap';
const app = uiModules.get('app/wazuh', []);
app.directive('wzDataTable', function() {
app.directive('wzDataTable', function () {
return {
restrict: 'E',
scope: {
rowSizes: '=rowSizes',
data: '='
data: '=',
keys: '='
},
controller($scope, $filter, errorHandler, $window) {
/**
@ -61,8 +62,6 @@ app.directive('wzDataTable', function() {
const fetch = () => {
try {
$scope.filterTable();
$scope.keys = Object.keys(items[0]);
return;
} catch (error) {
errorHandler.handle(error, 'Error loading table');
}
@ -121,7 +120,7 @@ app.directive('wzDataTable', function() {
$scope.prevPage = () => pagination.prevPage($scope);
$scope.nextPage = async currentPage =>
pagination.nextPage(currentPage, $scope, errorHandler, fetch);
$scope.setPage = function() {
$scope.setPage = function () {
$scope.currentPage = this.n;
$scope.nextPage(this.n);
};

View File

@ -26,7 +26,28 @@ const checkIfArray = item => {
return typeof item === 'object' ? splitArray(item) : item === 0 ? '0' : item;
};
export function parseValue(key, item, instancePath) {
export function parseValue(key, item, instancePath, $sce = null) {
if (
(key === 'event' || (key.value && key.value === 'event')) &&
instancePath.includes('rootcheck') &&
$sce
) {
if (typeof (item || {}).event === 'string') {
const urlRegex = new RegExp(
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/,
'g'
);
const matched = item.event.match(urlRegex);
if (matched) {
item.event = item.event.replace(
matched,
`<a href="${matched}">${matched}</a>`
);
item.event = $sce.trustAsHtml(item.event);
}
}
}
if (key === 'state' && instancePath.includes('processes')) {
return ProcessEquivalence[item.state] || 'Unknown';
}

View File

@ -50,7 +50,8 @@ app.directive('wzTable', function() {
appState,
globalState,
groupHandler,
wazuhConfig
wazuhConfig,
$sce
) {
/**
* Init variables
@ -205,7 +206,8 @@ app.directive('wzTable', function() {
return;
};
$scope.parseValue = (key, item) => parseValue(key, item, instance.path);
$scope.parseValue = (key, item) =>
parseValue(key, item, instance.path, $sce);
/**
* On controller loads

View File

@ -20,11 +20,9 @@
<tr ng-class="allowClick ? 'cursor-pointer' : ''" class="wz-word-wrap" ng-repeat="item in pagedItems[currentPage] | filter:{item:'!'}"
ng-click="clickAction(item)">
<td ng-repeat="key in keys">
{{
parseValue(key,item) | limitTo: extraLimit ? 100 : 25
}}
<span ng-if="parseValue(key,item).length > (extraLimit ? 100 : 25)">...</span>
<md-tooltip ng-if="parseValue(key,item).length > (extraLimit ? 100 : 25)" md-direction="bottom"
<span ng-bind-html="parseValue(key,item) | limitTo: extraLimit || 25"></span>
<span ng-if="parseValue(key,item).length > (extraLimit || 25)">...</span>
<md-tooltip ng-if="parseValue(key,item).length > (extraLimit || 25)" md-direction="bottom"
class="wz-tooltip">
{{ parseValue(key,item) }}
</md-tooltip>

View File

@ -1,7 +1,9 @@
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels'" ng-show="!showSyscheckFiles" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary">Show files</span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run scan</span>
<span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i> Show state</span>
</div>
<!-- View: Panels -->
<div layout="row" class="height-300">
@ -69,7 +71,9 @@
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels' && showSyscheckFiles" layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary">Show alerts</span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run scan</span>
<span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-area-chart"></i> Show alerts</span>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="showSyscheckFiles && (!agent || !agent.os)">
@ -94,7 +98,7 @@
</button>
</div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv">
<wz-table flex path="'/syscheck/' + agent.id" implicit-filter="[{name:'type',value:'registry'}]" row-sizes="[6,6,6]" extra-limit="true" keys="['file','sha1','md5']">
<wz-table flex path="'/syscheck/' + agent.id" implicit-filter="[{name:'type',value:'registry'}]" row-sizes="[6,6,6]" extra-limit="100" keys="['file','sha1','md5']">
</wz-table>
</div>
<div layout="row" layout-padding>
@ -118,7 +122,7 @@
</button>
</div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv">
<wz-table flex path="'/syscheck/' + agent.id" implicit-filter="[{name:'type',value:'file'}]" row-sizes="[6,6,6]" extra-limit="true" keys="['file','size','uname','perm','sha1','sha256','uid','mtime','md5']">
<wz-table flex path="'/syscheck/' + agent.id" implicit-filter="[{name:'type',value:'file'}]" row-sizes="[6,6,6]" extra-limit="100" keys="['file','size','uname','perm','sha1','sha256','uid','mtime','md5']">
</wz-table>
</div>
<div layout="row" layout-padding>
@ -142,7 +146,7 @@
</button>
</div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv">
<wz-table flex path="'/syscheck/' + agent.id" row-sizes="[12,10,8]" extra-limit="true" keys="['file','size','inode','gname','uname','perm','sha1','sha256','uid','gid','mtime','md5']">
<wz-table flex path="'/syscheck/' + agent.id" row-sizes="[12,10,8]" extra-limit="100" keys="['file','size','inode','gname','uname','perm','sha1','sha256','uid','gid','mtime','md5']">
</wz-table>
</div>
<div layout="row" layout-padding>

View File

@ -1,42 +1,86 @@
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels'" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels'" ng-show="!showRootcheckScan" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}"
layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="launchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run
scan</span>
<span></span>
<span ng-click="switchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i>
Show state</span>
</div>
<div layout="row" class="height-240">
<md-card flex="50" 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 id="Wazuh-App-Agents-PM-Alerts-over-time" vis-id="'Wazuh-App-Agents-PM-Alerts-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 id="Wazuh-App-Agents-PM-Top-5-CIS-Requirements" vis-id="'Wazuh-App-Agents-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 id="Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements" vis-id="'Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<!-- View: Panels -->
<div layout="row" class="height-240">
<md-card flex="50" 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 id="Wazuh-App-Agents-PM-Alerts-over-time" vis-id="'Wazuh-App-Agents-PM-Alerts-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 id="Wazuh-App-Agents-PM-Top-5-CIS-Requirements" vis-id="'Wazuh-App-Agents-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 id="Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements" vis-id="'Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="space-between stretch" class="height-570">
<md-card flex="100" 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-Agents-PM-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
<div layout="row" layout-align="space-between stretch" class="height-570">
<md-card flex="100" 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-Agents-PM-Alerts-summary'"></kbn-vis>
</md-card-content>
</md-card>
</div>
</md-content>
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels' && showRootcheckScan" layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="launchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run
scan</span>
<span></span>
<span ng-click="switchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</span>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="showRootcheckScan && (!agent || !agent.os)">
<div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<defs>
<path id="help-a" d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z"></path>
</defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg>
<span class="euiCallOutHeader__title">This agent is never connected.</span>
</div>
</div>
</div>
<div layout="row" class="wz-padding-top-0" ng-if="agent && agent.os">
<md-card flex class="wz-md-card">
<md-card-content>
<span class="wz-headline-title"><i class="fa fa-fw fa-shield"></i> Configuration assessment</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10">
</div>
</md-card-content>
</md-card>
</div>
</md-content>

View File

@ -56,9 +56,9 @@
<div layout="row" ng-if="agent && syscollector && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv">
<wz-table flex ng-if="agent && agent.os && agent.os.platform !== 'windows'" path="'/syscollector/' + agent.id + '/packages'"
row-sizes="[10,8,6]" extra-limit="true" keys="[{value:'name',size:2},'architecture','version',{value:'vendor',size:2},{value:'description',size:3}]" />
row-sizes="[10,8,6]" extra-limit="100" keys="[{value:'name',size:2},'architecture','version',{value:'vendor',size:2},{value:'description',size:3}]" />
<wz-table flex ng-if="agent && agent.os && agent.os.platform === 'windows'" path="'/syscollector/' + agent.id + '/packages'"
row-sizes="[10,8,6]" extra-limit="true" keys="[{value:'name',size:3},'architecture','version',{value:'vendor',size:2}]" />
row-sizes="[10,8,6]" extra-limit="100" keys="[{value:'name',size:3},'architecture','version',{value:'vendor',size:2}]" />
</div>
</md-card-content>
</md-card>
@ -79,9 +79,9 @@
</div>
<div layout="row" ng-if="agent && syscollector && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv">
<wz-table flex ng-if="agent && agent.os && agent.os.platform === 'windows'" path="'/syscollector/' + agent.id + '/processes'"
row-sizes="[10,8,6]" extra-limit="true" keys="['name','cmd','priority','nlwp']" />
row-sizes="[10,8,6]" extra-limit="100" keys="['name','cmd','priority','nlwp']" />
<wz-table flex ng-if="agent && agent.os && agent.os.platform !== 'windows'" path="'/syscollector/' + agent.id + '/processes'"
row-sizes="[10,8,6]" extra-limit="true" keys="['name','euser','nice','state']" />
row-sizes="[10,8,6]" extra-limit="100" keys="['name','euser','nice','state']" />
</div>
</md-card-content>
</md-card>

View File

@ -59,7 +59,7 @@
<!-- Reporting button section -->
<div ng-show="tab !== 'welcome' && tab !== 'configuration' && tabView === 'panels'">
<!-- Report button -->
<md-button md-no-ink class="md-icon-button small wz-no-margin-padding" tooltip="Generate report" tooltip-placement="bottom" ng-disabled="(!rendered || loading || resultState !== 'ready') && tab !== 'syscollector'" ng-click="startVis2Png()" aria-label="Generate report button">
<md-button md-no-ink class="md-icon-button small wz-no-margin-padding" tooltip="Generate report" tooltip-placement="bottom" ng-disabled="(!rendered || loading || resultState !== 'ready' || showSyscheckFiles || showRootcheckScan) && tab !== 'syscollector'" ng-click="startVis2Png()" aria-label="Generate report button">
<i class="fa fa-fw fa-print" aria-hidden="true"></i>
</md-button>
</div>
@ -188,11 +188,19 @@
<!-- End report status section -->
<!-- No results section -->
<div layout="row" ng-if="!showSyscheckFiles && tab === 'fim' && resultState === 'none' && tabView === 'panels'" layout-padding class="wz-padding-top-0">
<div layout="row" ng-if="!showSyscheckFiles && !showRootcheckScan && tab === 'fim' && resultState === 'none' && tabView === 'panels'" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary">Show files</span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run scan</span>
<span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i> Show state</span>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="!showSyscheckFiles && tab !== 'welcome' && tab !== 'configuration' && tab !== 'syscollector'" ng-show="resultState === 'none' && tabView === 'panels'">
<div layout="row" ng-if="!showSyscheckFiles && !showRootcheckScan && tab === 'pm' && resultState === 'none' && tabView === 'panels'" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="launchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run scan</span>
<span></span>
<span ng-click="switchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i> Show state</span>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="!showSyscheckFiles && !showRootcheckScan && tab !== 'welcome' && tab !== 'configuration' && tab !== 'syscollector'" ng-show="resultState === 'none' && tabView === 'panels'">
<div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"><defs><path id="help-a" d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z"></path></defs><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use></svg>

View File

@ -119,7 +119,7 @@
<md-card flex class="wz-md-card _md flex md-margin-h" ng-if="!lookingGroup">
<md-card-content>
<div layout="row">
<wz-table flex extra-limit="true" path="'/agents/groups'" keys="['name','count','mergedSum']"
<wz-table flex extra-limit="100" path="'/agents/groups'" keys="['name','count','mergedSum']"
allow-click="true" row-sizes="[14,12,10]">
</wz-table>
</div>
@ -161,7 +161,7 @@
<md-card flex class="wz-md-card _md flex md-margin-h" ng-if="lookingGroup && groupsSelectedTab==='files' && !fileViewer && currentGroup">
<md-card-content>
<div layout="row">
<wz-table extra-limit="true" flex path="'/agents/groups/' + currentGroup.name + '/files'"
<wz-table extra-limit="100" flex path="'/agents/groups/' + currentGroup.name + '/files'"
keys="[{value:'filename',size:2},{value:'hash',size:6}]" allow-click="true"
row-sizes="[10,8,6,4]">
</wz-table>

View File

@ -66,7 +66,7 @@
<div layout="row" layout-padding ng-if="ctrl.logsPath">
<wz-table
flex
extra-limit="true"
extra-limit="100"
path="ctrl.logsPath"
keys="['timestamp',{value:'tag',size:2},'level',{value:'description',size:4,nosortable:true}]"
row-sizes="[12,10,7]">

View File

@ -466,6 +466,22 @@ export const apiRequestList = [
name: '/manager/status',
args: []
},
{
name: '/policy-monitoring/:agent_id',
args: [
{
name: ':agent_id'
}
]
},
{
name: '/policy-monitoring/:agent_id/checks',
args: [
{
name: ':agent_id'
}
]
},
{
name: '/rootcheck/:agent_id',
args: [

View File

@ -29,6 +29,8 @@ export const KeyEquivalenece = {
file: 'File',
gdpr: 'GDPR',
pci: 'PCI',
cis: 'CIS',
event: 'Event',
groups: 'Groups',
name: 'Name',
count: 'Count',
@ -79,5 +81,8 @@ export const KeyEquivalenece = {
priority: 'Priority',
cmd: 'CMD',
nlwp: 'NLWP',
process: 'Process'
process: 'Process',
md5: 'MD5',
sha1: 'SHA1',
sha256: 'SHA256'
};