mirror of
https://github.com/valitydev/wazuh-kibana-app.git
synced 2024-11-07 10:18:57 +00:00
Merge branch 'ui-fixes'
This commit is contained in:
commit
59f331b500
@ -398,7 +398,10 @@ export class AgentsController {
|
||||
|
||||
this.$scope.loadScaChecks = policy =>
|
||||
(this.$scope.lookingSca = { ...policy, id: policy.policy_id });
|
||||
this.$scope.closeScaChecks = () => (this.$scope.lookingSca = false);
|
||||
this.$scope.closeScaChecks = () => {
|
||||
this.$scope.lookingSca = false;
|
||||
this.renderScaCharts();
|
||||
};
|
||||
|
||||
this.$scope.confirmAddGroup = group => {
|
||||
this.groupHandler
|
||||
@ -624,7 +627,6 @@ export class AgentsController {
|
||||
this.tabVisualizations.setTab(tab);
|
||||
if (this.$scope.tab === tab && !force) {
|
||||
if (tab === 'sca') {
|
||||
console.log('622: TRYING TO FORCE');
|
||||
this.renderScaCharts();
|
||||
this.$scope.$applyAsync();
|
||||
}
|
||||
|
@ -1,56 +1,61 @@
|
||||
<div layout="row" ng-show="jsoncontent || xmlcontent" ng-style="hideHeader && {'height': 'calc(100vh - 375px)'} || {'height': 'calc(100vh - 270px)'}">
|
||||
<div layout="row" ng-show="jsoncontent || xmlcontent"
|
||||
ng-style="hideHeader && {'height': 'calc(100vh - 335px)'} || {'height': 'calc(100vh - 270px)'}">
|
||||
|
||||
<!-- JSON card -->
|
||||
<md-card flex="auto" class="wz-md-card" ng-show="jsoncontent" ng-class="hideHeader ? ['wz-no-margin'] : ''">
|
||||
<md-card-content flex layout="column" ng-class="hideHeader ? ['wz-no-padding'] : ''">
|
||||
<div ng-hide="hideHeader">
|
||||
<div layout="row" layout-align="start center">
|
||||
<div>
|
||||
<span class="font-size-16">JSON viewer</span>
|
||||
<div class="wz-margin-top-10">
|
||||
<span class="md-subheader small">View this configuration in raw JSON format</span>
|
||||
</div>
|
||||
<!-- JSON card -->
|
||||
<md-card flex="auto" class="wz-md-card" ng-show="jsoncontent" ng-class="hideHeader ? ['wz-no-margin'] : ''">
|
||||
<md-card-content flex layout="column" ng-class="hideHeader ? ['wz-no-padding'] : ''">
|
||||
<div ng-hide="hideHeader">
|
||||
<div layout="row" layout-align="start center">
|
||||
<div>
|
||||
<span class="font-size-16">JSON viewer</span>
|
||||
<div class="wz-margin-top-10">
|
||||
<span class="md-subheader small">View this configuration in raw JSON format</span>
|
||||
</div>
|
||||
<span flex></span>
|
||||
<span ng-class="jsoncontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetjson()">JSON</span>
|
||||
<span class="small"> · </span>
|
||||
<span ng-class="xmlcontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetxml()">XML</span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<span flex></span>
|
||||
<span ng-class="jsoncontent ? 'wz-text-active' : ''" class="wz-text-link small"
|
||||
ng-click="callgetjson()">JSON</span>
|
||||
<span class="small"> · </span>
|
||||
<span ng-class="xmlcontent ? 'wz-text-active' : ''" class="wz-text-link small"
|
||||
ng-click="callgetxml()">XML</span>
|
||||
</div>
|
||||
<!-- The JSON viewer -->
|
||||
<div class='wzJsonXmlEditorBody'>
|
||||
<textarea id='viewer_json_box'></textarea>
|
||||
</div>
|
||||
<!-- End JSON viewer -->
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<!-- End JSON card -->
|
||||
|
||||
<!-- XML card -->
|
||||
<md-card flex="auto" class="wz-md-card" ng-show="xmlcontent" ng-class="hideHeader ? ['wz-no-margin'] : ''">
|
||||
<md-card-content flex layout="column" ng-class="hideHeader ? ['wz-no-padding'] : ''">
|
||||
<div ng-hide="hideHeader">
|
||||
<div layout="row" layout-align="start center">
|
||||
<div>
|
||||
<span class="font-size-16">XML viewer</span>
|
||||
<div class="wz-margin-top-10">
|
||||
<span class="md-subheader small">View this configuration in raw XML format</span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
</div>
|
||||
<!-- The JSON viewer -->
|
||||
<div class='wzJsonXmlEditorBody'>
|
||||
<textarea id='viewer_json_box'></textarea>
|
||||
</div>
|
||||
<!-- End JSON viewer -->
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<!-- End JSON card -->
|
||||
|
||||
<!-- XML card -->
|
||||
<md-card flex="auto" class="wz-md-card" ng-show="xmlcontent" ng-class="hideHeader ? ['wz-no-margin'] : ''">
|
||||
<md-card-content flex layout="column" ng-class="hideHeader ? ['wz-no-padding'] : ''">
|
||||
<div ng-hide="hideHeader">
|
||||
<div layout="row" layout-align="start center">
|
||||
<div>
|
||||
<span class="font-size-16">XML viewer</span>
|
||||
<div class="wz-margin-top-10">
|
||||
<span class="md-subheader small">View this configuration in raw XML format</span>
|
||||
</div>
|
||||
<span flex></span>
|
||||
<span ng-class="jsoncontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetjson()">JSON</span>
|
||||
<span class="small"> · </span>
|
||||
<span ng-class="xmlcontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetxml()">XML</span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<span flex></span>
|
||||
<span ng-class="jsoncontent ? 'wz-text-active' : ''" class="wz-text-link small"
|
||||
ng-click="callgetjson()">JSON</span>
|
||||
<span class="small"> · </span>
|
||||
<span ng-class="xmlcontent ? 'wz-text-active' : ''" class="wz-text-link small"
|
||||
ng-click="callgetxml()">XML</span>
|
||||
</div>
|
||||
<!-- The XML viewer -->
|
||||
<div class='wzJsonXmlEditorBody'>
|
||||
<textarea id='viewer_xml_box'></textarea>
|
||||
</div>
|
||||
<!-- End XML viewer -->
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<!-- End XML card -->
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
</div>
|
||||
<!-- The XML viewer -->
|
||||
<div class='wzJsonXmlEditorBody'>
|
||||
<textarea id='viewer_xml_box'></textarea>
|
||||
</div>
|
||||
<!-- End XML viewer -->
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<!-- End XML card -->
|
||||
</div>
|
@ -1,13 +1,16 @@
|
||||
<div layout="column" layout-align="start">
|
||||
<div layout="row" ng-class="hideClose ? ['wz-margin-top-8', 'md-padding-h'] : ''">
|
||||
<span ng-if="!hideClose" ng-click='closeFn()' class='btn btn-info wz-margin-right-8'>Cancel</span>
|
||||
<button ng-disabled='!(items || []).length || (currentList.new && !currentList.newName) || doingSaving || overwriteError'
|
||||
<button
|
||||
ng-disabled='!(items || []).length || (currentList.new && !currentList.newName) || doingSaving || overwriteError'
|
||||
ng-click='saveList()' class='btn wz-button pull-right'>
|
||||
<span><i aria-hidden='true' class='fa fa-fw fa-save' ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
<span><i aria-hidden='true' class='fa fa-fw fa-save'
|
||||
ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
list</span>
|
||||
</button>
|
||||
<input ng-show="currentList.new" placeholder="Enter new list name" ng-model="currentList.newName" ng-change="overwriteError = false"
|
||||
type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid wz-margin-left-8"
|
||||
<input ng-show="currentList.new" placeholder="Enter new list name" ng-model="currentList.newName"
|
||||
ng-change="overwriteError = false" type="text"
|
||||
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid wz-margin-left-8"
|
||||
aria-invalid="false">
|
||||
</div>
|
||||
<div layout="row" ng-class="hideClose ? ['wz-padding-left-8', 'wz-padding-right-8'] : ['wz-padding-top-14']"
|
||||
@ -24,7 +27,8 @@
|
||||
<input placeholder="Filter entries..." ng-model="searchTerm" ng-change="filterTable()" type="text"
|
||||
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-40">
|
||||
</div>
|
||||
<table class="table table-striped table-condensed table-layout-fixed table-hover table-vertical-align-middle">
|
||||
<table
|
||||
class="table table-striped table-condensed table-layout-fixed table-hover table-vertical-align-middle">
|
||||
<thead class="wz-text-bold">
|
||||
<th class="wz-text-left">Key</th>
|
||||
<th class="wz-text-left">Value</th>
|
||||
@ -32,32 +36,72 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-if="adminMode">
|
||||
<td><input placeholder="Key" type="text" class="wz-input-text" ng-model="newKey"></input></td>
|
||||
<td><input placeholder="Value" type="text" class="wz-input-text" ng-model="newValue"></input></td>
|
||||
<td><button class="btn btn-primary btn-as-i" ng-disabled="!newKey" ng-click="addEntry(newKey, newValue);newKey = ''; newValue = ''"
|
||||
<td><input placeholder="Key" type="text" class="wz-input-text" ng-model="newKey"></input>
|
||||
</td>
|
||||
<td><input placeholder="Value" type="text" class="wz-input-text"
|
||||
ng-model="newValue"></input></td>
|
||||
<td><button class="btn btn-primary btn-as-i" ng-disabled="!newKey"
|
||||
ng-click="addEntry(newKey, newValue);newKey = ''; newValue = ''"
|
||||
tooltip="Add new entry" tooltip-placement="right">
|
||||
<i class="fa fa-fw fa-plus" style="width:15px"></i></button></td>
|
||||
<svg class="euiIcon euiIcon--medium" focusable="false"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd"
|
||||
d="M8 7h3.5a.5.5 0 1 1 0 1H8v3.5a.5.5 0 1 1-1 0V8H3.5a.5.5 0 0 1 0-1H7V3.5a.5.5 0 0 1 1 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882z">
|
||||
</path>
|
||||
</svg>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="wz-word-wrap" ng-repeat="item in pagedItems[currentPage] track by $index" ng-style="editingKey === item[0] && {'background': '#e2f7ff'}">
|
||||
<tr class="wz-word-wrap" ng-repeat="item in pagedItems[currentPage] track by $index"
|
||||
ng-style="editingKey === item[0] && {'background': '#e2f7ff'}">
|
||||
<td>{{item[0]}}</td>
|
||||
<td>
|
||||
<input ng-show="editingKey === item[0]" ng-disabled="loadingChange" type="text" class="wz-input-text"
|
||||
ng-model="currentList.editingNewValue"></input>
|
||||
<input ng-show="editingKey === item[0]" ng-disabled="loadingChange" type="text"
|
||||
class="wz-input-text" ng-model="currentList.editingNewValue"></input>
|
||||
<span ng-show="!editingKey || editingKey !== item[0]">{{item[1]}}</span>
|
||||
</td>
|
||||
<td class="action-btn-td">
|
||||
<div ng-hide="!adminMode">
|
||||
<span ng-show="(!editingKey || editingKey !== item[0]) && removingEntry !== item[0]"
|
||||
tooltip="Edit" ng-click="setEditingKey(item[0], item[1])" class="fa fa-fw fa-pencil cursor-pointer"></span>
|
||||
<span ng-show="editingKey === item[0] && !loadingChange" tooltip="Cancel" class="fa fa-fw fa-times cursor-pointer"
|
||||
ng-click="cancelEditingKey()"></span>
|
||||
<span ng-show="editingKey === item[0] && currentList.editingNewValue !== '' && !loadingChange"
|
||||
tooltip="Apply" class="fa fa-fw fa-success cursor-pointer" ng-click="editKey(item[0])"></span>
|
||||
<span ng-show="editingKey === item[0] && loadingChange"><i class="fa fa-fw fa-spin fa-spinner"></i></span>
|
||||
<i ng-if="(!removingEntry || removingEntry !== item[0]) && editingKey !== item[0]"
|
||||
tooltip="Edit" ng-click="setEditingKey(item[0], item[1])"
|
||||
class="cursor-pointer">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false"
|
||||
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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
<span ng-show="editingKey === item[0] && !loadingChange" tooltip="Cancel"
|
||||
class="fa fa-fw fa-times cursor-pointer" ng-click="cancelEditingKey()"></span>
|
||||
<span
|
||||
ng-show="editingKey === item[0] && currentList.editingNewValue !== '' && !loadingChange"
|
||||
tooltip="Apply" class="fa fa-fw fa-success cursor-pointer"
|
||||
ng-click="editKey(item[0])"></span>
|
||||
<span ng-show="editingKey === item[0] && loadingChange"><i
|
||||
class="fa fa-fw fa-spin fa-spinner"></i></span>
|
||||
<span
|
||||
ng-if="(!removingEntry || removingEntry !== item[0]) && editingKey !== item[0]"
|
||||
ng-click="showConfirmRemoveEntry($event, item[0]); $event.stopPropagation()"
|
||||
class="fa fa-fw fa-trash cursor-pointer" tooltip="Remove this entry"
|
||||
tooltip-placement="left" aria-hidden="true"></i>
|
||||
class="cursor-pointer" tooltip="Remove this entry" tooltip-placement="left"
|
||||
aria-hidden="true">
|
||||
<svg class="euiIcon euiIcon--medium euiButton__icon" focusable="false"
|
||||
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="trash-a"
|
||||
d="M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#trash-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
|
||||
<div ng-if="removingEntry === item[0]" class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
@ -67,8 +111,9 @@
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveEntry()"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button" ng-click="confirmRemoveEntry(item[0])"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button"
|
||||
ng-click="confirmRemoveEntry(item[0])"><i aria-hidden='true'
|
||||
class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -78,7 +123,8 @@
|
||||
<tfoot>
|
||||
<td colspan="3">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right"
|
||||
style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage > 0" class="md-padding">
|
||||
<a href ng-click="firstPage()">First</a>
|
||||
@ -89,7 +135,8 @@
|
||||
</li>
|
||||
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
|
||||
ng-class="{'wz-text-active': n == currentPage}" ng-click="setPage()" class="md-padding">
|
||||
ng-class="{'wz-text-active': n == currentPage}" ng-click="setPage()"
|
||||
class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
|
@ -7,23 +7,53 @@
|
||||
<a class="cursor-pointer wz-logo-container wz-logo wz-margin-right-15" href="#/"></a>
|
||||
|
||||
<!-- Main Wazuh app navigation buttons -->
|
||||
<md-button class="wz-menu-button" ng-href="#/overview" ng-class="{'wz-menu-active': menuNavItem === 'overview' }" aria-label="Overview tab">
|
||||
<i class="fa fa-fw fa-bar-chart" aria-hidden="true"></i> Overview
|
||||
<md-button class="wz-menu-button" ng-href="#/overview"
|
||||
ng-class="{'wz-menu-active': menuNavItem === 'overview' }" aria-label="Overview tab">
|
||||
<svg class="euiIcon euiIcon--ghost euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="32" height="32" viewBox="0 0 32 32">
|
||||
<path class="euiIcon__fillSecondary" d="M32 32H4a4 4 0 0 1-4-4V0h2v28a2 2 0 0 0 2 2h28v2z"></path>
|
||||
<path d="M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"></path>
|
||||
<path
|
||||
d="M27 6a3 3 0 0 0-2.08.84L20 4.36A2.2 2.2 0 0 0 20 4a3 3 0 0 0-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 0 0 7 9a3 3 0 1 0 3 3 2.93 2.93 0 0 0-.18-1l5.6-4.48A3 3 0 0 0 17 7a3 3 0 0 0 2.08-.84l5 2.48A2.2 2.2 0 0 0 24 9a3 3 0 1 0 3-3zM7 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm10-8a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm10 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z">
|
||||
</path>
|
||||
</svg> Overview
|
||||
</md-button>
|
||||
|
||||
<md-button class="wz-menu-button" ng-href="#/manager" ng-class="{'wz-menu-active': menuNavItem === 'manager' }" aria-label="Cluster tab">
|
||||
<i class="fa fa-fw fa-server" aria-hidden="true"></i> Management
|
||||
<md-button class="wz-menu-button" ng-href="#/manager" ng-class="{'wz-menu-active': menuNavItem === 'manager' }"
|
||||
aria-label="Cluster tab">
|
||||
<svg class="euiIcon euiIcon--ghost euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="32" height="32" viewBox="0 0 32 32">
|
||||
<path class="euiIcon__fillSecondary"
|
||||
d="M12.594 18.424h3.875v1.939h-3.875zM12.594 26.182h3.875v1.939h-3.875z"></path>
|
||||
<path
|
||||
d="M8.719 14.545V32H31V14.545H8.719zm20.343 1.94v5.818H10.657v-5.818h18.407zM10.657 30.06v-5.819h18.407v5.819H10.655z">
|
||||
</path>
|
||||
<path
|
||||
d="M27.648 12.606a8.499 8.499 0 0 0-4.398-3.879 8.983 8.983 0 0 0-8.903-7.81 8.983 8.983 0 0 0-8.903 7.81 8.553 8.553 0 0 0-5.353 8.645 8.55 8.55 0 0 0 6.69 7.656V23.03a6.612 6.612 0 0 1-4.845-6.293 6.613 6.613 0 0 1 4.69-6.41l.64-.194v-.669a7.046 7.046 0 0 1 7.023-6.527 7.046 7.046 0 0 1 7.024 6.527v.67l.639.193a6.587 6.587 0 0 1 3.4 2.28h2.296z">
|
||||
</path>
|
||||
</svg> Management
|
||||
</md-button>
|
||||
|
||||
<md-button class="wz-menu-button" ng-href="#/agents-preview" ng-class="{'wz-menu-active': menuNavItem === 'agents' }" aria-label="Agents tab">
|
||||
<md-button class="wz-menu-button" ng-href="#/agents-preview"
|
||||
ng-class="{'wz-menu-active': menuNavItem === 'agents' }" aria-label="Agents tab">
|
||||
<i class="fa fa-fw fa-tv" aria-hidden="true"></i> Agents
|
||||
</md-button>
|
||||
|
||||
<md-button class="wz-menu-button" ng-href="#/wazuh-discover" ng-class="{'wz-menu-active': menuNavItem === 'discover' }" aria-label="Discover tab">
|
||||
<i class="fa fa-fw fa-compass" aria-hidden="true"></i> Discover
|
||||
<md-button class="wz-menu-button" ng-href="#/wazuh-discover"
|
||||
ng-class="{'wz-menu-active': menuNavItem === 'discover' }" aria-label="Discover tab">
|
||||
<svg class="euiIcon euiIcon--ghost euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="32" height="32" viewBox="0 0 32 32">
|
||||
<path class="euiIcon__fillSecondary"
|
||||
d="M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z">
|
||||
</path>
|
||||
<path
|
||||
d="M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0 0 16 0zm1 29.95V28h-2v1.95A14 14 0 0 1 2.05 17H4v-2H2.05A14 14 0 0 1 15 2.05V4h2V2.05A14 14 0 0 1 29.95 15H28v2h1.95A14 14 0 0 1 17 29.95z">
|
||||
</path>
|
||||
</svg> Discover
|
||||
</md-button>
|
||||
|
||||
<md-button class="wz-menu-button" ng-href="#/wazuh-dev" ng-class="{'wz-menu-active': menuNavItem === 'wazuh-dev' }" aria-label="Dev Tools tab">
|
||||
<md-button class="wz-menu-button" ng-href="#/wazuh-dev"
|
||||
ng-class="{'wz-menu-active': menuNavItem === 'wazuh-dev' }" aria-label="Dev Tools tab">
|
||||
<i class="fa fa-fw fa-code" aria-hidden="true"></i> Dev tools
|
||||
</md-button>
|
||||
|
||||
@ -33,7 +63,8 @@
|
||||
<!-- API/Index pattern section -->
|
||||
<!-- Case 1a - There's API -->
|
||||
<span ng-show="theresAPI" class="small" tooltip="Selected API" tooltip-placement="bottom">
|
||||
<i class="fa fa-star fa-fw wz-color-orange" aria-hidden="true"></i>{{currentAPI}}<span ng-if="showSelector"> – </span>
|
||||
<i class="fa fa-star fa-fw wz-color-orange" aria-hidden="true"></i>{{currentAPI}}<span
|
||||
ng-if="showSelector"> – </span>
|
||||
</span>
|
||||
|
||||
<!-- Case 1b - There's no API -->
|
||||
@ -42,24 +73,37 @@
|
||||
</span>
|
||||
|
||||
<!-- Case 2a - There's pattern and there's more than one -->
|
||||
<span ng-if="showSelector" ng-show="theresPattern && patternList && patternList.length > 1" class="small" tooltip="Selected index pattern" tooltip-placement="bottom">
|
||||
<select class="wz-menu-select" ng-model="currentSelectedPattern" ng-change="changePattern(currentSelectedPattern)" aria-label="Index pattern selector" placeholder="Index pattern">
|
||||
<option class="wz-menu-select-option" ng-repeat="pattern in patternList | orderObjectBy:'title'" value="{{pattern.id}}">
|
||||
<span ng-if="showSelector" ng-show="theresPattern && patternList && patternList.length > 1" class="small"
|
||||
tooltip="Selected index pattern" tooltip-placement="bottom">
|
||||
<select class="wz-menu-select" ng-model="currentSelectedPattern"
|
||||
ng-change="changePattern(currentSelectedPattern)" aria-label="Index pattern selector"
|
||||
placeholder="Index pattern">
|
||||
<option class="wz-menu-select-option" ng-repeat="pattern in patternList | orderObjectBy:'title'"
|
||||
value="{{pattern.id}}">
|
||||
{{pattern.title}}
|
||||
</option>
|
||||
</select>
|
||||
</span>
|
||||
|
||||
<!-- Case 2b - There's pattern and there's only one-->
|
||||
<span ng-if="showSelector" ng-show="theresPattern && patternList && patternList.length === 1" class="small" tooltip="Selected index pattern" tooltip-placement="bottom">
|
||||
<span ng-if="showSelector" ng-show="theresPattern && patternList && patternList.length === 1" class="small"
|
||||
tooltip="Selected index pattern" tooltip-placement="bottom">
|
||||
{{patternList[0].title}}
|
||||
</span>
|
||||
|
||||
<!-- Settings tab button -->
|
||||
<md-button class="wz-menu-button md-icon-button" ng-href="#/settings" ng-class="{'wz-menu-active': menuNavItem === 'settings' }" aria-label="Settings tab">
|
||||
<i class="fa fa-cog" aria-hidden="true"></i>
|
||||
<md-button class="wz-menu-button md-icon-button" ng-href="#/settings"
|
||||
ng-class="{'wz-menu-active': menuNavItem === 'settings' }" aria-label="Settings tab">
|
||||
<svg class="euiIcon euiIcon--ghost euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="32" height="32" viewBox="0 0 32 32">
|
||||
<path class="euiIcon__fillSecondary"
|
||||
d="M16 21a5 5 0 1 1 0-10 5 5 0 0 1 0 10zm0-8a3 3 0 1 0 0 6 3 3 0 0 0 0-6z"></path>
|
||||
<path
|
||||
d="M20 32h-8v-4.06a1 1 0 0 0-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 0 0 .2-1 .93.93 0 0 0-.86-.6H0V12h4.06a.92.92 0 0 0 .85-.58.94.94 0 0 0-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0 0 12 4.06V0h8v4.06a1 1 0 0 0 1.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 0 0-.2 1 .93.93 0 0 0 .86.6H32v8h-4.06a.92.92 0 0 0-.85.58.94.94 0 0 0 .19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 0 0-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 0 1 5-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 0 1 2.08-5H30v-4h-2.06a3 3 0 0 1-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 0 1-5-2.08V2h-4v2.06a3 3 0 0 1-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 0 1-2.08 5H2v4h2.06a3 3 0 0 1 2.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 0 1 5 2.08V30z">
|
||||
</path>
|
||||
</svg>
|
||||
</md-button>
|
||||
|
||||
</div>
|
||||
|
||||
</md-toolbar>
|
||||
</md-toolbar>
|
@ -1,372 +1,477 @@
|
||||
<div layout="row" class="md-padding" ng-show="wazuh_table_loading || wazuh_table_resizing">
|
||||
<div class='uil-ring-css'>
|
||||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-style="wazuh_table_resizing && {'visibility': 'hidden', 'height': '0px'}">
|
||||
<div ng-if="customColumns" layout="row" ng-show="!error && !wazuh_table_loading && items.length" class="columns-bar"
|
||||
ng-class="{'columns-bar-active': showColumns}" ng-style="!showColumns && {'margin-bottom': '-35px'}">
|
||||
<div ng-if="showColumns" class="euiCheckbox wz-margin-right-8" ng-repeat="key in originalkeys" ng-click="updateColumns(key)">
|
||||
<input class="euiCheckbox__input" type="checkbox" aria-label="Select all rows" ng-checked="exists(key)">
|
||||
<div class="euiCheckbox__square"></div>
|
||||
<span class="euiCheckbox__label">{{ keyEquivalence[key.key.value || key.key] }}</span>
|
||||
<div layout="row" class="md-padding" ng-show="wazuh_table_loading">
|
||||
<!-- <div class='uil-ring-css'>
|
||||
<div></div>
|
||||
</div>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" style="line-height: 28px;" ng-click="showColumns = !showColumns" tooltip="Columns"><i
|
||||
class="fa fa-fw fa-gear"></i></span>
|
||||
-->
|
||||
<div flex class="euiProgress euiProgress--indeterminate euiProgress--xs euiProgress--primary"></div>
|
||||
</div>
|
||||
<div ng-if="customColumns" layout="row" ng-show="!error && !wazuh_table_loading && items.length" class="columns-bar"
|
||||
ng-class="{'columns-bar-active': showColumns}" ng-style="!showColumns && {'margin-bottom': '-35px'}">
|
||||
<div ng-if="showColumns" class="euiCheckbox wz-margin-right-8" ng-repeat="key in originalkeys"
|
||||
ng-click="updateColumns(key)">
|
||||
<input class="euiCheckbox__input" type="checkbox" aria-label="Select all rows" ng-checked="exists(key)">
|
||||
<div class="euiCheckbox__square"></div>
|
||||
<span class="euiCheckbox__label">{{ keyEquivalence[key.key.value || key.key] }}</span>
|
||||
</div>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" style="line-height: 28px;" ng-click="showColumns = !showColumns" tooltip="Columns"><i
|
||||
class="fa fa-fw fa-gear"></i></span>
|
||||
</div>
|
||||
|
||||
<div ng-if="!wazuh_table_loading && !isPolicyMonitoring() && !isSyscheck()" ng-show="!error && items.length">
|
||||
<table class="table table-striped table-condensed table-hover no-margin-bottom" ng-class="customColumns ? 'table-resizable' : ''"
|
||||
style="table-layout: fixed !important" id="table{{scapepath}}">
|
||||
<thead class="wz-text-bold">
|
||||
<th ng-repeat="key in keys" class="wz-text-left" ng-style="key.width && {'width':key.width}">
|
||||
<span ng-class="{ 'cursor-pointer' : !key.nosortable}" ng-click="!key.nosortable && sort(key)">
|
||||
{{ path === '/agents/groups' && (key.value || key) === 'count' ? 'Agents' :
|
||||
<div ng-if="!wazuh_table_loading && !isPolicyMonitoring() && !isSyscheck()" ng-show="!error && items.length">
|
||||
<table class="table table-striped table-condensed table-hover no-margin-bottom"
|
||||
ng-class="customColumns ? 'table-resizable' : ''" style="table-layout: fixed !important" id="wz_table">
|
||||
<thead class="wz-text-bold">
|
||||
<th ng-repeat="key in keys" class="wz-text-left" ng-style="key.width && {'width':key.width}">
|
||||
<span ng-class="{ 'cursor-pointer' : !key.nosortable}" ng-click="!key.nosortable && sort(key)">
|
||||
{{ path === '/agents/groups' && (key.value || key) === 'count' ? 'Agents' :
|
||||
keyEquivalence[key.value ||
|
||||
key] || key.value || key }}
|
||||
<i ng-if="!key.nosortable" class="fa wz-theader-sort-icon" ng-class="sortValue === (key.value || key) ? (sortDir ? 'fa-sort-asc' : 'fa-sort-desc') : 'fa-sort'"
|
||||
aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th ng-if="(path === '/agents' || (path === '/agents/groups' && adminMode) || (isLookingGroup() && adminMode)
|
||||
|| path === '/rules/files' || path === '/decoders/files' || path === '/lists/files')"
|
||||
class="wz-text-left" ng-class="{'col-lg-2': path !== '/agents', 'col-lg-1': path === '/agents'}">Actions</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<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" id="td-{{$parent.$index}}-{{$index}}" ng-mouseover="showTooltip($parent.$index, $index, item)">
|
||||
<div class="wz-text-truncatable">
|
||||
<span>
|
||||
{{
|
||||
<i ng-if="!key.nosortable" class="fa wz-theader-sort-icon"
|
||||
ng-class="sortValue === (key.value || key) ? (sortDir ? 'fa-sort-asc' : 'fa-sort-desc') : 'fa-sort'"
|
||||
aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
<th ng-if="(path === '/agents' || (path === '/agents/groups' && adminMode) || (isLookingGroup() && adminMode)
|
||||
|| path === '/rules/files' || path === '/decoders/files' || path === '/lists/files')"
|
||||
class="wz-text-left" ng-class="{'col-lg-2': path !== '/agents', 'col-lg-1': path === '/agents'}">Actions
|
||||
</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<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" id="td-{{$parent.$index}}-{{$index}}"
|
||||
ng-mouseover="showTooltip($parent.$index, $index, item)">
|
||||
<div class="wz-text-truncatable">
|
||||
<span>
|
||||
{{
|
||||
parseValue(key,item)
|
||||
}}
|
||||
</span>
|
||||
<md-tooltip ng-show="item.showTooltip[$index]" md-direction="bottom" class="wz-tooltip">
|
||||
{{ parseValue(key,item) }}
|
||||
</md-tooltip>
|
||||
</span>
|
||||
<md-tooltip ng-show="item.showTooltip[$index]" md-direction="bottom" class="wz-tooltip">
|
||||
{{ parseValue(key,item) }}
|
||||
</md-tooltip>
|
||||
</div>
|
||||
</td>
|
||||
<td ng-if="path === '/agents'" ng-click="$event.stopPropagation()" class="cursor-default action-btn-td">
|
||||
<span ng-click="clickAction(item, 'discover'); $event.stopPropagation()"
|
||||
class="wz-margin-left-8 cursor-pointer" tooltip="Open Discover panel for this agent"
|
||||
tooltip-placement="left" aria-hidden="true">
|
||||
<svg class="euiIcon euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="32" height="32" viewBox="0 0 32 32">
|
||||
<path class="euiIcon__fillSecondary"
|
||||
d="M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z">
|
||||
</path>
|
||||
<path
|
||||
d="M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0 0 16 0zm1 29.95V28h-2v1.95A14 14 0 0 1 2.05 17H4v-2H2.05A14 14 0 0 1 15 2.05V4h2V2.05A14 14 0 0 1 29.95 15H28v2h1.95A14 14 0 0 1 17 29.95z">
|
||||
</path>
|
||||
</svg>
|
||||
</span>
|
||||
<span ng-click="clickAction(item, 'configuration'); $event.stopPropagation()" class="cursor-pointer"
|
||||
tooltip="Open configuration for this agent" tooltip-placement="left" aria-hidden="true">
|
||||
|
||||
<svg class="euiIcon euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M6.918 9.746l4.537 4.537a2 2 0 1 0 2.828-2.829l-3.157-3.156a.5.5 0 0 1 .708-.708l3.156 3.157a3 3 0 1 1-4.243 4.243l-4.949-4.95a5.001 5.001 0 0 1-5.22-7.106.5.5 0 0 1 .805-.138L3.676 5.09a1 1 0 1 0 1.415-1.414L2.797 1.382a.5.5 0 0 1 .138-.805 5.001 5.001 0 1 1 3.983 9.169zM1.226 4.054a4.002 4.002 0 0 0 6.693 3.865 4 4 0 0 0-3.865-6.693l1.744 1.743a2 2 0 1 1-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 1 1 1.414-1.414 1 1 0 0 1-1.414 1.414z">
|
||||
</path>
|
||||
</svg>
|
||||
</span>
|
||||
</td>
|
||||
<td ng-if="path === '/agents/groups' && adminMode" ng-click="$event.stopPropagation()"
|
||||
class="cursor-default action-btn-td">
|
||||
<span ng-if="removingGroup !== item.name && item.name !== 'default'"
|
||||
ng-click="showConfirmRemoveGroup($event, item); $event.stopPropagation()"
|
||||
ng-class="{'wz-margin-left-8': item.name !== 'default'}" class="cursor-pointer"
|
||||
tooltip="Remove this group" tooltip-placement="left" aria-hidden="true">
|
||||
<svg class="euiIcon euiIcon--medium euiButton__icon" focusable="false" 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="trash-a"
|
||||
d="M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#trash-a"></use>
|
||||
</svg></span>
|
||||
<span ng-if="removingGroup !== item.name" ng-click="editGroup(item); $event.stopPropagation()"
|
||||
tooltip="Edit this group configuration" tooltip-placement="left"
|
||||
ng-class="{'wz-margin-left-8': item.name === 'default'}">
|
||||
<svg class="cursor-pointer euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false"
|
||||
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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
|
||||
<div ng-if="removingGroup === item.name && item.name !== 'default'" class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
<span class="font-size-12 wz-padding-left-8">Group <b>{{item.name}}</b> will be
|
||||
removed</span>
|
||||
</div>
|
||||
</td>
|
||||
<td ng-if="path === '/agents'" ng-click="$event.stopPropagation()" class="cursor-default action-btn-td">
|
||||
<i ng-click="clickAction(item, 'discover'); $event.stopPropagation()" class="fa fa-fw fa-compass cursor-pointer"
|
||||
tooltip="Open Discover panel for this agent" tooltip-placement="left" aria-hidden="true"></i>
|
||||
<i ng-click="clickAction(item, 'configuration'); $event.stopPropagation()" class="fa fa-fw fa-wrench cursor-pointer"
|
||||
tooltip="Open configuration for this agent" tooltip-placement="left" aria-hidden="true"></i>
|
||||
</td>
|
||||
<td ng-if="path === '/agents/groups' && adminMode" ng-click="$event.stopPropagation()" class="cursor-default action-btn-td">
|
||||
<i ng-if="removingGroup !== item.name && item.name !== 'default'" ng-click="showConfirmRemoveGroup($event, item); $event.stopPropagation()"
|
||||
class="fa fa-fw fa-trash cursor-pointer" tooltip="Remove this group" tooltip-placement="left"
|
||||
aria-hidden="true"></i>
|
||||
<i ng-if="removingGroup !== item.name" ng-click="editGroup(item); $event.stopPropagation()"
|
||||
class="fa fa-fw fa-pencil cursor-pointer" tooltip="Edit this group configuration"
|
||||
tooltip-placement="left" aria-hidden="true"></i>
|
||||
<div ng-if="removingGroup === item.name && item.name !== 'default'" class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
<span class="font-size-12 wz-padding-left-8">Group <b>{{item.name}}</b> will be
|
||||
removed</span>
|
||||
</div>
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveGroup()"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button" ng-click="confirmRemoveGroup(item.name)"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveGroup()"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button"
|
||||
ng-click="confirmRemoveGroup(item.name)"><i aria-hidden='true'
|
||||
class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
</td>
|
||||
<td ng-if="isLookingGroup() && adminMode" ng-click="$event.stopPropagation()" class="cursor-default action-btn-td">
|
||||
<i ng-if="removingAgent !== item.id && adminMode" ng-click="showConfirmRemoveAgentFromGroup($event, item); $event.stopPropagation()"
|
||||
class="fa fa-fw fa-trash cursor-pointer" tooltip="Remove this agent from the group"
|
||||
tooltip-placement="left" aria-hidden="true"></i>
|
||||
<div ng-if="removingAgent === item.id" class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
<span class="font-size-12 wz-padding-left-8">Agent <b>{{item.id}}</b> will be removed
|
||||
from
|
||||
this group</span>
|
||||
</div>
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveAgent()"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button" ng-click="confirmRemoveAgent(item.id)"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td ng-if="isLookingGroup() && adminMode" ng-click="$event.stopPropagation()"
|
||||
class="cursor-default action-btn-td">
|
||||
<span ng-if="removingAgent !== item.id && adminMode"
|
||||
ng-click="showConfirmRemoveAgentFromGroup($event, item); $event.stopPropagation()"
|
||||
class="wz-margin-left-8 cursor-pointer" tooltip="Remove this agent from the group"
|
||||
tooltip-placement="left" aria-hidden="true">
|
||||
<svg class="euiIcon euiIcon--medium euiButton__icon" focusable="false" 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="trash-a"
|
||||
d="M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#trash-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
<div ng-if="removingAgent === item.id" class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
<span class="font-size-12 wz-padding-left-8">Agent <b>{{item.id}}</b> will be removed from
|
||||
this group</span>
|
||||
</div>
|
||||
</td>
|
||||
<td ng-if="path === '/rules/files' || path === '/decoders/files' || path === '/lists/files'"
|
||||
ng-click="$event.stopPropagation()" class="cursor-default action-btn-td">
|
||||
<i ng-if="((item.name && removingFile !== item.name) || (item.file && removingFile !== item.file)) && adminMode && path !== '/lists/files'"
|
||||
ng-click="editFile(item, path); $event.stopPropagation()" class="fa fa-fw fa-pencil cursor-pointer"
|
||||
tooltip="Edit this file" tooltip-placement="left" aria-hidden="true"></i>
|
||||
<i ng-if="((item.name && removingFile !== item.name) || (item.file && removingFile !== item.file)) && adminMode"
|
||||
ng-click="showConfirmRemoveFile($event, item, path); $event.stopPropagation()" class="fa fa-fw fa-trash cursor-pointer"
|
||||
tooltip="Delete this file" tooltip-placement="right" aria-hidden="true"></i>
|
||||
<div ng-if="(item.name && removingFile === item.name) || (item.file && removingFile === item.file)"
|
||||
class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
<span class="font-size-12 wz-padding-left-8">{{path === '/lists/files' ? 'List'
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveAgent()"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button" ng-click="confirmRemoveAgent(item.id)">
|
||||
<i aria-hidden='true' class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td ng-if="path === '/rules/files' || path === '/decoders/files' || path === '/lists/files'"
|
||||
ng-click="$event.stopPropagation()" class="cursor-default action-btn-td">
|
||||
<span
|
||||
ng-if="((item.name && removingFile !== item.name) || (item.file && removingFile !== item.file)) && adminMode && path !== '/lists/files'"
|
||||
ng-click="editFile(item, path); $event.stopPropagation()"
|
||||
class="wz-margin-left-8 cursor-pointer" tooltip="Edit this file" tooltip-placement="left"
|
||||
aria-hidden="true">
|
||||
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false" 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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
<span
|
||||
ng-if="((item.name && removingFile !== item.name) || (item.file && removingFile !== item.file)) && adminMode"
|
||||
ng-click="showConfirmRemoveFile($event, item, path); $event.stopPropagation()"
|
||||
class="cursor-pointer" ng-class="{'wz-margin-left-8': path === '/lists/files'}"
|
||||
tooltip="Delete this file" tooltip-placement="right" aria-hidden="true">
|
||||
<svg class="euiIcon euiIcon--medium euiButton__icon" focusable="false" 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="trash-a"
|
||||
d="M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#trash-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
<div ng-if="(item.name && removingFile === item.name) || (item.file && removingFile === item.file)"
|
||||
class="confirmEmbedBubble">
|
||||
<div layout="row">
|
||||
<span class="font-size-12 wz-padding-left-8">{{path === '/lists/files' ? 'List'
|
||||
: 'File'}} <b>{{path === '/lists/files' ? item.name
|
||||
: item.file}}</b> will be deleted</span>
|
||||
</div>
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveFile()"><i aria-hidden='true'
|
||||
class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button" ng-click="confirmRemoveFile(item, path)"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<td colspan="{{ (path === '/agents' || (path === '/agents/groups' && adminMode) || (isLookingGroup() && adminMode) ||
|
||||
path === '/rules/files' || path === '/decoders/files' || path === '/lists/files') ? keys.length + 1 : keys.length}}">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items ({{time | number:
|
||||
2}}
|
||||
seconds)</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage" class="md-padding">
|
||||
<a href ng-click="prevPage()">« Prev</a>
|
||||
</li>
|
||||
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) " ng-class="{'wz-text-active': n == currentPage}"
|
||||
ng-click="setPage()" class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-show="currentPage < pagedItems.length - 1" class="md-padding">
|
||||
<a href ng-click="nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn" type="button" ng-click="cancelRemoveFile()"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-close'></i> Cancel</md-button>
|
||||
<md-button class="agreeBtn wz-button" type="button"
|
||||
ng-click="confirmRemoveFile(item, path)"><i aria-hidden='true'
|
||||
class='fa fa-fw fa-check'></i> Confirm</md-button>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<td
|
||||
colspan="{{ (path === '/agents' || (path === '/agents/groups' && adminMode) || (isLookingGroup() && adminMode) ||
|
||||
path === '/rules/files' || path === '/decoders/files' || path === '/lists/files') ? keys.length + 1 : keys.length}}">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items ({{time | number: 2}}
|
||||
seconds)</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage" class="md-padding">
|
||||
<a href ng-click="prevPage()">« Prev</a>
|
||||
</li>
|
||||
|
||||
<div ng-if="!wazuh_table_loading && isPolicyMonitoring()" ng-show="!error && items.length">
|
||||
<table class="table table-striped table-striped-duo table-condensed table-hover no-margin-bottom" ng-class="customColumns ? 'table-resizable' : ''"
|
||||
style="table-layout: fixed !important" id="table{{scapepath}}">
|
||||
<thead class="wz-text-bold">
|
||||
<th ng-repeat="key in keys" class="wz-text-left" ng-style="key.width && {'width':key.width}">
|
||||
<span ng-class="{ 'cursor-pointer' : !key.nosortable }" ng-click="!key.nosortable && sort(key)">
|
||||
{{ keyEquivalence[key.value || key] || key.value || key }}
|
||||
<i ng-if="!key.nosortable" class="fa wz-theader-sort-icon" ng-class="sortValue === (key.value || key) ? (sortDir ? 'fa-sort-asc' : 'fa-sort-desc') : 'fa-sort'"
|
||||
aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="wz-word-wrap cursor-pointer" ng-repeat-start="item in pagedItems[currentPage] | filter:{item:'!'}"
|
||||
ng-click="expandTableRow(item)" ng-class="{'selected': item.expanded}">
|
||||
<td ng-repeat="key in keys" id="td-{{$parent.$index}}-{{$index}}" ng-mouseover="showTooltip($parent.$index, $index, item)">
|
||||
<div class="wz-text-truncatable">
|
||||
<span>
|
||||
<span ng-show="key === 'result'" class="no-wrap">
|
||||
<p class="round status little" ng-class="(item.result === 'passed') ? 'teal' : 'red'">
|
||||
</p>
|
||||
</span>
|
||||
{{
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
|
||||
ng-class="{'wz-text-active': n == currentPage}" ng-click="setPage()" class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-show="currentPage < pagedItems.length - 1" class="md-padding">
|
||||
<a href ng-click="nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div ng-if="!wazuh_table_loading && isPolicyMonitoring()" ng-show="!error && items.length">
|
||||
<table class="table table-striped table-striped-duo table-condensed table-hover no-margin-bottom"
|
||||
ng-class="customColumns ? 'table-resizable' : ''" style="table-layout: fixed !important" id="wz_table">
|
||||
<thead class="wz-text-bold">
|
||||
<th ng-repeat="key in keys" class="wz-text-left" ng-style="key.width && {'width':key.width}">
|
||||
<span ng-class="{ 'cursor-pointer' : !key.nosortable }" ng-click="!key.nosortable && sort(key)">
|
||||
{{ keyEquivalence[key.value || key] || key.value || key }}
|
||||
<i ng-if="!key.nosortable" class="fa wz-theader-sort-icon"
|
||||
ng-class="sortValue === (key.value || key) ? (sortDir ? 'fa-sort-asc' : 'fa-sort-desc') : 'fa-sort'"
|
||||
aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="wz-word-wrap cursor-pointer"
|
||||
ng-repeat-start="item in pagedItems[currentPage] | filter:{item:'!'}" ng-click="expandTableRow(item)"
|
||||
ng-class="{'selected': item.expanded}">
|
||||
<td ng-repeat="key in keys" id="td-{{$parent.$index}}-{{$index}}"
|
||||
ng-mouseover="showTooltip($parent.$index, $index, item)">
|
||||
<div class="wz-text-truncatable">
|
||||
<span>
|
||||
<span ng-show="key === 'result'" class="no-wrap">
|
||||
<p class="round status little" ng-class="(item.result === 'passed') ? 'teal' : 'red'">
|
||||
</p>
|
||||
</span>
|
||||
{{
|
||||
parseValue(key,item)
|
||||
}}
|
||||
</span>
|
||||
<md-tooltip ng-show="item.showTooltip[$index]" md-direction="bottom" class="wz-tooltip">
|
||||
{{ parseValue(key,item) }}
|
||||
</md-tooltip>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-if="item.rationale || item.remediation || item.directory || (item.compliance && item.compliance.length)"
|
||||
class="wz-word-wrap cursor-pointer selected" ng-show="item.expanded" ng-repeat-end="" ng-click="expandTableRow(item)">
|
||||
<td colspan="{{keys.length}}" style="border-top: none">
|
||||
<div layout="row" layout-padding="" class="layout-padding layout-row">
|
||||
<md-card flex="" class="wz-md-card wz-padding-top-0 wz-padding-bottom-0 wz-no-margin _md flex">
|
||||
<md-card-content>
|
||||
<div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.rationale">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding" style="font-size: 1.15rem;">Rationale</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>{{item.rationale}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.remediation">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding" style="font-size: 1.15rem;">Remediation</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>{{item.remediation}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.directory">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding" style="font-size: 1.15rem;">Path(s)</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>{{item.directory}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.compliance && item.compliance.length">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding" style="font-size: 1.15rem;">Compliance</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p><span class="wz-padding-right-8" ng-repeat="c in item.compliance">{{c.key}}/{{c.value}}</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<td colspan="{{keys.length}}">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items ({{time | number:
|
||||
2}}
|
||||
seconds)</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage" class="md-padding">
|
||||
<a href ng-click="prevPage()">« Prev</a>
|
||||
</li>
|
||||
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) " ng-class="{'wz-text-active': n == currentPage}"
|
||||
ng-click="setPage()" class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-show="currentPage < pagedItems.length - 1" class="md-padding">
|
||||
<a href ng-click="nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
</span>
|
||||
<md-tooltip ng-show="item.showTooltip[$index]" md-direction="bottom" class="wz-tooltip">
|
||||
{{ parseValue(key,item) }}
|
||||
</md-tooltip>
|
||||
</div>
|
||||
</td>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</tr>
|
||||
<tr ng-if="item.rationale || item.remediation || item.directory || (item.compliance && item.compliance.length)"
|
||||
class="wz-word-wrap cursor-pointer selected" ng-show="item.expanded" ng-repeat-end=""
|
||||
ng-click="expandTableRow(item)">
|
||||
<td colspan="{{keys.length}}" style="border-top: none">
|
||||
<div layout="row" layout-padding="" class="layout-padding layout-row">
|
||||
<md-card flex="" class="wz-md-card wz-padding-top-0 wz-padding-bottom-0 wz-no-margin _md flex">
|
||||
<md-card-content>
|
||||
<div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.rationale">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding"
|
||||
style="font-size: 1.15rem;">Rationale</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>{{item.rationale}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.remediation">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding"
|
||||
style="font-size: 1.15rem;">Remediation</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>{{item.remediation}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero" ng-if="item.directory">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding"
|
||||
style="font-size: 1.15rem;">Path(s)</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>{{item.directory}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero"
|
||||
ng-if="item.compliance && item.compliance.length">
|
||||
<div class="euiStat euiStat--leftAligned">
|
||||
<p class="euiTitle euiTitle--small euiStat__title ng-binding"
|
||||
style="font-size: 1.15rem;">Compliance</p>
|
||||
<div class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p><span class="wz-padding-right-8"
|
||||
ng-repeat="c in item.compliance">{{c.key}}/{{c.value}}</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="column" class="wz-margin-bottom-10"></div>
|
||||
</div>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<td colspan="{{keys.length}}">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items ({{time | number: 2}}
|
||||
seconds)</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage" class="md-padding">
|
||||
<a href ng-click="prevPage()">« Prev</a>
|
||||
</li>
|
||||
|
||||
<div ng-if="!wazuh_table_loading && isSyscheck()" ng-show="!error && items.length">
|
||||
<table class="table table-striped table-striped-duo table-condensed table-hover no-margin-bottom" ng-class="customColumns ? 'table-resizable' : ''"
|
||||
style="table-layout: fixed !important" id="table{{scapepath}}">
|
||||
<thead class="wz-text-bold">
|
||||
<th ng-repeat="key in keys" class="wz-text-left" ng-style="key.width && {'width':key.width}">
|
||||
<span ng-class="{ 'cursor-pointer' : !key.nosortable }" ng-click="!key.nosortable && sort(key)">{{
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
|
||||
ng-class="{'wz-text-active': n == currentPage}" ng-click="setPage()" class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-show="currentPage < pagedItems.length - 1" class="md-padding">
|
||||
<a href ng-click="nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div ng-if="!wazuh_table_loading && isSyscheck()" ng-show="!error && items.length">
|
||||
<table class="table table-striped table-striped-duo table-condensed table-hover no-margin-bottom"
|
||||
ng-class="customColumns ? 'table-resizable' : ''" style="table-layout: fixed !important" id="wz_table">
|
||||
<thead class="wz-text-bold">
|
||||
<th ng-repeat="key in keys" class="wz-text-left" ng-style="key.width && {'width':key.width}">
|
||||
<span ng-class="{ 'cursor-pointer' : !key.nosortable }" ng-click="!key.nosortable && sort(key)">{{
|
||||
keyEquivalence[key.value || key] || key.value || key }}
|
||||
<i ng-if="!key.nosortable" class="fa wz-theader-sort-icon" ng-class="sortValue === (key.value || key) ? (sortDir ? 'fa-sort-asc' : 'fa-sort-desc') : 'fa-sort'"
|
||||
aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="wz-word-wrap cursor-pointer" ng-repeat-start="item in pagedItems[currentPage] | filter:{item:'!'}"
|
||||
ng-click="expandTableRow(item)" ng-class="{'selected': item.expanded}">
|
||||
<td ng-repeat="key in keys" id="td-{{$parent.$index}}-{{$index}}" ng-mouseover="showTooltip($parent.$index, $index, item)">
|
||||
<div class="wz-text-truncatable">
|
||||
<span>
|
||||
{{
|
||||
<i ng-if="!key.nosortable" class="fa wz-theader-sort-icon"
|
||||
ng-class="sortValue === (key.value || key) ? (sortDir ? 'fa-sort-asc' : 'fa-sort-desc') : 'fa-sort'"
|
||||
aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="wz-word-wrap cursor-pointer"
|
||||
ng-repeat-start="item in pagedItems[currentPage] | filter:{item:'!'}" ng-click="expandTableRow(item)"
|
||||
ng-class="{'selected': item.expanded}">
|
||||
<td ng-repeat="key in keys" id="td-{{$parent.$index}}-{{$index}}"
|
||||
ng-mouseover="showTooltip($parent.$index, $index, item)">
|
||||
<div class="wz-text-truncatable">
|
||||
<span>
|
||||
{{
|
||||
parseValue(key,item)
|
||||
}}
|
||||
</span>
|
||||
<md-tooltip ng-show="item.showTooltip[$index]" md-direction="bottom" class="wz-tooltip">
|
||||
{{ parseValue(key,item) }}
|
||||
</md-tooltip>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="wz-word-wrap cursor-pointer selected" ng-show="item.expanded" ng-repeat-end="" ng-click="expandTableRow(item)">
|
||||
<td colspan="{{keys.length}}" style="border-top: none">
|
||||
<div layout="row" layout-padding="" class="layout-padding layout-row" ng-if="item.expanded">
|
||||
<md-card flex="" class="wz-md-card wz-padding-top-0 wz-padding-bottom-0 wz-no-margin _md flex">
|
||||
<md-card-content>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<table class="table table-striped table-condensed">
|
||||
<tbody>
|
||||
<tr ng-repeat="(key, value) in item" ng-if="key !== 'expanded' && key !== 'showTooltip'"
|
||||
ng-show="!isWindows() || (key !== 'inode' && key !== 'gid' && key !== 'gname')"
|
||||
class="no-duo">
|
||||
<td class="wz-word-break-rule">{{key}}</td>
|
||||
<td>
|
||||
<span class="wz-text-right color-grey">{{value}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<td colspan="{{keys.length}}">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items ({{time | number:
|
||||
2}}
|
||||
seconds)</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage" class="md-padding">
|
||||
<a href ng-click="prevPage()">« Prev</a>
|
||||
</li>
|
||||
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) " ng-class="{'wz-text-active': n == currentPage}"
|
||||
ng-click="setPage()" class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-show="currentPage < pagedItems.length - 1" class="md-padding">
|
||||
<a href ng-click="nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
</span>
|
||||
<md-tooltip ng-show="item.showTooltip[$index]" md-direction="bottom" class="wz-tooltip">
|
||||
{{ parseValue(key,item) }}
|
||||
</md-tooltip>
|
||||
</div>
|
||||
</td>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</tr>
|
||||
<tr class="wz-word-wrap cursor-pointer selected" ng-show="item.expanded" ng-repeat-end=""
|
||||
ng-click="expandTableRow(item)">
|
||||
<td colspan="{{keys.length}}" style="border-top: none">
|
||||
<div layout="row" layout-padding="" class="layout-padding layout-row" ng-if="item.expanded">
|
||||
<md-card flex="" class="wz-md-card wz-padding-top-0 wz-padding-bottom-0 wz-no-margin _md flex">
|
||||
<md-card-content>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<table class="table table-striped table-condensed">
|
||||
<tbody>
|
||||
<tr ng-repeat="(key, value) in item"
|
||||
ng-if="key !== 'expanded' && key !== 'showTooltip'"
|
||||
ng-show="!isWindows() || (key !== 'inode' && key !== 'gid' && key !== 'gname')"
|
||||
class="no-duo">
|
||||
<td class="wz-word-break-rule">{{key}}</td>
|
||||
<td>
|
||||
<span class="wz-text-right color-grey">{{value}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div layout="row" ng-if="!error && !wazuh_table_loading && !totalItems">
|
||||
<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">{{customEmptyResults}}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<td colspan="{{keys.length}}">
|
||||
<span ng-show="!wazuh_table_loading" class="color-grey">{{ totalItems }} items ({{time | number: 2}}
|
||||
seconds)</span>
|
||||
<div ng-show="items.length >= itemsPerPage" class="pagination pull-right" style="margin:0 !important">
|
||||
<ul layout="row">
|
||||
<li ng-show="currentPage" class="md-padding">
|
||||
<a href ng-click="prevPage()">« Prev</a>
|
||||
</li>
|
||||
|
||||
<li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
|
||||
ng-class="{'wz-text-active': n == currentPage}" ng-click="setPage()" class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-show="currentPage < pagedItems.length - 1" class="md-padding">
|
||||
<a href ng-click="nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div layout="row" ng-if="!error && !wazuh_table_loading && !totalItems">
|
||||
<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">{{customEmptyResults}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div layout="row" ng-if="error" class="wz-margin-bottom-45">
|
||||
<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">{{error}}</span>
|
||||
</div>
|
||||
<div layout="row" ng-if="error" class="wz-margin-bottom-45">
|
||||
<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">{{error}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div layout="row" ng-if="!wazuh_table_loading && !totalItems" class="wz-margin-top-10">
|
||||
<span class="color-grey">0 items ({{time | number: 2}} seconds)</span>
|
||||
</div>
|
||||
<div layout="row" ng-if="!wazuh_table_loading && !totalItems" class="wz-margin-top-10">
|
||||
<span class="color-grey">0 items ({{time | number: 2}} seconds)</span>
|
||||
</div>
|
@ -26,7 +26,7 @@
|
||||
<input id='wz-search-filter-bar-input' class='wz-search-filter-bar-input input' type='text' ng-model='newTag'
|
||||
ng-focus='showAutocomplete(true)' ng-blur='showAutocomplete(false)' placeholder='Add filter or search'
|
||||
ng-keyup='!autocompleteEnter && $event.keyCode == 13 ? addTag(true) : addSearchKey($event)' />
|
||||
<a class='wz-tag-remove-button wz-padding-top-5' ng-click='removeAll()'><i class="fa fa-trash" aria-hidden="true"></i></a>
|
||||
<a class='wz-tag-remove-button wz-padding-top-5' ng-click='removeAll()'><i class="fa fa-trash-o" aria-hidden="true"></i></a>
|
||||
<div id='wz-search-filter-bar-autocomplete' class='wz-search-filter-bar-autocomplete' ng-show='isAutocomplete && autocompleteContent.list.length > 0'>
|
||||
<p><b>{{autocompleteContent.title}}</b></p>
|
||||
<ul id='wz-search-filter-bar-autocomplete-list'>
|
||||
|
@ -14,4 +14,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -47,60 +47,70 @@
|
||||
tooltip-placement="right" ng-click="ctrl.showAgent(ctrl.mostActiveAgent)">{{ctrl.mostActiveAgent.name}}</p>
|
||||
<p ng-show="ctrl.mostActiveAgent.id === '000'" class="wz-text-right" tooltip-placement="right">{{ctrl.mostActiveAgent.name}}</p>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="!registerNewAgent">
|
||||
<div layout="row" class="md-padding">
|
||||
<wz-tag-filter flex path="'/agents'" query-fn="ctrl.query(q, search)" fields-model="ctrl.searchBarModel"></wz-tag-filter>
|
||||
<md-button class="agents-prev-btn btn btn-info" style="height: 48px;margin: 0px 0 0 8px!important;"
|
||||
ng-click="ctrl.reloadList()"><i class="fa fa-fw fa-refresh"></i> Refresh</md-button>
|
||||
</div>
|
||||
<div layout="row">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-actions ng-if="adminMode" layout="row" layout-align="end center" class="wz-card-actions wz-card-actions-top">
|
||||
<a ng-click="ctrl.registerNewAgent(true)">Register new agent <i aria-hidden="true" class="fa fa-plus"></i></a>
|
||||
<span flex></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wz-padding-bottom-30">
|
||||
<wz-table custom-columns="true" flex path="'/agents'" keys="[{value: 'id', width: '75px'},'name','ip','status','group','os.name','os.version','version', 'dateAdd', 'lastKeepAlive']"
|
||||
allow-click="true" row-sizes="[17,15,13]"></wz-table>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="ctrl.downloadCsv()">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex="50" class="wz-md-card">
|
||||
<md-card-content>
|
||||
<span class="wz-headline-title">Top</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<p flex="35" class="manager-status-subtitle">Last registered agent</p>
|
||||
<p ng-if="ctrl.lastAgent.id !== '000'" class="wz-text-right wz-text-link"
|
||||
tooltip="Click to open this agent" tooltip-placement="right"
|
||||
ng-click="ctrl.showAgent(ctrl.lastAgent)">{{ctrl.lastAgent.name}}</p>
|
||||
<p ng-if="ctrl.lastAgent.id === '000'" class="wz-text-right" tooltip-placement="right">
|
||||
{{ctrl.lastAgent.name}}
|
||||
(manager)</p>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<p flex="35" class="manager-status-subtitle">Higher activity</p>
|
||||
<p ng-show="ctrl.mostActiveAgent.id !== '000'" class="wz-text-right wz-text-link"
|
||||
tooltip="Click to open this agent" tooltip-placement="right"
|
||||
ng-click="ctrl.showAgent(ctrl.mostActiveAgent)">{{ctrl.mostActiveAgent.name}}</p>
|
||||
<p ng-show="ctrl.mostActiveAgent.id === '000'" class="wz-text-right" tooltip-placement="right">
|
||||
{{ctrl.mostActiveAgent.name}}</p>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="!wazuh_table_loading && showNoAgents && !registerNewAgent">
|
||||
<div class="md-padding text-center">
|
||||
<img class="wz-margin-top-17" src="/plugins/wazuh/img/agent.png" style="width: 10%; max-width: 175px;">
|
||||
<h3 class="euiTitle wzEuiTitle wz-margin-bottom-10 wz-margin-top-16">There are no registered agents yet</h3>
|
||||
<div ng-if="adminMode" class="euiText euiText--small euiStat__description wz-text-gray">
|
||||
<p>You can start registering agents by following these steps!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div layout="row" class="md-padding">
|
||||
<wz-tag-filter flex path="'/agents'" query-fn="ctrl.query(q, search)" fields-model="ctrl.searchBarModel">
|
||||
</wz-tag-filter>
|
||||
<md-button class="agents-prev-btn btn btn-info" style="height: 48px;margin: 0px 0 0 8px!important;"
|
||||
ng-click="ctrl.reloadList()"><svg class="euiIcon euiIcon--medium" focusable="false"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M11.228 2.942a.5.5 0 1 1-.538.842A5 5 0 1 0 13 8a.5.5 0 1 1 1 0 6 6 0 1 1-2.772-5.058zM14 1.5v3A1.5 1.5 0 0 1 12.5 6h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 1 1 1 0z">
|
||||
</path>
|
||||
</svg> Refresh</md-button>
|
||||
</div>
|
||||
<div class="col-md-12 wz-margin-bottom-25" ng-show="!wazuh_table_loading && (showNoAgents || registerNewAgent)">
|
||||
<div id="content" layout="row" class="wz-padding-bottom-14" ng-show="registerNewAgent">
|
||||
<md-button class="md-icon-button" style="margin: 5px!important;" aria-label="Back to list" tooltip="Back"
|
||||
tooltip-placement="bottom" ng-click="ctrl.registerNewAgent(false)"><i class="fa fa-fw fa-arrow-left"
|
||||
aria-hidden="true"></i></md-button>
|
||||
<h1 class="font-size-18 wz-margin-top-16"> Register new agent</h1>
|
||||
</div>
|
||||
<div ng-if="adminMode" ng-class="registerNewAgent ? ['registerNewAgent', 'md-padding-h'] : ''">
|
||||
<wz-register-agents reload="ctrl.reloadList()"></wz-register-agents>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="!wazuh_table_loading && showNoAgents && !registerNewAgent">
|
||||
<div class="md-padding text-center wz-margin-top-10">
|
||||
<a target="_blank" ng-href="https://documentation.wazuh.com/current/user-manual/registering/index.html">
|
||||
<span ng-if="adminMode">Or take a look at the other methods of registering agents in our documentation</span>
|
||||
<span ng-if="!adminMode">Take a look at how you can register agents in our documentation</span>
|
||||
<i class="fa fa-info-circle" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
|
||||
<div layout="row">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-content>
|
||||
<div layout="row">
|
||||
<wz-table custom-columns="true" flex path="'/agents'"
|
||||
keys="[{value: 'id', width: '75px'},'name','ip','status','group','os.name','os.version','version', 'dateAdd', 'lastKeepAlive']"
|
||||
allow-click="true" row-sizes="[17,15,13]"></wz-table>
|
||||
</div>
|
||||
<div layout="row" layout-align="end center">
|
||||
<button type="button" ng-click="ctrl.downloadCsv()"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false"
|
||||
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
|
||||
viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
</div>
|
@ -146,9 +146,22 @@
|
||||
</wz-table>
|
||||
</div>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-registry.csv', [{name:'type',value:'registry'}])">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<md-card-actions layout="row" layout-align="end center"
|
||||
class="layout-align-end-center layout-row">
|
||||
|
||||
<button type="button"
|
||||
ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-registry.csv', [{name:'type',value:'registry'}])"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
@ -171,9 +184,21 @@
|
||||
</wz-table>
|
||||
</div>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv', [{name:'type',value:'file'}])">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<md-card-actions layout="row" layout-align="end center"
|
||||
class="layout-align-end-center layout-row">
|
||||
<button type="button"
|
||||
ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv', [{name:'type',value:'file'}])"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
@ -181,8 +206,6 @@
|
||||
<div layout="row" class="wz-padding-top-0" ng-if="agent && agent.os && agent.os.platform !== 'windows'">
|
||||
<md-card flex="" class="wz-md-card _md flex">
|
||||
<md-card-content class="wz-padding-bottom-30">
|
||||
<span class="wz-headline-title"><i class="fa fa-fw fa-file-o"></i> Files</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-margin-top-10 wz-margin-bottom-25">
|
||||
<input placeholder="Filter files..." ng-model="filesSearch" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
|
||||
aria-invalid="false" wz-enter="searchSyscheckFile(filesSearch)">
|
||||
@ -196,9 +219,21 @@
|
||||
</wz-table>
|
||||
</div>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv')">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<md-card-actions layout="row" layout-align="end center"
|
||||
class="layout-align-end-center layout-row">
|
||||
|
||||
<button type="button" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv')"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
|
@ -109,7 +109,7 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div layout="row" class="wz-padding-top-0" ng-if="agent && agent.os && lookingSca">
|
||||
<div layout="row" class="wz-margin-top-10" ng-if="agent && agent.os && lookingSca">
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-actions layout="row" style="padding-top: 14px !important;"
|
||||
class="wz-card-actions wz-card-actions-top">
|
||||
@ -122,7 +122,7 @@
|
||||
<span class="wz-text-gray">{{lookingSca.end_scan}}</span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wz-padding-bottom-30">
|
||||
<div layout="row" class="wz-margin-top-16 wz-margin-bottom-25">
|
||||
<div layout="row" class="wz-margin-bottom-25">
|
||||
<input placeholder="Filter checks..." ng-model="custom_search" type="text"
|
||||
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="search(custom_search)">
|
||||
@ -133,16 +133,26 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-margin-top-16 wz-margin-bottom-40-inv">
|
||||
<wz-table custom-columns="true" flex path="'/sca/' + agent.id + '/checks/' + lookingSca.id"
|
||||
row-sizes="[13,11,9]" extra-limit="100"
|
||||
row-sizes="[16,14,12]" extra-limit="100"
|
||||
keys="[{value: 'id', width: '75px'},'title', 'file', 'result']">
|
||||
</wz-table>
|
||||
</div>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center"
|
||||
class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload"
|
||||
ng-click="downloadCsv('/sca/' + agent.id + '/checks/' + lookingSca.id, lookingSca.id + '.csv')">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
class="layout-align-end-center layout-row">
|
||||
<button type="button"
|
||||
ng-click="downloadCsv('/sca/' + agent.id + '/checks/' + lookingSca.id, lookingSca.id + '.csv')"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
|
@ -23,8 +23,6 @@
|
||||
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
|
||||
<span> / </span>
|
||||
<span>{{agent.name}} ({{agent.id}})</span>
|
||||
<span> / </span>
|
||||
<span>Welcome</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="tab === 'configuration' && configurationTab === 'welcome'">
|
||||
|
@ -7,7 +7,8 @@
|
||||
<div></div>
|
||||
</div>
|
||||
<!-- Headline (cluster) -->
|
||||
<div layout="column" layout-padding ng-show="clusterStatus.data.data.enabled === 'yes' && clusterStatus.data.data.running === 'yes' ">
|
||||
<div layout="column" layout-padding
|
||||
ng-show="clusterStatus.data.data.enabled === 'yes' && clusterStatus.data.data.running === 'yes' ">
|
||||
<div layout="row">
|
||||
<span class="font-size-18">
|
||||
<i class="fa fa-fw fa-edit" aria-hidden="true"></i> Cluster configuration</span>
|
||||
@ -15,7 +16,8 @@
|
||||
</div>
|
||||
|
||||
<!-- Headline (manager) -->
|
||||
<div layout="column" layout-padding ng-show="clusterStatus.data.data.enabled !== 'yes' || clusterStatus.data.data.running !== 'yes' ">
|
||||
<div layout="column" layout-padding
|
||||
ng-show="clusterStatus.data.data.enabled !== 'yes' || clusterStatus.data.data.running !== 'yes' ">
|
||||
<div layout="row">
|
||||
<span class="font-size-18">
|
||||
<i class="fa fa-fw fa-edit" aria-hidden="true"></i> Manager configuration</span>
|
||||
@ -33,11 +35,13 @@
|
||||
<div layout="column" layout-align="center" class="height-35 wz-select-input wz-margin-right-8">
|
||||
<select class="kuiSelect wz-border-none cursor-pointer max-height-35" id="categoryBox"
|
||||
ng-model="selectedNode" ng-change="changeNode()" aria-label="Select node">
|
||||
<option ng-repeat="node in nodes" value="{{node.name}}">{{node.name}} ({{node.type}})</option>
|
||||
<option ng-repeat="node in nodes" value="{{node.name}}">{{node.name}} ({{node.type}})
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<button ng-disabled='xmlHasErrors' ng-click="switchConfigurationTab('welcome', false)" class='btn btn-info'>
|
||||
<button ng-disabled='xmlHasErrors' ng-click="switchConfigurationTab('welcome', false)"
|
||||
class='btn btn-info'>
|
||||
<span>Cancel</span>
|
||||
</button>
|
||||
<div layout="row" class="fullWidth wz-padding-left-16" ng-show="blockEdition && !isRestarting">
|
||||
@ -49,13 +53,16 @@
|
||||
<div layout="row" ng-show="!blockEdition || (blockEdition && isRestarting)" class="fullWidth">
|
||||
<button ng-disabled='xmlHasErrors || doingSaving || isRestarting' ng-click='saveConfiguration()'
|
||||
class='btn wz-button wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save' ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save</span>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true' class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save'
|
||||
ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save</span>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true'
|
||||
class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
XML format error</span>
|
||||
</button>
|
||||
<span flex ng-if="!restartBtn"></span>
|
||||
<button ng-show="!showConfirmRestartNode && !restartBtn" class="btn wz-button" ng-disabled="isRestarting || doingSaving"
|
||||
ng-click="showConfirmRestartNode = true"><i class="fa fa-refresh" ng-class="isRestarting ? 'fa-spin fa-spinner' : ''"></i>
|
||||
<button ng-show="!showConfirmRestartNode && !restartBtn" class="btn wz-button"
|
||||
ng-disabled="isRestarting || doingSaving" ng-click="showConfirmRestartNode = true"><i
|
||||
class="fa fa-refresh" ng-class="isRestarting ? 'fa-spin fa-spinner' : ''"></i>
|
||||
Restart {{selectedNode}}
|
||||
</button>
|
||||
<div ng-show="showConfirmRestartNode" class="confirmEmbedBubble confirmEmbedBubbleInline">
|
||||
@ -66,8 +73,10 @@
|
||||
</span>
|
||||
</div>
|
||||
<div layout="row">
|
||||
<md-button class="cancelBtn btn-info" type="button" ng-click="showConfirmRestartNode = false">Cancel</md-button>
|
||||
<md-button class="btn wz-button" type="button" ng-click="restartNode(selectedNode);showConfirmRestartNode = false"><i
|
||||
<md-button class="cancelBtn btn-info" type="button"
|
||||
ng-click="showConfirmRestartNode = false">Cancel</md-button>
|
||||
<md-button class="btn wz-button" type="button"
|
||||
ng-click="restartNode(selectedNode);showConfirmRestartNode = false"><i
|
||||
aria-hidden='true' class='fa fa-fw fa-check'></i>
|
||||
Confirm</md-button>
|
||||
</div>
|
||||
@ -75,8 +84,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-padding md-padding-top-10" style="height: calc(100vh - 215px);" ng-if="fetchedXML">
|
||||
<wz-xml-file-editor file-name='ossec.conf' data="fetchedXML" target-name="selectedNode" valid-fn='xmlIsValid(valid)'
|
||||
saving-param='toggleSaveConfig()' close-fn='closeEditingFile(reload)'>
|
||||
<wz-xml-file-editor file-name='ossec.conf' data="fetchedXML" target-name="selectedNode"
|
||||
valid-fn='xmlIsValid(valid)' saving-param='toggleSaveConfig()'
|
||||
close-fn='closeEditingFile(reload)'>
|
||||
</wz-xml-file-editor>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,8 +15,18 @@
|
||||
<md-card flex class="wz-md-card _md flex">
|
||||
<md-card-actions ng-if="adminMode" ng-show="!agent || agent.id === '000'" layout="row"
|
||||
class="wz-card-actions wz-card-actions-top">
|
||||
<a ng-click="mctrl.setConfigTab('editconfiguration', true)" style="margin-top:8px">Edit
|
||||
configuration <i aria-hidden="true" class="fa fa-pencil"></i></a>
|
||||
<a ng-click="mctrl.setConfigTab('editconfiguration', true)" style="margin-top:8px"><svg
|
||||
class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false" 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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg> Edit
|
||||
configuration</a>
|
||||
|
||||
</md-card-actions>
|
||||
<md-card-content>
|
||||
@ -77,7 +87,8 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<span ng-if="!agent || agent.id === '000'" class="font-size-16 wz-text-bold">Alerts and output management</span>
|
||||
<span ng-if="!agent || agent.id === '000'" class="font-size-16 wz-text-bold">Alerts and output
|
||||
management</span>
|
||||
<md-divider ng-if="!agent || agent.id === '000'" class="wz-margin-top-10"></md-divider>
|
||||
<table ng-if="!agent || agent.id === '000'"
|
||||
class="table table-striped table-condensed table-layout-fixed table-hover table-vertical-align-middle">
|
||||
@ -200,7 +211,8 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<span ng-if="!agent || agent.id === '000'" class="font-size-16 wz-text-bold">Cloud security monitoring</span>
|
||||
<span ng-if="!agent || agent.id === '000'" class="font-size-16 wz-text-bold">Cloud security
|
||||
monitoring</span>
|
||||
<md-divider ng-if="!agent || agent.id === '000'" class="wz-margin-top-10"></md-divider>
|
||||
<table ng-if="!agent || agent.id === '000'"
|
||||
class="table table-striped table-condensed table-layout-fixed table-hover table-vertical-align-middle">
|
||||
|
@ -12,13 +12,28 @@
|
||||
<div layout="row">
|
||||
<span class="font-size-18">
|
||||
<i class="fa fa-fw fa-object-group" aria-hidden="true"></i> Groups </span>
|
||||
<span ng-if='adminMode' class="font-size-18 wz-text-link" ng-click="switchAddingGroup()"> <i class="fa fa-fw"
|
||||
ng-class="!addingGroup ? 'fa-plus-circle' : 'fa-minus-circle'"></i></span>
|
||||
<span ng-if='adminMode' class="font-size-18 wz-text-link wz-margin-left-8"
|
||||
ng-click="switchAddingGroup()">
|
||||
<svg ng-if="!addingGroup" class="euiIcon euiIcon--medium" focusable="false"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd"
|
||||
d="M8 7h3.5a.5.5 0 1 1 0 1H8v3.5a.5.5 0 1 1-1 0V8H3.5a.5.5 0 0 1 0-1H7V3.5a.5.5 0 0 1 1 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882z">
|
||||
</path>
|
||||
</svg>
|
||||
<svg ng-if="addingGroup" class="euiIcon euiIcon--medium" focusable="false"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd"
|
||||
d="M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882zM3.5 7h8a.5.5 0 1 1 0 1h-8a.5.5 0 0 1 0-1z">
|
||||
</path>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div layout="row" ng-if="addingGroup" ng-if='adminMode' class="wz-padding-bottom-0">
|
||||
<input placeholder="Group name..." ng-model="groupToBeAdded" type="text" class="kuiLocalSearchInput addGroupInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
<input placeholder="Group name..." ng-model="groupToBeAdded" type="text"
|
||||
class="kuiLocalSearchInput addGroupInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton addGroupBtn" ng-click="createGroup(groupToBeAdded)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton addGroupBtn"
|
||||
ng-click="createGroup(groupToBeAdded)">
|
||||
<span class="fa fa-save fa-fw" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
@ -30,31 +45,9 @@
|
||||
|
||||
<div flex layout="column" layout-align="start stretch" ng-show="!load" ng-init="groupsSelectedTab='agents'">
|
||||
<!-- MD5 Sums and Details cards -->
|
||||
<div layout="row" class="md-padding-h" ng-if="lookingGroup">
|
||||
<!-- Group MD5 sums section -->
|
||||
<md-card flex class="no-margin-left no-margin-right wz-margin-top-8 wz-md-card">
|
||||
<md-card-content>
|
||||
<span class="wz-headline-title font-size-18"><i class="fa fa-fw fa-object-group" aria-hidden="true"></i>
|
||||
{{currentGroup.name}}</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="15">Agents</span>
|
||||
<span class="wz-text-right color-grey">{{ currentGroup.count }}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="15">Content</span>
|
||||
<span class="wz-text-right color-grey">{{ totalFiles }} files</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="15">Configuration sum</span>
|
||||
<span class="wz-text-right color-grey">{{ currentGroup.configSum }}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="15">Merged sum</span>
|
||||
<span class="wz-text-right color-grey">{{ currentGroup.mergedSum }}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<div layout="row" class="md-padding" ng-if="lookingGroup && currentGroup">
|
||||
<span class="wz-headline-title font-size-18"><i class="fa fa-fw fa-object-group" aria-hidden="true"></i>
|
||||
{{currentGroup.name}}</span>
|
||||
</div>
|
||||
|
||||
<!-- End group actions -->
|
||||
@ -68,16 +61,25 @@
|
||||
<div ng-show="editingFile">
|
||||
<div layout="row" class="md-padding-h wz-margin-top-10">
|
||||
<span ng-click='closeEditingFile()' class='btn btn-info'>Cancel</span>
|
||||
<button ng-disabled='xmlHasErrors' ng-click='doSaveGroupAgentConfig()' class='btn wz-button pull-right wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save'></i>Save
|
||||
file</span>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true' class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
<button ng-disabled='xmlHasErrors' ng-click='doSaveGroupAgentConfig()'
|
||||
class='height-35 kuiButton kuiButton--secondary wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'>
|
||||
<svg class="euiIcon euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 0 0-.141-.147L11.73 2.145a2.654 2.654 0 0 0-.147-.141A2.654 2.654 0 0 0 11.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 0 1-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 0 1-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 0 1 .273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 0 1 .113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 0 1-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 0 1-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 0 1 .378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 0 0 9.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0-1a1 1 0 1 0 0-2 1 1 0 0 0 0 2z">
|
||||
</path>
|
||||
</svg> Save file
|
||||
</span>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true'
|
||||
class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
XML format error</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="md-padding md-padding-top-10" style="height: calc(100vh - 350px);" ng-if="fetchedXML">
|
||||
<wz-xml-file-editor file-name='agent.conf' data="fetchedXML" target-name="currentGroup.name + ' group'"
|
||||
valid-fn='xmlIsValid(valid)' close-fn='closeEditingFile(reload)'>
|
||||
<wz-xml-file-editor file-name='agent.conf' data="fetchedXML"
|
||||
target-name="currentGroup.name + ' group'" valid-fn='xmlIsValid(valid)'
|
||||
close-fn='closeEditingFile(reload)'>
|
||||
</wz-xml-file-editor>
|
||||
</div>
|
||||
</div>
|
||||
@ -94,49 +96,102 @@
|
||||
possible to apply changes of more than 500 additions or deletions</span>
|
||||
</div>
|
||||
|
||||
<div layout="row" class="md-padding wz-padding-bottom-0" ng-if="lookingGroup && currentGroup && !addingAgents && !editingFile && !file && adminMode">
|
||||
<button ng-if="lookingGroup && groupsSelectedTab==='files'" ng-click='editGroupAgentConfig(currentGroup)'
|
||||
class='btn wz-button'><i aria-hidden='true' class='fa fa-fw fa-pencil'></i>
|
||||
<!-- Search bar -->
|
||||
<div layout="row"
|
||||
class="wz-margin-top-16 euiFlexGroup euiFlexGroup--alignItemsCenter euiFormControlLayout__childrenWrapper md-padding-h ng-scope"
|
||||
ng-if="!addingAgents && !file">
|
||||
<input
|
||||
placeholder="{{groupsSelectedTab==='files' ? 'Filter files...' : lookingGroup ? 'Filter agents...' : 'Filter groups...'}}"
|
||||
ng-model="custom_search" type="text"
|
||||
class="euiFieldSearch euiFieldSearch--fullWidth euiFlexItem height-35 ng-empty ng-pristine ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="search(custom_search)">
|
||||
<div class="euiFormControlLayoutIcons wz-margin-left-16"><span
|
||||
class="euiFormControlLayoutCustomIcon"><svg
|
||||
class="euiIcon euiIcon--medium euiFormControlLayoutCustomIcon__icon" focusable="false"
|
||||
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="search-a"
|
||||
d="M11.271 11.978l3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#search-a"></use>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<button type="submit" aria-label="Search"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary wz-margin-left-8"
|
||||
ng-click="search(custom_search)">
|
||||
Search
|
||||
</button>
|
||||
<div ng-if="lookingGroup && currentGroup && !addingAgents && !editingFile && !file && adminMode"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 wz-margin-left-8">
|
||||
<div class="euiFilterGroup"></div>
|
||||
</div>
|
||||
<button
|
||||
ng-if="lookingGroup && currentGroup && !addingAgents && !editingFile && !file && adminMode && groupsSelectedTab==='files'"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary ng-scope wz-margin-left-8"
|
||||
ng-click="editGroupAgentConfig(currentGroup)" aria-label="Edit group configuration">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false" 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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
Edit group configuration
|
||||
</button>
|
||||
<button ng-if="lookingGroup && groupsSelectedTab==='agents'" ng-click='addMultipleAgents(true)'
|
||||
class='btn wz-button'><i aria-hidden='true' class='fa fa-fw fa-tv'></i>
|
||||
<button
|
||||
ng-if="lookingGroup && currentGroup && !addingAgents && !editingFile && !file && adminMode && groupsSelectedTab==='agents'"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary ng-scope wz-margin-left-8"
|
||||
ng-click="addMultipleAgents(true)" aria-label="Add or remove agents">
|
||||
<svg class="euiIcon euiIcon--medium" focusable="false" xmlns="http://www.w3.org/2000/svg"
|
||||
width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd"
|
||||
d="M8 7h3.5a.5.5 0 1 1 0 1H8v3.5a.5.5 0 1 1-1 0V8H3.5a.5.5 0 0 1 0-1H7V3.5a.5.5 0 0 1 1 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 1 0 0 13.236A6.618 6.618 0 0 0 7.5.882z">
|
||||
</path>
|
||||
</svg>
|
||||
Add or remove agents
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Search bar -->
|
||||
<div layout="row" class="md-padding" ng-if="!addingAgents && !file">
|
||||
<input placeholder="{{groupsSelectedTab==='files' ? 'Filter files...' : lookingGroup ? 'Filter agents...' : 'Filter groups...'}}"
|
||||
ng-model="custom_search" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="search(custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="search(custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
<!-- End search bar -->
|
||||
|
||||
<!-- Groups table -->
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h" ng-if="!lookingGroup">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h wz-margin-top-16" ng-if="!lookingGroup">
|
||||
<md-card-content>
|
||||
<div layout="row">
|
||||
<wz-table custom-columns="true" flex extra-limit="100" path="'/agents/groups'" keys="['name','count','mergedSum']"
|
||||
allow-click="true" row-sizes="[14,12,10]">
|
||||
<wz-table custom-columns="true" flex extra-limit="100" path="'/agents/groups'"
|
||||
keys="['name','count','mergedSum']" allow-click="true" row-sizes="[14,12,10]">
|
||||
</wz-table>
|
||||
</div>
|
||||
<div layout="row" layout-align="end center">
|
||||
<button type="button" ng-click="downloadCsv('/agents/groups')"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false"
|
||||
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
|
||||
viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</md-card-content>
|
||||
<!-- CSV Download button section for groups -->
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="downloadCsv('/agents/groups')">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
</md-card-actions>
|
||||
<!-- End CSV Download button section for groups -->
|
||||
</md-card>
|
||||
<!-- End groups table -->
|
||||
|
||||
<div ng-if='!addingAgents'>
|
||||
<!-- Group agents table -->
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h" ng-if="lookingGroup && groupsSelectedTab==='agents' && currentGroup">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h wz-margin-top-16"
|
||||
ng-if="lookingGroup && groupsSelectedTab==='agents' && currentGroup">
|
||||
<div layout="row" ng-show="failedErrors" class="extraHeader">
|
||||
<md-list>
|
||||
<md-list-item class="error-enum-configuration" ng-repeat="group in failedErrors">
|
||||
@ -146,29 +201,38 @@
|
||||
</md-list-item>
|
||||
</md-list>
|
||||
<span flex></span>
|
||||
<a class='md-padding md-padding-top-10' ng-click='failedErrors = false'><i class="fa fa-times"
|
||||
aria-hidden="true"></i></a>
|
||||
<a class='md-padding md-padding-top-10' ng-click='failedErrors = false'><i
|
||||
class="fa fa-times" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
<md-card-content>
|
||||
<div layout="row">
|
||||
<wz-table flex path="'/agents/groups/' + currentGroup.name" keys="['id','name','ip','status','os.name','os.version','version']"
|
||||
allow-click="true" row-sizes="[14,12,10]" empty-results="'No agents were added to this group.'" />
|
||||
<wz-table flex path="'/agents/groups/' + currentGroup.name"
|
||||
keys="['id','name','ip','status','os.name','os.version','version']"
|
||||
allow-click="true" row-sizes="[14,12,10]"
|
||||
empty-results="'No agents were added to this group.'" />
|
||||
</div>
|
||||
<div layout="row" ng-if="lookingGroup && groupsSelectedTab==='agents'">
|
||||
<span flex></span>
|
||||
<button type="button" ng-click="downloadCsv('/agents/groups/' + currentGroup.name)"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false"
|
||||
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
|
||||
viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<!-- End Group agents table -->
|
||||
|
||||
<!-- CSV Download button section for group agents -->
|
||||
<div layout="row" class="md-padding" ng-if="lookingGroup && groupsSelectedTab==='agents'">
|
||||
<span flex></span>
|
||||
<a class="small" id="btnDownload" ng-click="downloadCsv('/agents/groups/' + currentGroup.name)">Formatted
|
||||
<i aria-hidden="true" class="fa fa-fw fa-download"></i>
|
||||
</a>
|
||||
</div>
|
||||
<!-- End CSV Download button section for group agents -->
|
||||
|
||||
<!-- Group files table -->
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h" ng-if="lookingGroup && groupsSelectedTab==='files' && !fileViewer && currentGroup">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h wz-margin-top-16"
|
||||
ng-if="lookingGroup && groupsSelectedTab==='files' && !fileViewer && currentGroup">
|
||||
<md-card-content>
|
||||
<div layout="row">
|
||||
<wz-table extra-limit="100" flex path="'/agents/groups/' + currentGroup.name + '/files'"
|
||||
@ -176,31 +240,45 @@
|
||||
row-sizes="[10,8,6,4]">
|
||||
</wz-table>
|
||||
</div>
|
||||
<div layout="row" ng-if="lookingGroup && groupsSelectedTab==='files' && !file">
|
||||
<span flex></span>
|
||||
<button type="button"
|
||||
ng-click="downloadCsv('/agents/groups/' + currentGroup.name + '/files')"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false"
|
||||
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
|
||||
viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<!-- End Group files table -->
|
||||
|
||||
<!-- CSV Download button section for group files-->
|
||||
<div layout="row" class="md-padding" ng-if="lookingGroup && groupsSelectedTab==='files' && !file">
|
||||
<span flex></span>
|
||||
<a class="small" id="btnDownload" ng-click="downloadCsv('/agents/groups/' + currentGroup.name + '/files')">Formatted
|
||||
<i aria-hidden="true" class="fa fa-fw fa-download"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- End CSV Download button section for group files -->
|
||||
|
||||
<!-- File JSON viewer section -->
|
||||
<div flex layout="column" class="md-padding" ng-if="lookingGroup && groupsSelectedTab==='files' && file">
|
||||
<div flex layout="column" class="md-padding"
|
||||
ng-if="lookingGroup && groupsSelectedTab==='files' && file">
|
||||
<div flex layout="column">
|
||||
<div layout="row" class="wz-padding-bottom-14">
|
||||
<span flex class="wz-headline-title">{{ filename }}</span>
|
||||
<button class="md-icon-button" ng-if="lookingGroup" aria-label="Back" tooltip="Close file"
|
||||
tooltip-placement="left" ng-click="goBackFiles()"><i class="fa fa-fw fa-close"
|
||||
aria-hidden="true"></i></button>
|
||||
<button class="md-icon-button" ng-if="lookingGroup" aria-label="Back"
|
||||
tooltip="Close file" tooltip-placement="left" ng-click="goBackFiles()"><i
|
||||
class="fa fa-fw fa-close" aria-hidden="true"></i></button>
|
||||
<!--<span flex class="wz-text-right cursor-pointer color-grey" ng-click="goBackFiles()">close</span>-->
|
||||
</div>
|
||||
<div flex layout="column">
|
||||
<pre flex class="wz-pre groupContentViewer wzXmlEditor wz-overflow-y-auto"><code wz-dynamic="file"></code></pre>
|
||||
<pre flex
|
||||
class="wz-pre groupContentViewer wzXmlEditor wz-overflow-y-auto"><code wz-dynamic="file"></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -208,7 +286,8 @@
|
||||
</div>
|
||||
|
||||
<div layout="row" class="md-padding" ng-if="addingAgents">
|
||||
<span ng-show='!multipleSelectorLoading' class="wzMultipleSelectorCounter"><span style='color:green'>+{{currentAdding}}</span> <span
|
||||
<span ng-show='!multipleSelectorLoading' class="wzMultipleSelectorCounter"><span
|
||||
style='color:green'>+{{currentAdding}}</span> <span
|
||||
style='color:red'>-{{currentDeleting}}</span></span>
|
||||
<wz-multiple-selector class='wzMultipleSelector' available-items="availableAgents.data"
|
||||
selected-items="selectedAgents.data" title-available-items="Available agents"
|
||||
|
@ -1,104 +1,135 @@
|
||||
<div layout="column" class="mozilla-table-size-85" ng-controller="managerLogController as ctrl" ng-if="!ctrl.loading && mctrl.tab == 'logs'">
|
||||
<div layout="column" class="mozilla-table-size-85" ng-controller="managerLogController as ctrl"
|
||||
ng-if="!ctrl.loading && mctrl.tab == 'logs'">
|
||||
|
||||
<!-- Headline -->
|
||||
<div ng-show="!ctrl.loading" layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-pencil-square-o" aria-hidden="true"></i> Logs</span>
|
||||
<span class="md-subheader">Review the logs of all Wazuh manager daemons</span>
|
||||
<!-- Filters and Realtime button section -->
|
||||
<div ng-show="!ctrl.loading" layout="row" layout-align="start center" class="md-padding-h wz-margin-top-16">
|
||||
<!-- Daemon selector -->
|
||||
<div flex="20" layout="column" layout-align="center" class="wz-margin-right-15 wz-select-input">
|
||||
<select flex class="kuiSelect wz-border-none cursor-pointer height-35"
|
||||
ng-disabled="ctrl.realtime || !ctrl.daemons.length" id="categoryBox" ng-model="ctrl.category"
|
||||
ng-change="ctrl.filter({name:'category',value:ctrl.category})" aria-label="Logs category">
|
||||
<option value="all">All daemons</option>
|
||||
<option ng-repeat="daemon in ctrl.daemons | orderObjectBy: 'title'" value="{{daemon.title}}">
|
||||
{{daemon.title}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
<!-- Filters and Realtime button section -->
|
||||
<div ng-show="!ctrl.loading" layout="row" layout-align="start center" class="md-padding-h">
|
||||
<!-- Daemon selector -->
|
||||
<div flex="20" layout="column" layout-align="center" class="height-40 wz-margin-right-15 wz-select-input">
|
||||
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime || !ctrl.daemons.length"
|
||||
id="categoryBox" ng-model="ctrl.category" ng-change="ctrl.filter({name:'category',value:ctrl.category})"
|
||||
aria-label="Logs category">
|
||||
<option value="all">All daemons</option>
|
||||
<option ng-repeat="daemon in ctrl.daemons | orderObjectBy: 'title'" value="{{daemon.title}}">
|
||||
{{daemon.title}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- End daemon selector -->
|
||||
|
||||
<!-- Level selector -->
|
||||
<div flex="20" layout="column" layout-align="center" class="height-40 wz-select-input wz-margin-right-15">
|
||||
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime" id="levelBox"
|
||||
ng-model="ctrl.type_log" ng-change="ctrl.filter({name:'type_log',value:ctrl.type_log})" aria-label="Logs level">
|
||||
<option value="all">All log levels</option>
|
||||
<option value="info">Info</option>
|
||||
<option value="error">Error</option>
|
||||
<option value="warning">Warning</option>
|
||||
<option value="critical">Critical</option>
|
||||
<option value="debug">Debug</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div flex="20" layout="column" ng-show="ctrl.nodeList" layout-align="center" class="height-40 wz-select-input wz-margin-right-15">
|
||||
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime" id="categoryBox"
|
||||
ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Logs category">
|
||||
<option ng-repeat="node in ctrl.nodeList" value="{{node}}">{{node}}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div flex="20" layout="column" layout-align="center" class="height-40">
|
||||
<wz-kbn-switch switch-model="ctrl.sortFilter" switch-change="ctrl.sort()" switch-text="Descending sort">
|
||||
</wz-kbn-switch>
|
||||
</div>
|
||||
|
||||
<!-- End Level selector -->
|
||||
|
||||
<!-- White space between filters and Realtime button -->
|
||||
<span flex></span>
|
||||
|
||||
<md-button ng-if="!ctrl.realtime" class="wz-button no-margin-right" ng-click="ctrl.playRealtime()" aria-label="Play realtime button">
|
||||
<i class="fa fa-play fa-fw" aria-hidden="true"></i>
|
||||
Play realtime
|
||||
</md-button>
|
||||
<md-button ng-if="ctrl.realtime" class="wz-button no-margin-right" ng-click="ctrl.stopRealtime()" aria-label="Stop realtime button">
|
||||
<i class="fa fa-stop fa-fw" aria-hidden="true"></i>
|
||||
Stop realtime
|
||||
</md-button>
|
||||
<!-- End daemon selector -->
|
||||
|
||||
<!-- Level selector -->
|
||||
<div flex="20" layout="column" layout-align="center" class="wz-select-input wz-margin-right-15">
|
||||
<select flex class="kuiSelect wz-border-none cursor-pointer height-35" ng-disabled="ctrl.realtime"
|
||||
id="levelBox" ng-model="ctrl.type_log" ng-change="ctrl.filter({name:'type_log',value:ctrl.type_log})"
|
||||
aria-label="Logs level">
|
||||
<option value="all">All log levels</option>
|
||||
<option value="info">Info</option>
|
||||
<option value="error">Error</option>
|
||||
<option value="warning">Warning</option>
|
||||
<option value="critical">Critical</option>
|
||||
<option value="debug">Debug</option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- End Filters and Realtime button section -->
|
||||
|
||||
<div layout="row" flex class="md-padding-h wz-margin-top-10" ng-if="ctrl.logsPath">
|
||||
<input placeholder="Filter logs..." ng-model="ctrl.custom_search" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="ctrl.search(ctrl.custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="ctrl.search(ctrl.custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
</button>
|
||||
|
||||
<div flex="20" layout="column" ng-show="ctrl.nodeList" layout-align="center"
|
||||
class="wz-select-input wz-margin-right-15">
|
||||
<select flex class="kuiSelect wz-border-none cursor-pointer height-35" ng-disabled="ctrl.realtime"
|
||||
id="categoryBox" ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)"
|
||||
aria-label="Logs category">
|
||||
<option ng-repeat="node in ctrl.nodeList" value="{{node}}">{{node}}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Logs section -->
|
||||
<div layout="row" layout-padding ng-if="ctrl.logsPath" ng-hide="true">
|
||||
<wz-table path="ctrl.logsPath" keys="[]" implicit-sort="'timestamp'"></wz-table>
|
||||
|
||||
<div flex="20" layout="column" layout-align="center">
|
||||
<wz-kbn-switch switch-model="ctrl.sortFilter" switch-change="ctrl.sort()" switch-text="Descending sort">
|
||||
</wz-kbn-switch>
|
||||
</div>
|
||||
<div ng-show="XMLContent">
|
||||
<div layout="row" layout-padding class="wz-padding-bottom-0">
|
||||
<wz-config-viewer flex xmlcontent="XMLContent" hide-header="true" />
|
||||
</div>
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center wz-no-margin layout-row height-25">
|
||||
<a class="small" id="btnDownload" ng-click="ctrl.downloadCsv()">Formatted <i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
|
||||
<!-- End Level selector -->
|
||||
</div>
|
||||
<!-- End Filters and Realtime button section -->
|
||||
|
||||
<div layout="row"
|
||||
class="euiFlexGroup euiFlexGroup--alignItemsCenter euiFormControlLayout__childrenWrapper md-padding-h ng-scope wz-margin-top-16"
|
||||
ng-if="ctrl.logsPath">
|
||||
<input placeholder="Filter logs..." ng-model="ctrl.custom_search" type="text"
|
||||
class="euiFieldSearch euiFieldSearch--fullWidth euiFlexItem height-35 ng-empty ng-pristine ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="ctrl.search(ctrl.custom_search)">
|
||||
<div class="euiFormControlLayoutIcons wz-margin-left-16"><span class="euiFormControlLayoutCustomIcon"><svg
|
||||
class="euiIcon euiIcon--medium euiFormControlLayoutCustomIcon__icon" focusable="false"
|
||||
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="search-a"
|
||||
d="M11.271 11.978l3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#search-a"></use>
|
||||
</svg></span></div>
|
||||
|
||||
<button type="submit" aria-label="Search"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary wz-margin-left-8"
|
||||
ng-click="ctrl.search(ctrl.custom_search)">
|
||||
Search
|
||||
</button>
|
||||
<div class="euiFlexItem euiFlexItem--flexGrowZero height-35 wz-margin-left-8">
|
||||
<div class="euiFilterGroup"></div>
|
||||
</div>
|
||||
<!-- End Logs section -->
|
||||
|
||||
<div layout="row" class="md-padding-h" ng-show="XMLContent === ''">
|
||||
<div flex class="euiCallOut euiCallOut--warning wz-margin-top-17">
|
||||
<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">No results match your search criteria</span>
|
||||
</div>
|
||||
|
||||
<button ng-if="!ctrl.realtime"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary ng-scope wz-margin-left-8"
|
||||
ng-click="ctrl.playRealtime()" aria-label="Play realtime button">
|
||||
<i class="fa fa-play fa-fw" aria-hidden="true"></i>
|
||||
Play realtime
|
||||
</button>
|
||||
<button ng-if="ctrl.realtime"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--danger ng-scope wz-margin-left-8"
|
||||
ng-click="ctrl.stopRealtime()" aria-label="Stop realtime button">
|
||||
<i class="fa fa-stop fa-fw" aria-hidden="true"></i>
|
||||
Stop realtime
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Logs section -->
|
||||
<div layout="row" layout-padding ng-if="ctrl.logsPath" ng-hide="true">
|
||||
<wz-table path="ctrl.logsPath" keys="[]" implicit-sort="'timestamp'"></wz-table>
|
||||
</div>
|
||||
|
||||
<div ng-show="XMLContent">
|
||||
<div layout="row" layout-padding class="wz-padding-bottom-0">
|
||||
<wz-config-viewer flex xmlcontent="XMLContent" hide-header="true" />
|
||||
</div>
|
||||
</div>
|
||||
<div layout="row" class="md-padding layout-align-end">
|
||||
<button type="button" ng-click="ctrl.downloadCsv()"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<!-- End Logs section -->
|
||||
|
||||
<div layout="row" class="md-padding-h" ng-if="XMLContent === ''">
|
||||
<div flex class="euiCallOut euiCallOut--warning wz-margin-top-17">
|
||||
<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">No results match your search criteria</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
@ -25,10 +25,6 @@
|
||||
<span class="wz-text-link cursor-pointer" ng-click="mctrl.switchTab('groups', true)"> / {{ mctrl.tabNames[mctrl.tab] }}</span>
|
||||
<span> / {{ mctrl.currentGroup.name }} </span>
|
||||
</div>
|
||||
<!-- If you're on the Welcome tab, show a blank, simple breadcrumb -->
|
||||
<div ng-if="mctrl.tab === 'welcome'">
|
||||
<span>Management / Welcome</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End breadcrumbs -->
|
||||
</div>
|
||||
|
@ -1,22 +1,24 @@
|
||||
<!-- Cards for overview monitoring section -->
|
||||
<div layout="row" layout-align="start stretch" class="wz-timelions" ng-show="showConfig">
|
||||
<!-- Back button -->
|
||||
<md-button class="md-icon-button wz-back-btn-absolute" aria-label="Back" tooltip="Go back" tooltip-placement="bottom" ng-click="goBack()"><i
|
||||
class="fa fa-fw fa-arrow-left" aria-hidden="true"></i></md-button>
|
||||
|
||||
<!-- Overview visualization card -->
|
||||
<md-card class="wz-md-card" ng-class="{'no-opacity-overview-monitoring': resultState !== 'ready' || !rendered,'flex-30': resultState === 'ready' && rendered}">
|
||||
<md-card class="wz-md-card"
|
||||
ng-class="{'no-opacity-overview-monitoring': resultState !== 'ready' || !rendered,'flex-30': resultState === 'ready' && rendered}">
|
||||
<md-card-content class="wazuh-column">
|
||||
<span class="wz-headline-title">Top 5 nodes</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis ng-show="rendered" vis-id="'Wazuh-App-Cluster-Overview-Node-Pie'" id="Wazuh-App-Cluster-Overview-Node-Pie"></kbn-vis>
|
||||
<span class="wz-padding-top-10 wz-text-center" ng-show="!rendered">There are no results for selected time range. Try another one.</span>
|
||||
<kbn-vis ng-show="rendered" vis-id="'Wazuh-App-Cluster-Overview-Node-Pie'"
|
||||
id="Wazuh-App-Cluster-Overview-Node-Pie"></kbn-vis>
|
||||
<span class="wz-padding-top-10 wz-text-center" ng-show="!rendered">There are no results for selected time
|
||||
range. Try another one.</span>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
|
||||
<!-- Cluster configuration card -->
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-content>
|
||||
<i class="fa fa-fw fa-server" aria-hidden="true"></i> <span class="wz-headline-title">Cluster configuration</span>
|
||||
<i class="fa fa-fw fa-server" aria-hidden="true"></i> <span class="wz-headline-title">Cluster
|
||||
configuration</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<!-- Configuration options -->
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
@ -54,4 +56,4 @@
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<!-- End cards for overview monitoring section -->
|
||||
<!-- End cards for overview monitoring section -->
|
@ -14,21 +14,17 @@
|
||||
<!-- End cluster disabled breadcrumbs -->
|
||||
|
||||
<!-- Status and reports navigation bar -->
|
||||
<md-nav-bar class="wz-nav-bar" ng-show="mctrl.tab !== 'welcome'" md-selected-nav-item="mctrl.tab" nav-bar-aria-label="Status and reports navigation links">
|
||||
<md-nav-bar class="wz-nav-bar" ng-show="mctrl.tab !== 'welcome'" md-selected-nav-item="mctrl.tab"
|
||||
nav-bar-aria-label="Status and reports navigation links">
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('status')" name="status">Status</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('logs')" name="logs">Logs</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('monitoring')" name="monitoring">Cluster</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('reporting')" name="reporting">Reporting</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('monitoring')" name="monitoring">Cluster
|
||||
</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('reporting')" name="reporting">Reporting
|
||||
</md-nav-item>
|
||||
</md-nav-bar>
|
||||
<!-- End status and reports navigation bar -->
|
||||
|
||||
<!-- Headline -->
|
||||
<div layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-search" aria-hidden="true"></i> Cluster</span>
|
||||
<span class="md-subheader">Visualize your Wazuh cluster nodes and its agents</span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
<!-- Cluster disabled section -->
|
||||
<div flex layout="row" layout-align="start start" ng-if="!isClusterEnabled">
|
||||
<md-card flex class="wz-md-card" flex>
|
||||
@ -37,7 +33,8 @@
|
||||
disabled</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="column" class="wz-padding-top-10">
|
||||
<p>The cluster is disabled. Visit the documentation on <a target="_blank" href="https://documentation.wazuh.com/current/user-manual/manager/wazuh-cluster.html">this
|
||||
<p>The cluster is disabled. Visit the documentation on <a target="_blank"
|
||||
href="https://documentation.wazuh.com/current/user-manual/manager/wazuh-cluster.html">this
|
||||
link</a> to learn about how to enable it.
|
||||
</p>
|
||||
</div>
|
||||
@ -114,28 +111,24 @@
|
||||
<!-- End navigation section -->
|
||||
|
||||
<!-- Status and reports navigation bar -->
|
||||
<md-nav-bar ng-if="!loading" class="wz-nav-bar" ng-show="mctrl.tab !== 'welcome'" md-selected-nav-item="mctrl.tab"
|
||||
nav-bar-aria-label="Status and reports navigation links">
|
||||
<md-nav-bar ng-if="!loading" class="wz-nav-bar" ng-show="mctrl.tab !== 'welcome'"
|
||||
md-selected-nav-item="mctrl.tab" nav-bar-aria-label="Status and reports navigation links">
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('status')" name="status">Status</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('logs')" name="logs">Logs</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('monitoring')" name="monitoring">Cluster</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('reporting')" name="reporting">Reporting</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('monitoring')" name="monitoring">Cluster
|
||||
</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.switchTab('reporting')" name="reporting">Reporting
|
||||
</md-nav-item>
|
||||
</md-nav-bar>
|
||||
<!-- End status and reports navigation bar -->
|
||||
|
||||
<!-- Headline -->
|
||||
<div ng-show="!loading" layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-search" aria-hidden="true"></i> Cluster</span>
|
||||
<span class="md-subheader">Visualize your Wazuh cluster nodes and its agents</span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
<!-- Discover search bar section -->
|
||||
<kbn-dis ng-show="!loading && (!showNodes || currentNode)"></kbn-dis>
|
||||
<kbn-dis ng-show="!loading && (!showNodes || currentNode)" class="wz-margin-top-10"></kbn-dis>
|
||||
<!-- End Discover search bar section -->
|
||||
|
||||
<!-- Loading status section -->
|
||||
<div layout="column" layout-align="center center" class="wz-margin-bottom-40" ng-show="!loading && !rendered && resultState === 'ready' && (!showNodes || (showNodes && currentNode))">
|
||||
<div layout="column" layout-align="center center" class="wz-margin-bottom-40"
|
||||
ng-show="!loading && !rendered && resultState === 'ready' && (!showNodes || (showNodes && currentNode))">
|
||||
<div class="percentage"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
|
||||
<div class="percentage">{{loadingStatus}}</div>
|
||||
</div>
|
||||
|
@ -3,24 +3,29 @@
|
||||
<md-button class="md-icon-button wz-back-btn-absolute" aria-label="Back" tooltip="Go back" tooltip-placement="right"
|
||||
ng-click="goNodes()"><i class="fa fa-fw fa-arrow-left" aria-hidden="true"></i></md-button>
|
||||
<!-- Node alerts summary card -->
|
||||
<div layout="row" layout-align="start stretch" class="height-250 wz-timelions" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}"
|
||||
<div layout="row" layout-align="start stretch" class="height-250 wz-timelions"
|
||||
ng-class="{'no-opacity': resultState !== 'ready' || !rendered}"
|
||||
ng-show="!loading && currentNode && !showConfig">
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-content class="wazuh-column">
|
||||
<span class="wz-headline-title">{{ currentNode.name }} alerts summary</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis ng-show="rendered" vis-id="'Wazuh-App-Cluster-Overview-Node'" id="Wazuh-App-Cluster-Overview-Node"></kbn-vis>
|
||||
<kbn-vis ng-show="rendered" vis-id="'Wazuh-App-Cluster-Overview-Node'"
|
||||
id="Wazuh-App-Cluster-Overview-Node"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<!-- End node alerts summary card -->
|
||||
|
||||
<!-- Node info and files cards section -->
|
||||
<div layout="row" style="z-index: 10000" layout-align="start stretch" ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck">
|
||||
<div layout="row" style="z-index: 10000" layout-align="start stretch"
|
||||
ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck">
|
||||
<!-- Node information card -->
|
||||
<md-card flex class="wz-md-card" ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck.info">
|
||||
<md-card flex class="wz-md-card"
|
||||
ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck.info">
|
||||
<md-card-content>
|
||||
<i class="fa fa-fw fa-info" aria-hidden="true"></i> <span class="wz-headline-title">Node information</span>
|
||||
<i class="fa fa-fw fa-info" aria-hidden="true"></i> <span class="wz-headline-title">Node
|
||||
information</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">IP</span>
|
||||
@ -46,14 +51,16 @@
|
||||
</md-card>
|
||||
|
||||
<!-- Last files sync card -->
|
||||
<md-card flex class="wz-md-card" ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck.status">
|
||||
<md-card flex class="wz-md-card"
|
||||
ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck.status">
|
||||
<md-card-content>
|
||||
<i class="fa fa-fw fa-file" aria-hidden="true"></i> <span class="wz-headline-title">Last files
|
||||
integrity synchronization</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Last sync</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.date_end_master}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.date_end_master}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Duration</span>
|
||||
@ -61,19 +68,23 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Total shared files</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.shared}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.shared}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Total missing files</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.missing}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.missing}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Total extra but valid files</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.extra_valid}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.extra_valid}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Total extra files</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.extra}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_integrity.total_files.extra}}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
@ -81,7 +92,8 @@
|
||||
<!-- End node info and files cards section -->
|
||||
|
||||
<!-- Node agents cards section -->
|
||||
<div layout="row" layout-align="start stretch" ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck.status">
|
||||
<div layout="row" layout-align="start stretch"
|
||||
ng-show="currentNode && currentNode.healthCheck && currentNode.healthCheck.status">
|
||||
|
||||
<!-- Agents sync card -->
|
||||
<md-card flex class="wz-md-card">
|
||||
@ -91,7 +103,8 @@
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Last sync</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_agentinfo.date_end_master}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_agentinfo.date_end_master}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Duration</span>
|
||||
@ -99,7 +112,8 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Total agent info</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_agentinfo.total_agentinfo}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_agentinfo.total_agentinfo}}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
@ -112,7 +126,8 @@
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Last sync</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_agentgroups.date_end_master}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_agentgroups.date_end_master}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Duration</span>
|
||||
@ -120,7 +135,8 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="30">Total agent info</span>
|
||||
<span class="color-grey">{{currentNode.healthCheck.status.last_sync_agentgroups.total_agentgroups}}</span>
|
||||
<span
|
||||
class="color-grey">{{currentNode.healthCheck.status.last_sync_agentgroups.total_agentgroups}}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
|
@ -1,11 +1,14 @@
|
||||
<div layout="column" ng-if="showNodes && !currentNode">
|
||||
<div layout="column" ng-if="showNodes && !currentNode" class="wz-margin-top-10">
|
||||
<!-- Back button -->
|
||||
<div layout="row" class="md-padding-h">
|
||||
<md-button class="md-icon-button md-icon-button-back wz-padding-right-16 btn btn-info" aria-label="Back" tooltip="Go back"
|
||||
tooltip-placement="bottom" ng-click="goBack()"><i class="fa fa-fw fa-arrow-left" aria-hidden="true"></i></md-button>
|
||||
<input placeholder="Filter nodes..." ng-model="custom_search" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="search(custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="search(custom_search)">
|
||||
<md-button class="md-icon-button md-icon-button-back wz-padding-right-16 btn btn-info" aria-label="Back"
|
||||
tooltip="Go back" tooltip-placement="bottom" ng-click="goBack()"><i class="fa fa-fw fa-arrow-left"
|
||||
aria-hidden="true"></i></md-button>
|
||||
<input placeholder="Filter nodes..." ng-model="custom_search" type="text"
|
||||
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid" aria-invalid="false"
|
||||
wz-enter="search(custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40"
|
||||
ng-click="search(custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -1,4 +1,5 @@
|
||||
<div layout="column" layout-align="start stretch" ng-controller="reportingController as ctrl" ng-if="mctrl.tab === 'reporting'">
|
||||
<div layout="column" layout-align="start stretch" ng-controller="reportingController as ctrl"
|
||||
ng-if="mctrl.tab === 'reporting'">
|
||||
|
||||
<!-- Loading ring -->
|
||||
<div class='uil-ring-css' ng-show="ctrl.loading">
|
||||
@ -6,35 +7,39 @@
|
||||
</div>
|
||||
<!-- End loading ring -->
|
||||
|
||||
<!-- Headline -->
|
||||
<div ng-show="!ctrl.loading" layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-file-text" aria-hidden="true"></i> Reporting</span>
|
||||
<span class="md-subheader">List and download all the Wazuh app reports</span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
<!-- No reports section -->
|
||||
<div layout="row" layout-align="start start" ng-show="!ctrl.loading && (!ctrl.pagedItems || !ctrl.pagedItems.length)">
|
||||
<div layout="row" class="wz-margin-top-16" layout-align="start start"
|
||||
ng-show="!ctrl.loading && (!ctrl.pagedItems || !ctrl.pagedItems.length)">
|
||||
<md-card flex class="wz-md-card" flex>
|
||||
<md-card-content class="wz-text-center">
|
||||
<i class="fa fa-fw fa-info-circle" aria-hidden="true"></i> <span class="wz-headline-title">No reports available</span>
|
||||
<i class="fa fa-fw fa-info-circle" aria-hidden="true"></i> <span class="wz-headline-title">No reports
|
||||
available</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="column" class="wz-padding-top-10">
|
||||
<p>There are no reports yet. Go to the Overview or Agents tabs and click on the <i class="fa fa-fw fa-print" aria-hidden="true"></i> icon to create one.</p>
|
||||
<p>There are no reports yet. Go to the Overview or Agents tabs and click on the <i
|
||||
class="fa fa-fw fa-print" aria-hidden="true"></i> icon to create one.</p>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<!-- End no reports section -->
|
||||
|
||||
<div layout="row" ng-show="!ctrl.loading && ctrl.pagedItems && ctrl.pagedItems.length">
|
||||
<md-button class="wz-report-refresh-btn" ng-click="ctrl.load()"><i class="fa fa-fw fa-refresh"></i> Refresh</md-button>
|
||||
<div layout="row" class="wz-margin-top-16" ng-show="!ctrl.loading && ctrl.pagedItems && ctrl.pagedItems.length">
|
||||
<span flex></span>
|
||||
<md-button ng-click="ctrl.load()"><svg class="euiIcon euiIcon--medium" focusable="false"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M11.228 2.942a.5.5 0 1 1-.538.842A5 5 0 1 0 13 8a.5.5 0 1 1 1 0 6 6 0 1 1-2.772-5.058zM14 1.5v3A1.5 1.5 0 0 1 12.5 6h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 1 1 1 0z">
|
||||
</path>
|
||||
</svg>
|
||||
Refresh
|
||||
</md-button>
|
||||
</div>
|
||||
<div layout="row" ng-show="!ctrl.loading && ctrl.pagedItems && ctrl.pagedItems.length">
|
||||
<md-card flex class="wz-md-card">
|
||||
|
||||
<md-card-content>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<table class="table table-striped table-condensed" id="wz_table">
|
||||
<table class="table table-striped table-condensed wz-margin-bottom-40-inv" id="wz_table">
|
||||
<thead class="wz-text-bold">
|
||||
<th class="wz-text-left">File</th>
|
||||
<th class="wz-text-left">Size</th>
|
||||
@ -48,10 +53,27 @@
|
||||
<td>{{item.date.split('T')[0]}} {{item.date.split('T')[1].split('.')[0]}}</td>
|
||||
<td>
|
||||
<a ng-href="/reports/{{item.name}}" flex class="wz-text-right" target="_blank">
|
||||
<i class="fa fa-fw fa-download"></i>
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false"
|
||||
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
|
||||
viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
</a>
|
||||
<a flex class="wz-text-right cursor-pointer" ng-click="ctrl.deleteReport(item.name)">
|
||||
<i class="fa fa-fw fa-trash"></i>
|
||||
<a flex class="wz-text-right cursor-pointer"
|
||||
ng-click="ctrl.deleteReport(item.name)">
|
||||
<svg class="euiIcon euiIcon--medium euiButton__icon" focusable="false"
|
||||
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="trash-a"
|
||||
d="M11 3h5v1H0V3h5V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#trash-a"></use>
|
||||
</svg>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
@ -65,12 +87,13 @@
|
||||
</li>
|
||||
|
||||
<li ng-repeat="n in ctrl.range(ctrl.pagedItems.length, ctrl.currentPage, ctrl.currentPage + ctrl.gap) "
|
||||
ng-class="{active: n == ctrl.currentPage}"
|
||||
ng-click="ctrl.setPage(n)" class="md-padding">
|
||||
ng-class="{active: n == ctrl.currentPage}" ng-click="ctrl.setPage(n)"
|
||||
class="md-padding">
|
||||
<a href ng-bind="n + 1">1</a>
|
||||
</li>
|
||||
|
||||
<li ng-class="{disabled: (ctrl.currentPage) == ctrl.pagedItems.length - 1}" class="md-padding">
|
||||
<li ng-class="{disabled: (ctrl.currentPage) == ctrl.pagedItems.length - 1}"
|
||||
class="md-padding">
|
||||
<a href ng-click="ctrl.nextPage()">Next »</a>
|
||||
</li>
|
||||
</ul>
|
||||
@ -83,4 +106,4 @@
|
||||
</md-card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
@ -1,48 +1,73 @@
|
||||
<div ng-if="!cdbctrl.viewingDetail" layout="column">
|
||||
<div id="content" layout="row" class="md-padding ">
|
||||
<input flex placeholder="Filter lists..." ng-model="cdbctrl.custom_search" type="text" class="kuiLocalSearchInput height-40 ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
|
||||
<div layout="row"
|
||||
class="euiFlexGroup euiFlexGroup--alignItemsCenter euiFormControlLayout__childrenWrapper md-padding-h ng-scope wz-margin-top-16"
|
||||
ng-if="!dctrl.editingFile && !mctrl.filesSubTab">
|
||||
<input placeholder="Filter lists..." ng-model="cdbctrl.custom_search" type="text"
|
||||
class="euiFieldSearch euiFieldSearch--fullWidth euiFlexItem height-35 ng-empty ng-pristine ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="cdbctrl.search(cdbctrl.custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="cdbctrl.search(cdbctrl.custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
<div class="euiFormControlLayoutIcons wz-margin-left-16"><span class="euiFormControlLayoutCustomIcon"><svg
|
||||
class="euiIcon euiIcon--medium euiFormControlLayoutCustomIcon__icon" focusable="false"
|
||||
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="search-a"
|
||||
d="M11.271 11.978l3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#search-a"></use>
|
||||
</svg></span></div>
|
||||
|
||||
<button type="submit" aria-label="Search"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary wz-margin-left-8"
|
||||
ng-click="cdbctrl.search(cdbctrl.custom_search)">
|
||||
Search
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<md-chips class="wz-chips md-padding-h" readonly="true" ng-show="cdbctrl.appliedFilters.length">
|
||||
<md-chips class="wz-chips md-padding-h wz-margin-top-16" readonly="true" ng-show="cdbctrl.appliedFilters.length">
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('file')">
|
||||
<span>File: {{cdbctrl.getFilter('file')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('file')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="cdbctrl.removeFilter('file')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('path')">
|
||||
<span>Path: {{cdbctrl.getFilter('path')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('path')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="cdbctrl.removeFilter('path')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('level')">
|
||||
<span>Level: {{cdbctrl.getFilter('level')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('level')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="cdbctrl.removeFilter('level')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('group')">
|
||||
<span>Group: {{cdbctrl.getFilter('group')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('group')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="cdbctrl.removeFilter('group')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('pci')">
|
||||
<span>PCI control: {{cdbctrl.getFilter('pci')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('pci')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="cdbctrl.removeFilter('pci')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('gdpr')">
|
||||
<span>GDPR: {{cdbctrl.getFilter('gdpr')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('gdpr')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="cdbctrl.removeFilter('gdpr')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
</md-chips>
|
||||
|
||||
<div layout="row">
|
||||
<div layout="row" class="wz-margin-top-16">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-actions ng-if="cdbctrl.adminMode" layout="row" layout-align="end center" class="wz-card-actions wz-card-actions-top">
|
||||
<md-card-actions ng-if="cdbctrl.adminMode" layout="row" layout-align="end center"
|
||||
class="wz-card-actions wz-card-actions-top">
|
||||
<a ng-click="cdbctrl.addNewList()">Add new list</a>
|
||||
<span flex></span>
|
||||
</md-card-actions>
|
||||
@ -51,9 +76,19 @@
|
||||
keys="['name', 'path']" allow-click="true" row-sizes="[15,13,11]">
|
||||
</wz-table>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="cdbctrl.downloadCsv()">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<md-card-actions layout="row" layout-align="end center" class="layout-align-end-center layout-row">
|
||||
<button type="button" ng-click="cdbctrl.downloadCsv()"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
|
@ -2,8 +2,9 @@
|
||||
<!-- Back button and title -->
|
||||
<div layout="row" layout-align="start center" ng-show="!dctrl.editingFile">
|
||||
<!-- Back button -->
|
||||
<md-button class="md-icon-button" style="margin: 5px!important;" aria-label="Back to decoders list" tooltip="Back"
|
||||
tooltip-placement="bottom" ng-click="dctrl.closeDetailView()"><i class="fa fa-fw fa-arrow-left" aria-hidden="true"></i></md-button>
|
||||
<md-button class="md-icon-button" style="margin: 5px!important;" aria-label="Back to decoders list"
|
||||
tooltip="Back" tooltip-placement="bottom" ng-click="dctrl.closeDetailView()"><i
|
||||
class="fa fa-fw fa-arrow-left" aria-hidden="true"></i></md-button>
|
||||
<!-- Rule title -->
|
||||
<div>
|
||||
<h1 class="font-size-18">{{dctrl.currentDecoder.name}}</h1>
|
||||
@ -15,22 +16,38 @@
|
||||
<div layout="row" class="wz-padding-left-8 wz-padding-right-8" ng-show="!dctrl.editingFile">
|
||||
<md-card flex class="wz-metric-color wz-md-card">
|
||||
<md-card-content layout="row" class="wz-padding-metric">
|
||||
<div flex="20" ng-if="dctrl.currentDecoder.position || dctrl.currentDecoder.position == 0" class="wz-text-truncatable">Position:
|
||||
<div flex="20" ng-if="dctrl.currentDecoder.position || dctrl.currentDecoder.position == 0"
|
||||
class="wz-text-truncatable">Position:
|
||||
<span class="wz-text-bold">{{dctrl.currentDecoder.position}}</span></div>
|
||||
<div flex="40" ng-if="dctrl.currentDecoder.file" class="wz-text-truncatable">File: <span class="wz-text-bold wz-text-link"
|
||||
ng-click="dctrl.addDetailFilter('file', dctrl.currentDecoder.file)" tooltip="Filter by this file"
|
||||
tooltip-placement="bottom">{{dctrl.currentDecoder.file}}</span></div>
|
||||
<div flex="40" ng-if="dctrl.currentDecoder.path" class="wz-text-truncatable">Path: <span class="wz-text-bold wz-text-link"
|
||||
ng-click="dctrl.addDetailFilter('path', dctrl.currentDecoder.path)" tooltip="Filter by this path"
|
||||
tooltip-placement="bottom">{{dctrl.currentDecoder.path}}</span></div>
|
||||
<div flex="40" ng-if="dctrl.currentDecoder.file" class="wz-text-truncatable">File: <span
|
||||
class="wz-text-bold wz-text-link"
|
||||
ng-click="dctrl.addDetailFilter('file', dctrl.currentDecoder.file)"
|
||||
tooltip="Filter by this file" tooltip-placement="bottom">{{dctrl.currentDecoder.file}}</span>
|
||||
</div>
|
||||
<div flex="40" ng-if="dctrl.currentDecoder.path" class="wz-text-truncatable">Path: <span
|
||||
class="wz-text-bold wz-text-link"
|
||||
ng-click="dctrl.addDetailFilter('path', dctrl.currentDecoder.path)"
|
||||
tooltip="Filter by this path" tooltip-placement="bottom">{{dctrl.currentDecoder.path}}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<!-- End Decoder information ribbon -->
|
||||
|
||||
<div layout="row" class="md-padding" ng-if="!dctrl.editingFile && dctrl.currentDecoder.file && dctrl.currentDecoder.path === 'etc/decoders' && adminMode">
|
||||
<button ng-click='dctrl.editDecodersConfig(dctrl.currentDecoder)' class='btn wz-button'><i aria-hidden='true'
|
||||
class='fa fa-fw fa-pencil'></i>
|
||||
<div layout="row" class="md-padding"
|
||||
ng-if="!dctrl.editingFile && dctrl.currentDecoder.file && dctrl.currentDecoder.path === 'etc/decoders' && adminMode">
|
||||
<button ng-click='dctrl.editDecodersConfig(dctrl.currentDecoder)'
|
||||
class="height-35 kuiButton kuiButton--secondary">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false" 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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
Edit {{ dctrl.currentDecoder.file }}
|
||||
</button>
|
||||
</div>
|
||||
@ -45,14 +62,19 @@
|
||||
<md-card-content>
|
||||
<span class="wz-headline-title"><i class="fa fa-fw fa-info" aria-hidden="true"></i> Details</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" layout-wrap class="wz-padding-top-10" ng-repeat="(key, value) in dctrl.currentDecoder.details">
|
||||
<div layout="row" layout-wrap class="wz-padding-top-10"
|
||||
ng-repeat="(key, value) in dctrl.currentDecoder.details">
|
||||
<span flex="20">{{key}}</span>
|
||||
<div ng-if="!dctrl.isArray(value)">
|
||||
<span class="wz-text-right color-grey" ng-if="key !== 'regex' && key !== 'order'">{{value}}</span>
|
||||
<span class="wz-text-right color-grey" ng-if="key == 'regex'" ng-bind-html="dctrl.colorRegex(value)"></span>
|
||||
<span class="wz-text-right color-grey" ng-if="key == 'order'" ng-bind-html="dctrl.colorOrder(value)"></span>
|
||||
<span class="wz-text-right color-grey"
|
||||
ng-if="key !== 'regex' && key !== 'order'">{{value}}</span>
|
||||
<span class="wz-text-right color-grey" ng-if="key == 'regex'"
|
||||
ng-bind-html="dctrl.colorRegex(value)"></span>
|
||||
<span class="wz-text-right color-grey" ng-if="key == 'order'"
|
||||
ng-bind-html="dctrl.colorOrder(value)"></span>
|
||||
</div>
|
||||
<span ng-if="dctrl.isArray(value)" ng-repeat="v in value track by $index" class="wz-text-right color-grey">{{v}}{{$last
|
||||
<span ng-if="dctrl.isArray(value)" ng-repeat="v in value track by $index"
|
||||
class="wz-text-right color-grey">{{v}}{{$last
|
||||
? '' : ', '}}</span>
|
||||
</div>
|
||||
</md-card-content>
|
||||
@ -94,7 +116,8 @@
|
||||
<!-- Prematch section -->
|
||||
<md-card flex class="wz-md-card" ng-if="dctrl.isArray(dctrl.currentDecoder.details.prematch)">
|
||||
<md-card-content>
|
||||
<span class="wz-headline-title"><i class="fa fa-fw fa-retweet" aria-hidden="true"></i> Prematch</span>
|
||||
<span class="wz-headline-title"><i class="fa fa-fw fa-retweet" aria-hidden="true"></i>
|
||||
Prematch</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div ng-repeat="item in dctrl.currentDecoder.details.prematch">
|
||||
<div layout="row" layout-wrap class="wz-padding-top-10">
|
||||
@ -115,7 +138,8 @@
|
||||
<div layout="row" ng-if="dctrl.currentDecoder">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-content>
|
||||
<wz-table custom-columns="true" flex path="'/decoders'" implicit-filter="[{ name:'file',value: dctrl.currentDecoder.file}]"
|
||||
<wz-table custom-columns="true" flex path="'/decoders'"
|
||||
implicit-filter="[{ name:'file',value: dctrl.currentDecoder.file}]"
|
||||
keys="['name',{value:'details.program_name',size:2,nosortable:true},{value:'details.order',size:2,nosortable:true},'file']"
|
||||
allow-click="true" />
|
||||
</md-card-content>
|
||||
@ -131,10 +155,13 @@
|
||||
<div layout="column" layout-align="start" ng-show="dctrl.editingFile">
|
||||
<div layout="row">
|
||||
<span ng-click='dctrl.closeEditingFile()' class='btn btn-info'>Close</span>
|
||||
<button ng-disabled='dctrl.xmlHasErrors || dctrl.doingSaving' ng-click='dctrl.doSaveConfig()' class='btn wz-button pull-right wz-margin-left-8'>
|
||||
<span ng-show='!dctrl.xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save' ng-class="dctrl.doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
<button ng-disabled='dctrl.xmlHasErrors || dctrl.doingSaving' ng-click='dctrl.doSaveConfig()'
|
||||
class='btn wz-button pull-right wz-margin-left-8'>
|
||||
<span ng-show='!dctrl.xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save'
|
||||
ng-class="dctrl.doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
file</span>
|
||||
<span ng-show='dctrl.xmlHasErrors' class='btn-danger'><i aria-hidden='true' class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
<span ng-show='dctrl.xmlHasErrors' class='btn-danger'><i aria-hidden='true'
|
||||
class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
XML format error</span>
|
||||
</button>
|
||||
<button class="btn wz-button" type="button" ng-show="dctrl.restartBtn" ng-disabled="dctrl.doingSaving"
|
||||
@ -143,7 +170,8 @@
|
||||
</div>
|
||||
<div class="wz-padding-top-14" ng-if="dctrl.fetchedXML" style="height: calc(100vh - 220px);">
|
||||
<wz-xml-file-editor file-name='decoders' data="dctrl.fetchedXML" target-name="dctrl.currentDecoder.file"
|
||||
valid-fn='dctrl.xmlIsValid(valid)' saving-param='dctrl.toggleSaveConfig()' close-fn='dctrl.closeEditingFile(reload)'>
|
||||
valid-fn='dctrl.xmlIsValid(valid)' saving-param='dctrl.toggleSaveConfig()'
|
||||
close-fn='dctrl.closeEditingFile(reload)'>
|
||||
</wz-xml-file-editor>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,27 +1,46 @@
|
||||
<div ng-if="!loading && !dctrl.viewingDetail" layout="column">
|
||||
<div id="content" layout="row" layout-align="start start" class="md-padding" ng-if="!dctrl.editingFile && !mctrl.filesSubTab">
|
||||
<input flex placeholder="Filter decoders..." ng-model="dctrl.custom_search" type="text" class="kuiLocalSearchInput height-40"
|
||||
<div layout="row"
|
||||
class="euiFlexGroup euiFlexGroup--alignItemsCenter euiFormControlLayout__childrenWrapper md-padding-h ng-scope wz-margin-top-16"
|
||||
ng-if="!dctrl.editingFile && !mctrl.filesSubTab">
|
||||
<input placeholder="Filter decoders..." ng-model="dctrl.custom_search" type="text"
|
||||
class="euiFieldSearch euiFieldSearch--fullWidth euiFlexItem height-35 ng-empty ng-pristine ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="dctrl.search(dctrl.custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="dctrl.search(dctrl.custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
<div class="euiFormControlLayoutIcons wz-margin-left-16"><span class="euiFormControlLayoutCustomIcon"><svg
|
||||
class="euiIcon euiIcon--medium euiFormControlLayoutCustomIcon__icon" focusable="false"
|
||||
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="search-a"
|
||||
d="M11.271 11.978l3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#search-a"></use>
|
||||
</svg></span></div>
|
||||
|
||||
<button type="submit" aria-label="Search"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary wz-margin-left-8"
|
||||
ng-click="dctrl.search(dctrl.custom_search)">
|
||||
Search
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<md-chips class="wz-chips md-padding-h wz-padding-bottom-14" readonly="true" ng-show="dctrl.appliedFilters.length"
|
||||
<md-chips class="wz-chips md-padding-h wz-margin-top-16" readonly="true" ng-show="dctrl.appliedFilters.length"
|
||||
ng-if="!dctrl.editingFile">
|
||||
<md-chip class="wz-chip" ng-show="dctrl.includesFilter('file')">
|
||||
<span>File: {{ dctrl.getFilter('file') }}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="dctrl.removeFilter('file')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="dctrl.removeFilter('file')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="dctrl.includesFilter('path')">
|
||||
<span>Path: {{ dctrl.getFilter('path') }}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="dctrl.removeFilter('path')"></i>
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true"
|
||||
ng-click="dctrl.removeFilter('path')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
</md-chips>
|
||||
|
||||
<div layout="row">
|
||||
<div layout="row" class="wz-margin-top-16">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h" ng-if="!dctrl.editingFile && !mctrl.filesSubTab">
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions wz-card-actions-top">
|
||||
<a ng-if="adminMode" ng-click="mctrl.switchFilesSubTab('decoders')">Manage decoders files</a>
|
||||
@ -30,16 +49,29 @@
|
||||
switch-text="Custom decoders"></wz-kbn-switch>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wz-padding-bottom-0">
|
||||
<wz-table custom-columns="true" ng-if="!dctrl.showingLocalDecoders" implicit-filter="dctrl.appliedFilters"
|
||||
flex path="'/decoders'" keys="['name',{value:'details.program_name',size:2,nosortable:true},{value:'details.order',size:2,nosortable:true},'file']"
|
||||
<wz-table custom-columns="true" ng-if="!dctrl.showingLocalDecoders"
|
||||
implicit-filter="dctrl.appliedFilters" flex path="'/decoders'"
|
||||
keys="['name',{value:'details.program_name',size:2,nosortable:true},{value:'details.order',size:2,nosortable:true},'file']"
|
||||
allow-click="true" row-sizes="[16,13,11]">
|
||||
</wz-table>
|
||||
<wz-table custom-columns="true" ng-if="dctrl.showingLocalDecoders" flex path="'/decoders'" keys="['name',{value:'details.program_name',size:2,nosortable:true},{value:'details.order',size:2,nosortable:true},'file']"
|
||||
implicit-filter="[{ name:'path',value: 'etc/decoders'}]" allow-click="true" row-sizes="[16,13,11]"></wz-table>
|
||||
<wz-table custom-columns="true" ng-if="dctrl.showingLocalDecoders" flex path="'/decoders'"
|
||||
keys="['name',{value:'details.program_name',size:2,nosortable:true},{value:'details.order',size:2,nosortable:true},'file']"
|
||||
implicit-filter="[{ name:'path',value: 'etc/decoders'}]" allow-click="true" row-sizes="[16,13,11]">
|
||||
</wz-table>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="dctrl.downloadCsv()">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<md-card-actions layout="row" layout-align="end center" class="layout-align-end-center layout-row">
|
||||
<button type="button" ng-click="dctrl.downloadCsv()"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
|
@ -1,11 +1,14 @@
|
||||
<div ng-if="!files.viewingDetail" ng-show="!editingFile" layout="column" ng-init="filesctrl.switchFilesSubTab(mctrl.globalRulesetTab)">
|
||||
<div ng-if="!files.viewingDetail" ng-show="!editingFile" layout="column"
|
||||
ng-init="filesctrl.switchFilesSubTab(mctrl.globalRulesetTab)">
|
||||
<div id="content" layout="row" class="md-padding">
|
||||
<md-button class="md-icon-button md-icon-button-back wz-padding-right-16 btn btn-info" aria-label="Back to list"
|
||||
tooltip="Back" tooltip-placement="bottom" ng-click="mctrl.setRulesTab(filesctrl.filesSubTab)"><i class="fa fa-fw fa-arrow-left"
|
||||
aria-hidden="true"></i></md-button>
|
||||
<input flex placeholder="Filter files..." ng-model="filesctrl.custom_search" type="text" class="kuiLocalSearchInput height-40 ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="filesctrl.search(filesctrl.custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="filesctrl.search(filesctrl.custom_search)">
|
||||
tooltip="Back" tooltip-placement="bottom" ng-click="mctrl.setRulesTab(filesctrl.filesSubTab)"><i
|
||||
class="fa fa-fw fa-arrow-left" aria-hidden="true"></i></md-button>
|
||||
<input flex placeholder="Filter files..." ng-model="filesctrl.custom_search" type="text"
|
||||
class="kuiLocalSearchInput height-40 ng-empty ng-pristine ng-scope ng-touched ng-valid" aria-invalid="false"
|
||||
wz-enter="filesctrl.search(filesctrl.custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40"
|
||||
ng-click="filesctrl.search(filesctrl.custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
@ -17,10 +20,12 @@
|
||||
<span flex></span>
|
||||
</md-card-actions>
|
||||
<md-card-content>
|
||||
<wz-table ng-if="filesctrl.filesSubTab === 'rules'" implicit-filter="[{ name:'path',value: 'etc/rules'}]"
|
||||
flex path="'/rules/files'" keys="[{value: 'file', width: '75px'}]" allow-click="true" row-sizes="[16,13,11]"></wz-table>
|
||||
<wz-table ng-if="filesctrl.filesSubTab === 'decoders'" implicit-filter="[{ name:'path',value: 'etc/decoders'}]"
|
||||
flex path="'/decoders/files'" keys="[{value: 'file', width: '75px'}]" allow-click="true" row-sizes="[16,13,11]"></wz-table>
|
||||
<wz-table ng-if="filesctrl.filesSubTab === 'rules'"
|
||||
implicit-filter="[{ name:'path',value: 'etc/rules'}]" flex path="'/rules/files'"
|
||||
keys="[{value: 'file', width: '75px'}]" allow-click="true" row-sizes="[16,13,11]"></wz-table>
|
||||
<wz-table ng-if="filesctrl.filesSubTab === 'decoders'"
|
||||
implicit-filter="[{ name:'path',value: 'etc/decoders'}]" flex path="'/decoders/files'"
|
||||
keys="[{value: 'file', width: '75px'}]" allow-click="true" row-sizes="[16,13,11]"></wz-table>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
@ -30,32 +35,39 @@
|
||||
<div layout="row" class="wz-padding-bottom-14">
|
||||
<div ng-if="!newFile">
|
||||
<span ng-click='closeEditingFile()' class='btn btn-info'>Cancel</span>
|
||||
<button ng-disabled='xmlHasErrors || doingSaving' ng-click='doSaveConfig(false)' class='btn wz-button pull-right wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save' ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
<button ng-disabled='xmlHasErrors || doingSaving' ng-click='doSaveConfig(false)'
|
||||
class='btn wz-button pull-right wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save'
|
||||
ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
file</span>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true' class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true'
|
||||
class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
XML format error</span>
|
||||
</button>
|
||||
</div>
|
||||
<div ng-if="newFile" layout="row" class="wz-width-100">
|
||||
<span ng-click='closeEditingFile()' class='btn btn-info'>Cancel</span>
|
||||
<button ng-disabled='xmlHasErrors || newFileName === "" || doingSaving || overwriteError' ng-click='doSaveConfig(true,newFileName)'
|
||||
class='btn wz-button wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save' ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
<button ng-disabled='xmlHasErrors || newFileName === "" || doingSaving || overwriteError'
|
||||
ng-click='doSaveConfig(true,newFileName)' class='btn wz-button wz-margin-left-8'>
|
||||
<span ng-show='!xmlHasErrors'><i aria-hidden='true' class='fa fa-fw fa-save'
|
||||
ng-class="doingSaving ? 'fa-spin fa-spinner' : ''"></i>Save
|
||||
file</span>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true' class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
<span ng-show='xmlHasErrors' class='btn-danger'><i aria-hidden='true'
|
||||
class='fa fa-fw fa-exclamation-triangle'></i>
|
||||
XML format error</span>
|
||||
</button>
|
||||
<input placeholder="{{type === 'rules' ? 'Eg: my_local_rule.xml' : 'Eg: my_local_decoder.xml'}}"
|
||||
ng-model="newFileName" type="text" class="wz-margin-left-8 kuiLocalSearchInput" aria-invalid="false"
|
||||
ng-change="cancelSaveAndOverwrite()">
|
||||
<button ng-show="restartBtn" class="btn wz-button" type="button" ng-disabled="doingSaving" ng-click="restart(); toggleRestartMsg()">Restart
|
||||
<button ng-show="restartBtn" class="btn wz-button" type="button" ng-disabled="doingSaving"
|
||||
ng-click="restart(); toggleRestartMsg()">Restart
|
||||
now</button>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="fetchedXML" style="height: calc(100vh - 220px);">
|
||||
<wz-xml-file-editor file-name='{{type}}' data="fetchedXML" target-name="newFile ? selectedItem.file : currentFile.file"
|
||||
valid-fn='xmlIsValid(valid)' saving-param='toggleSaveConfig()' close-fn='closeEditingFile(reload)'>
|
||||
<wz-xml-file-editor file-name='{{type}}' data="fetchedXML"
|
||||
target-name="newFile ? selectedItem.file : currentFile.file" valid-fn='xmlIsValid(valid)'
|
||||
saving-param='toggleSaveConfig()' close-fn='closeEditingFile(reload)'>
|
||||
</wz-xml-file-editor>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -31,8 +31,19 @@
|
||||
</div>
|
||||
<!-- End Rule information ribbon -->
|
||||
|
||||
<div layout="row" class="md-padding" ng-if="!editingFile && currentRule.file && currentRule.path === 'etc/rules' && adminMode">
|
||||
<button ng-click='editRulesConfig(currentRule)' class='btn wz-button'><i aria-hidden='true' class='fa fa-fw fa-pencil'></i>
|
||||
<div layout="row" class="md-padding"
|
||||
ng-if="!editingFile && currentRule.file && currentRule.path === 'etc/rules' && adminMode">
|
||||
<button ng-click='editRulesConfig(currentRule)' class="height-35 kuiButton kuiButton--secondary">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false" 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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
Edit {{ currentRule.file }}
|
||||
</button>
|
||||
</div>
|
||||
|
@ -1,13 +1,32 @@
|
||||
<div ng-if="!loading && !viewingDetail" layout="column">
|
||||
<div id="content" layout="row" class="md-padding" ng-if="!mctrl.filesSubTab">
|
||||
<input flex placeholder="Filter rules..." ng-model="custom_search" type="text" class="kuiLocalSearchInput height-40"
|
||||
|
||||
<div layout="row"
|
||||
class="euiFlexGroup euiFlexGroup--alignItemsCenter euiFormControlLayout__childrenWrapper md-padding-h ng-scope wz-margin-top-16"
|
||||
ng-if="!mctrl.filesSubTab">
|
||||
<input placeholder="Filter rules..." ng-model="custom_search" type="text"
|
||||
class="euiFieldSearch euiFieldSearch--fullWidth euiFlexItem height-35 ng-empty ng-pristine ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="search(custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="search(custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
<div class="euiFormControlLayoutIcons wz-margin-left-16"><span class="euiFormControlLayoutCustomIcon"><svg
|
||||
class="euiIcon euiIcon--medium euiFormControlLayoutCustomIcon__icon" focusable="false"
|
||||
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="search-a"
|
||||
d="M11.271 11.978l3.872 3.873a.502.502 0 0 0 .708 0 .502.502 0 0 0 0-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 0 0 4.949 2.05.5.5 0 0 0 0-1 5.96 5.96 0 0 1-4.242-1.757 6.01 6.01 0 0 1 0-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 0 1 0 8.486.5.5 0 0 0 .034.738z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#search-a"></use>
|
||||
</svg></span></div>
|
||||
|
||||
<button type="submit" aria-label="Search"
|
||||
class="euiFlexItem euiFlexItem--flexGrowZero height-35 kuiButton kuiButton--secondary wz-margin-left-8"
|
||||
ng-click="search(custom_search)">
|
||||
Search
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<md-chips class="wz-chips md-padding-h wz-padding-bottom-14" readonly="true" ng-show="appliedFilters.length" ng-if="!editingFile && !mctrl.filesSubTab">
|
||||
<md-chips class="wz-chips md-padding-h wz-margin-top-16" readonly="true" ng-show="appliedFilters.length"
|
||||
ng-if="!editingFile && !mctrl.filesSubTab">
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('file')">
|
||||
<span>File: {{getFilter('file')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('file')"></i>
|
||||
@ -40,7 +59,7 @@
|
||||
</md-chip>
|
||||
</md-chips>
|
||||
|
||||
<div layout="row" ng-if="!editingFile">
|
||||
<div layout="row" ng-if="!editingFile" class="wz-margin-top-16">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions wz-card-actions-top">
|
||||
<a ng-if="adminMode" ng-click="mctrl.switchFilesSubTab('rules')">Manage
|
||||
@ -50,17 +69,29 @@
|
||||
switch-text="Custom rules"></wz-kbn-switch>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wz-padding-bottom-0">
|
||||
<wz-table custom-columns="true" flex ng-if="mctrl.showingLocalRules" path="'/rules'" keys="[{value: 'id', width: '75px'},{value:'description',size:2},{value:'groups',nosortable:true,size:2},{value:'pci',nosortable:true,size:2},{value:'gdpr',nosortable:true},{value: 'level', width: '100px'},{value:'file',size:2}]"
|
||||
<wz-table custom-columns="true" flex ng-if="mctrl.showingLocalRules" path="'/rules'"
|
||||
keys="[{value: 'id', width: '75px'},{value:'description',size:2},{value:'groups',nosortable:true,size:2},{value:'pci',nosortable:true,size:2},{value:'gdpr',nosortable:true},{value: 'level', width: '100px'},{value:'file',size:2}]"
|
||||
implicit-filter="[{ name:'path',value: 'etc/rules'}]" allow-click="true" row-sizes="[16,13,11]">
|
||||
</wz-table>
|
||||
<wz-table custom-columns="true" ng-if="!mctrl.showingLocalRules" implicit-filter="appliedFilters" flex path="'/rules'"
|
||||
<wz-table custom-columns="true" ng-if="!mctrl.showingLocalRules" implicit-filter="appliedFilters" flex
|
||||
path="'/rules'"
|
||||
keys="[{value: 'id', width: '75px'},{value:'description',size:2},{value:'groups',nosortable:true,size:2},{value:'pci',nosortable:true,size:2},{value:'gdpr',nosortable:true}, {value: 'level', width: '100px'}, {value:'file',size:2}]"
|
||||
allow-click="true" row-sizes="[16,13,11]">
|
||||
</wz-table>
|
||||
</md-card-content>
|
||||
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions layout-align-end-center layout-row">
|
||||
<a class="wz-text-link cursor-pointer small md-button md-ink-ripple" id="btnDownload" ng-click="downloadCsv()">Formatted
|
||||
<i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<md-card-actions layout="row" layout-align="end center" class="layout-align-end-center layout-row">
|
||||
<button type="button" ng-click="downloadCsv()"
|
||||
class="euiButtonEmpty euiButtonEmpty--primary euiButtonEmpty--small">
|
||||
<span class="euiButtonEmpty__content">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonEmpty__icon" focusable="false" aria-hidden="true"
|
||||
xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M9 10.114l1.85-1.943a.52.52 0 0 1 .77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 0 1-2.31 0L5.41 9a.617.617 0 0 1 0-.829.52.52 0 0 1 .77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 0 0-.972.804l-1.189 6A.995.995 0 0 0 2.991 14h11.018a1 1 0 0 0 .972-1.196l-1.19-6a.993.993 0 0 0-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0 1 14.016 15H2.984a1.992 1.992 0 0 1-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z">
|
||||
</path>
|
||||
</svg>
|
||||
<span class="euiButtonEmpty__text">Formatted</span>
|
||||
</span>
|
||||
</button>
|
||||
</md-card-actions>
|
||||
</md-card>
|
||||
</div>
|
||||
|
@ -1,11 +1,5 @@
|
||||
<div flex="auto" layout="column" ng-if="mctrl.globalRuleSet == 'ruleset'" class=" mozilla-table-size-85">
|
||||
<div>
|
||||
<!-- Headline -->
|
||||
<!--<div layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-file-text-o" aria-hidden="true"></i> Ruleset</span>
|
||||
<span class="md-subheader">Review all your current rules, decoders and CDB lists</span>
|
||||
</div>-->
|
||||
<!-- End headline -->
|
||||
<!-- End group actions -->
|
||||
<md-nav-bar class="wz-nav-bar nav-bar-white-bg " md-selected-nav-item="mctrl.globalRulesetTab">
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="mctrl.setRulesTab('rules')" name="rules">Rules</md-nav-item>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div layout="column" layout-align="start stretch" ng-controller="managerStatusController as ctrl" ng-if="mctrl.tab === 'status'"
|
||||
class="">
|
||||
<div layout="column" layout-align="start stretch" ng-controller="managerStatusController as ctrl"
|
||||
ng-if="mctrl.tab === 'status'" class="">
|
||||
|
||||
<!-- Loading ring -->
|
||||
<div class='uil-ring-css' ng-show="ctrl.load">
|
||||
@ -7,27 +7,24 @@
|
||||
</div>
|
||||
|
||||
<!-- Headline -->
|
||||
<div ng-show="!ctrl.load" layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-heartbeat" aria-hidden="true"></i> Status</span>
|
||||
<span class="md-subheader">Check the status of all Wazuh manager daemons <span ng-show="ctrl.selectedNode">({{ctrl.selectedNode}})</span></span>
|
||||
</div>
|
||||
|
||||
<div ng-show="!ctrl.load" layout="row" layout-padding class="wz-padding-top-0 wz-padding-bottom-0">
|
||||
<div ng-show="!ctrl.load" layout="row" layout-padding class="wz-padding-bottom-0 wz-margin-top-16">
|
||||
<div ng-show="ctrl.selectedNode" layout="column" layout-align="center" class="height-35 wz-select-input">
|
||||
<select class="kuiSelect wz-border-none cursor-pointer max-height-35" id="categoryBox" ng-model="ctrl.selectedNode"
|
||||
ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Select node">
|
||||
<select class="kuiSelect wz-border-none cursor-pointer max-height-35" id="categoryBox"
|
||||
ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Select node">
|
||||
<option ng-repeat="node in ctrl.nodes" value="{{node.name}}">{{node.name}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div flex></div>
|
||||
<div layout="column" class="height-40 wz-no-padding">
|
||||
<button ng-if="mctrl.clusterInfo.status === 'enabled' && !mctrl.showConfirmRestart" class="btn wz-button height-35"
|
||||
ng-disabled="mctrl.isRestarting" ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"
|
||||
<button ng-if="mctrl.clusterInfo.status === 'enabled' && !mctrl.showConfirmRestart"
|
||||
class="kuiButton kuiButton--secondary height-35" ng-disabled="mctrl.isRestarting"
|
||||
ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"
|
||||
ng-class="mctrl.isRestarting ? 'fa-spin fa-spinner' : ''"></i>
|
||||
Restart cluster
|
||||
</button>
|
||||
<button ng-if="mctrl.clusterInfo.status !== 'enabled' && !mctrl.showConfirmRestart" class="btn wz-button height-35"
|
||||
ng-disabled="mctrl.isRestarting" ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"
|
||||
<button ng-if="mctrl.clusterInfo.status !== 'enabled' && !mctrl.showConfirmRestart"
|
||||
class="kuiButton kuiButton--secondary height-35" ng-disabled="mctrl.isRestarting"
|
||||
ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"
|
||||
ng-class="mctrl.isRestarting ? 'fa-spin fa-spinner' : ''"></i>
|
||||
Restart manager
|
||||
</button>
|
||||
@ -42,10 +39,12 @@
|
||||
<md-button class="cancelBtn btn-info" type="button" ng-click="mctrl.showConfirmRestart = false">
|
||||
Cancel</md-button>
|
||||
<md-button ng-if="mctrl.clusterInfo.status === 'enabled'" class="btn wz-button" type="button"
|
||||
ng-click="mctrl.restartCluster();mctrl.showConfirmRestart = false"><i aria-hidden='true' class='fa fa-fw fa-check'></i>
|
||||
ng-click="mctrl.restartCluster();mctrl.showConfirmRestart = false"><i aria-hidden='true'
|
||||
class='fa fa-fw fa-check'></i>
|
||||
Confirm</md-button>
|
||||
<md-button ng-if="mctrl.clusterInfo.status !== 'enabled'" class="btn wz-button" type="button"
|
||||
ng-click="mctrl.restartManager();mctrl.showConfirmRestart = false"><i aria-hidden='true' class='fa fa-fw fa-check'></i>
|
||||
ng-click="mctrl.restartManager();mctrl.showConfirmRestart = false"><i aria-hidden='true'
|
||||
class='fa fa-fw fa-check'></i>
|
||||
Confirm</md-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -53,13 +52,16 @@
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-show="ctrl.clusterError && !ctrl.load">
|
||||
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8"
|
||||
ng-show="ctrl.clusterError && !ctrl.load">
|
||||
<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">
|
||||
<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 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>
|
||||
@ -71,7 +73,7 @@
|
||||
|
||||
<!-- Daemons status section -->
|
||||
<div ng-show="!ctrl.load && !ctrl.clusterError">
|
||||
<md-card flex class="wz-md-card wz-margin-bottom-25">
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-content class="daemons-card">
|
||||
<div ng-repeat="daemon in ctrl.daemons" class="daemon-label">
|
||||
<p ng-class="ctrl.getDaemonStatusClass(daemon.value)" class="round daemon-bullet"></p>
|
||||
@ -95,7 +97,8 @@
|
||||
<div flex class="wz-text-truncatable">Disconnected:
|
||||
<span class="wz-text-bold">{{ctrl.agentsCountDisconnected}}</span>
|
||||
</div>
|
||||
<div flex class="wz-text-truncatable">Never connected: <span class="wz-text-bold">{{ctrl.agentsCountNeverConnected}}</span>
|
||||
<div flex class="wz-text-truncatable">Never connected: <span
|
||||
class="wz-text-bold">{{ctrl.agentsCountNeverConnected}}</span>
|
||||
</div>
|
||||
<div flex class="wz-text-truncatable">Agents coverage:
|
||||
<span class="wz-text-bold">{{(ctrl.agentsCoverity | number:2)}}%</span>
|
||||
@ -109,7 +112,8 @@
|
||||
<!-- Manager information section -->
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-content>
|
||||
<i class="fa fa-fw fa-server" aria-hidden="true"></i> <span ng-if="ctrl.selectedNode" class="wz-headline-title">{{ctrl.selectedNode}}
|
||||
<i class="fa fa-fw fa-server" aria-hidden="true"></i> <span ng-if="ctrl.selectedNode"
|
||||
class="wz-headline-title">{{ctrl.selectedNode}}
|
||||
information</span> <span ng-if="!ctrl.selectedNode" class="wz-headline-title">Manager
|
||||
information</span>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
@ -125,11 +129,13 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">Installation path</span>
|
||||
<span class="wz-text-right color-grey">{{ctrl.managerInfo.path ? ctrl.managerInfo.path : '-'}}</span>
|
||||
<span
|
||||
class="wz-text-right color-grey">{{ctrl.managerInfo.path ? ctrl.managerInfo.path : '-'}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">Installation type</span>
|
||||
<span class="wz-text-right color-grey">{{ctrl.managerInfo.type ? ctrl.managerInfo.type : '-'}}</span>
|
||||
<span
|
||||
class="wz-text-right color-grey">{{ctrl.managerInfo.type ? ctrl.managerInfo.type : '-'}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">Agents limit</span>
|
||||
@ -162,7 +168,8 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">Status</span>
|
||||
<span class="wz-text-right color-grey">{{ctrl.agentInfo.status ? ctrl.agentInfo.status : '-'}}</span>
|
||||
<span
|
||||
class="wz-text-right color-grey">{{ctrl.agentInfo.status ? ctrl.agentInfo.status : '-'}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">IP Address</span>
|
||||
@ -170,11 +177,13 @@
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">Date add</span>
|
||||
<span class="wz-text-right color-grey">{{ctrl.agentInfo.dateAdd ? ctrl.agentInfo.dateAdd : '-'}}</span>
|
||||
<span
|
||||
class="wz-text-right color-grey">{{ctrl.agentInfo.dateAdd ? ctrl.agentInfo.dateAdd : '-'}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<span flex="25">Version</span>
|
||||
<span class="wz-text-right color-grey">{{ctrl.agentInfo.version ? ctrl.agentInfo.version : '-'}}</span>
|
||||
<span
|
||||
class="wz-text-right color-grey">{{ctrl.agentInfo.version ? ctrl.agentInfo.version : '-'}}</span>
|
||||
</div>
|
||||
<div layout="row" class="wz-padding-top-10" ng-if="ctrl.agentInfo.id !== '000'">
|
||||
<span flex="25">Last keep alive</span>
|
||||
@ -190,4 +199,4 @@
|
||||
</md-card>
|
||||
<!-- End last registered agent section -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -3,38 +3,39 @@
|
||||
|
||||
<div layout="row" class="height-400">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[0]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Alerts by action over time</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(0)">
|
||||
<span class="wz-headline-title">Alerts by action over time</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Agents-FIM-Alerts-by-action-over-time" vis-id="'Wazuh-App-Agents-FIM-Alerts-by-action-over-time'"></kbn-vis>
|
||||
<kbn-vis id="Wazuh-App-Agents-FIM-Alerts-by-action-over-time"
|
||||
vis-id="'Wazuh-App-Agents-FIM-Alerts-by-action-over-time'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<div layout="row" class="height-300">
|
||||
<md-card flex="25" class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[1]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Top 5 agents</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(1)">
|
||||
<span class="wz-headline-title">Top 5 agents</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-FIM-Top-5-agents-pie"
|
||||
vis-id="'Wazuh-App-Overview-FIM-Top-5-agents-pie'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[2]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Events summary</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(2)">
|
||||
<span class="wz-headline-title">Events summary</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-FIM-Events-summary" vis-id="'Wazuh-App-Overview-FIM-Events-summary'">
|
||||
</kbn-vis>
|
||||
</md-card-content>
|
||||
@ -43,37 +44,37 @@
|
||||
|
||||
<div layout="row" class="height-300">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[3]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Rule distribution</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(3)">
|
||||
<span class="wz-headline-title">Rule distribution</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-Top-5-rules'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[4]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Actions</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(4)">
|
||||
<span class="wz-headline-title">Actions</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-FIM-Common-actions" vis-id="'Wazuh-App-Overview-FIM-Common-actions'">
|
||||
</kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[5]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Top 5 users</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(5)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(5)">
|
||||
<span class="wz-headline-title">Top 5 users</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(5)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis vis-id="'Wazuh-App-Overview-FIM-top-agents-user'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
|
@ -20,24 +20,24 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-400">
|
||||
<md-card flex="30" class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[0]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Top 10 agents by alerts number</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(0)">
|
||||
<span class="wz-headline-title">Top 10 agents by alerts number</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-GDPR-Agents" vis-id="'Wazuh-App-Overview-GDPR-Agents'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex="70" class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[1]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">GDPR requirements</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(1)">
|
||||
<span class="wz-headline-title">GDPR requirements</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-GDPR-requirements" vis-id="'Wazuh-App-Overview-GDPR-requirements'">
|
||||
</kbn-vis>
|
||||
</md-card-content>
|
||||
@ -46,13 +46,13 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-300">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[2]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Top requirements over time</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(2)">
|
||||
<span class="wz-headline-title">Top requirements over time</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-GDPR-Requirements-heatmap"
|
||||
vis-id="'Wazuh-App-Overview-GDPR-Requirements-heatmap'"></kbn-vis>
|
||||
</md-card-content>
|
||||
@ -61,13 +61,13 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-530">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[3]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Last alerts</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(3)">
|
||||
<span class="wz-headline-title">Last alerts</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-GDPR-Requirements-Agents-heatmap"
|
||||
vis-id="'Wazuh-App-Overview-GDPR-Requirements-Agents-heatmap'">
|
||||
</kbn-vis>
|
||||
@ -77,13 +77,13 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-255">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[4]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Requirements by agent</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(4)">
|
||||
<span class="wz-headline-title">Requirements by agent</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-GDPR-Requirements-by-agent"
|
||||
vis-id="'Wazuh-App-Overview-GDPR-Requirements-by-agent'"></kbn-vis>
|
||||
</md-card-content>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<md-content flex layout="column" ng-if="octrl.tab === 'general' && octrl.tabView === 'panels'" layout-align="start"
|
||||
ng-class="{'no-opacity': resultState !== 'ready' || !rendered}">
|
||||
<div layout="row">
|
||||
<md-card flex class="wz-metric-color wz-md-card">
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-content layout="row" class="wz-padding-metric">
|
||||
<div class="wz-text-truncatable" flex>Alerts: <span class="wz-text-bold"
|
||||
ng-bind="octrl.totalAlerts()"></span></div>
|
||||
|
@ -20,25 +20,25 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-400">
|
||||
<md-card flex="70" class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[0]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">PCI requirements</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(0)">
|
||||
<span class="wz-headline-title">PCI requirements</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-PCI-DSS-requirements"
|
||||
vis-id="'Wazuh-App-Overview-PCI-DSS-requirements'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex="30" class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[1]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Top 10 agents by alerts number</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(1)">
|
||||
<span class="wz-headline-title">Top 10 agents by alerts number</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-PCI-DSS-Agents" vis-id="'Wazuh-App-Overview-PCI-DSS-Agents'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
@ -46,13 +46,13 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-300">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[2]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Top requirements over time</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(2)">
|
||||
<span class="wz-headline-title">Top requirements over time</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-PCI-DSS-Requirements-over-time"
|
||||
vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-over-time'"></kbn-vis>
|
||||
</md-card-content>
|
||||
@ -61,13 +61,13 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-530">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[3]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Last alerts</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(3)">
|
||||
<span class="wz-headline-title">Last alerts</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-PCI-DSS-Requirements-Agents-heatmap"
|
||||
vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-Agents-heatmap'">
|
||||
</kbn-vis>
|
||||
@ -77,13 +77,13 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-255">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[4]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Requirements by agent</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(4)">
|
||||
<span class="wz-headline-title">Requirements by agent</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-PCI-DSS-Requirements-by-agent"
|
||||
vis-id="'Wazuh-App-Overview-PCI-DSS-Requirements-by-agent'"></kbn-vis>
|
||||
</md-card-content>
|
||||
|
@ -1,13 +1,17 @@
|
||||
<md-content flex layout="column" ng-if="octrl.tab === 'vuls' && octrl.tabView === 'panels'" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}"
|
||||
layout-align="start">
|
||||
<md-content flex layout="column" ng-if="octrl.tab === 'vuls' && octrl.tabView === 'panels'"
|
||||
ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
|
||||
|
||||
<div layout="row">
|
||||
<md-card flex class="wz-metric-color wz-md-card">
|
||||
<md-card flex class="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" ng-bind="octrl.vulnCritical()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>High severity alerts: <span class="wz-text-bold" ng-bind="octrl.vulnHigh()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>Medium severity alerts: <span class="wz-text-bold" ng-bind="octrl.vulnMedium()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>Low severity alerts: <span class="wz-text-bold" ng-bind="octrl.vulnLow()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>Critical severity alerts: <span class="wz-text-bold"
|
||||
ng-bind="octrl.vulnCritical()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>High severity alerts: <span class="wz-text-bold"
|
||||
ng-bind="octrl.vulnHigh()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>Medium severity alerts: <span class="wz-text-bold"
|
||||
ng-bind="octrl.vulnMedium()"></span></div>
|
||||
<div class="wz-text-truncatable" flex>Low severity alerts: <span class="wz-text-bold"
|
||||
ng-bind="octrl.vulnLow()"></span></div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
@ -21,84 +25,91 @@
|
||||
|
||||
<div layout="row" layout-align="center stretch" class="height-270">
|
||||
<md-card flex="30" class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[0]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Most affected agents</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(0)">
|
||||
<span class="wz-headline-title">Most affected agents</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(0)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Most-affected-agents" vis-id="'Wazuh-App-Overview-vulnerability-Most-affected-agents'"></kbn-vis>
|
||||
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Most-affected-agents"
|
||||
vis-id="'Wazuh-App-Overview-vulnerability-Most-affected-agents'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[1]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Alerts severity</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(1)">
|
||||
<span class="wz-headline-title">Alerts severity</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(1)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Alerts-severity" vis-id="'Wazuh-App-Overview-vulnerability-Alerts-severity'"></kbn-vis>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Alerts-severity"
|
||||
vis-id="'Wazuh-App-Overview-vulnerability-Alerts-severity'"></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" ng-class="{'fullscreen': octrl.expandArray[2]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Severity distribution</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(2)">
|
||||
<span class="wz-headline-title">Severity distribution</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(2)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Vulnerability-severity-distribution" vis-id="'Wazuh-App-Overview-vulnerability-Vulnerability-severity-distribution'"></kbn-vis>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Vulnerability-severity-distribution"
|
||||
vis-id="'Wazuh-App-Overview-vulnerability-Vulnerability-severity-distribution'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[3]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Commonly affected packages</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(3)">
|
||||
<span class="wz-headline-title">Commonly affected packages</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(3)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Commonly-affected-packages" vis-id="'Wazuh-App-Overview-vulnerability-Commonly-affected-packages'"></kbn-vis>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Commonly-affected-packages"
|
||||
vis-id="'Wazuh-App-Overview-vulnerability-Commonly-affected-packages'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[4]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Most common CVEs</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(4)">
|
||||
<span class="wz-headline-title">Most common CVEs</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(4)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Most-common-CVEs" vis-id="'Wazuh-App-Overview-vulnerability-Most-common-CVEs'"></kbn-vis>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Most-common-CVEs"
|
||||
vis-id="'Wazuh-App-Overview-vulnerability-Most-common-CVEs'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[5]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Most common CWEs</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(5)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(5)">
|
||||
<span class="wz-headline-title">Most common CWEs</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(5)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Most-common-CWEs" vis-id="'Wazuh-App-Overview-vulnerability-Most-common-CWEs'"></kbn-vis>
|
||||
<kbn-vis id="Wazuh-App-Overview-vulnerability-Most-common-CWEs"
|
||||
vis-id="'Wazuh-App-Overview-vulnerability-Most-common-CWEs'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<div layout="row" class="height-570">
|
||||
<md-card flex class="wz-md-card" ng-class="{'fullscreen': octrl.expandArray[6]}">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<span class="wz-headline-title">Alert summary</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(6)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</md-card-actions>
|
||||
<md-card-content class="wazuh-column">
|
||||
<div layout="row" ng-dblclick="octrl.expand(6)">
|
||||
<span class="wz-headline-title">Alert summary</span>
|
||||
<span flex></span>
|
||||
<span class="wz-text-link" ng-click="octrl.expand(6)"><i class="fa fa-fw fa-expand"></i></span>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<kbn-vis vis-id="'Wazuh-App-Overview-vulnerability-Alert-summary'"></kbn-vis>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
|
@ -1,11 +1,5 @@
|
||||
<div class="" layout="column" layout-align="start stretch" ng-if="octrl.tab === 'welcome'">
|
||||
|
||||
<!-- Headline -->
|
||||
<div layout="column" layout-padding>
|
||||
<span class="font-size-18">
|
||||
<i class="fa fa-fw fa-bar-chart" aria-hidden="true"></i> Overview</span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
<div layout="row" layout-padding>
|
||||
<md-card flex class="wz-metric-color wz-md-card wz-no-padding">
|
||||
<md-card-content layout="row" class="wz-padding-metric">
|
||||
@ -36,21 +30,17 @@
|
||||
<h3 class="euiTitle wzEuiTitle">Security Information Management</h3>
|
||||
<div class="euiSpacer euiSpacer--m"></div>
|
||||
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
|
||||
<wz-welcome-card
|
||||
class="euiFlexItem" logo="'icons/app_dashboard.svg'" card-title="'Security events'"
|
||||
switch-tab="octrl.switchTab('general')" current-tab="'general'"
|
||||
description="octrl.TabDescription.general.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
class="euiFlexItem" logo="'icons/app_logging.svg'" card-title="'Integrity monitoring'"
|
||||
switch-tab="octrl.switchTab('fim')" current-tab="'fim'"
|
||||
description="octrl.TabDescription.fim.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.aws" class="euiFlexItem" logo="'icons/app_index_pattern.svg'"
|
||||
card-title="'Amazon AWS'" switch-tab="octrl.switchTab('aws')" current-tab="'aws'"
|
||||
description="octrl.TabDescription.aws.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card class="euiFlexItem" logo="'icons/app_dashboard.svg'"
|
||||
card-title="'Security events'" switch-tab="octrl.switchTab('general')"
|
||||
current-tab="'general'" description="octrl.TabDescription.general.description">
|
||||
</wz-welcome-card>
|
||||
<wz-welcome-card class="euiFlexItem" logo="'icons/app_logging.svg'"
|
||||
card-title="'Integrity monitoring'" switch-tab="octrl.switchTab('fim')" current-tab="'fim'"
|
||||
description="octrl.TabDescription.fim.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.aws" class="euiFlexItem"
|
||||
logo="'icons/app_index_pattern.svg'" card-title="'Amazon AWS'"
|
||||
switch-tab="octrl.switchTab('aws')" current-tab="'aws'"
|
||||
description="octrl.TabDescription.aws.description"></wz-welcome-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -59,26 +49,21 @@
|
||||
<h3 class="euiTitle wzEuiTitle">Auditing and Policy Monitoring</h3>
|
||||
<div class="euiSpacer euiSpacer--m"></div>
|
||||
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
|
||||
<wz-welcome-card
|
||||
class="euiFlexItem" logo="'icons/app_advanced_settings.svg'"
|
||||
<wz-welcome-card class="euiFlexItem" logo="'icons/app_advanced_settings.svg'"
|
||||
card-title="'Policy monitoring'" switch-tab="octrl.switchTab('pm')" current-tab="'pm'"
|
||||
description="octrl.TabDescription.pm.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.audit" class="euiFlexItem" logo="'icons/app_monitoring.svg'"
|
||||
card-title="'System auditing'" switch-tab="octrl.switchTab('audit')" current-tab="'audit'"
|
||||
description="octrl.TabDescription.audit.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.oscap" class="euiFlexItem" logo="'icons/app_discover.svg'"
|
||||
card-title="'OpenSCAP'" switch-tab="octrl.switchTab('oscap')" current-tab="'oscap'"
|
||||
description="octrl.TabDescription.oscap.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.ciscat" class="euiFlexItem" logo="'icons/app_management.svg'"
|
||||
card-title="'CIS-CAT'" switch-tab="octrl.switchTab('ciscat')" current-tab="'ciscat'"
|
||||
description="octrl.TabDescription.ciscat.description"
|
||||
></wz-welcome-card>
|
||||
description="octrl.TabDescription.pm.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.audit" class="euiFlexItem"
|
||||
logo="'icons/app_monitoring.svg'" card-title="'System auditing'"
|
||||
switch-tab="octrl.switchTab('audit')" current-tab="'audit'"
|
||||
description="octrl.TabDescription.audit.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.oscap" class="euiFlexItem"
|
||||
logo="'icons/app_discover.svg'" card-title="'OpenSCAP'"
|
||||
switch-tab="octrl.switchTab('oscap')" current-tab="'oscap'"
|
||||
description="octrl.TabDescription.oscap.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.ciscat" class="euiFlexItem"
|
||||
logo="'icons/app_management.svg'" card-title="'CIS-CAT'"
|
||||
switch-tab="octrl.switchTab('ciscat')" current-tab="'ciscat'"
|
||||
description="octrl.TabDescription.ciscat.description"></wz-welcome-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -93,21 +78,17 @@
|
||||
<h3 class="euiTitle wzEuiTitle">Threat Detection and Response</h3>
|
||||
<div class="euiSpacer euiSpacer--m"></div>
|
||||
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
|
||||
<wz-welcome-card
|
||||
class="euiFlexItem" logo="'icons/app_security.svg'"
|
||||
<wz-welcome-card class="euiFlexItem" logo="'icons/app_security.svg'"
|
||||
card-title="'Vulnerabilities'" switch-tab="octrl.switchTab('vuls')" current-tab="'vuls'"
|
||||
description="octrl.TabDescription.vuls.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.virustotal" class="euiFlexItem" logo="'icons/app_saved_objects.svg'"
|
||||
card-title="'VirusTotal'" switch-tab="octrl.switchTab('virustotal')" current-tab="'virustotal'"
|
||||
description="octrl.TabDescription.virustotal.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.osquery" class="euiFlexItem" logo="'icons/osquery.svg'"
|
||||
card-title="'Osquery'" switch-tab="octrl.switchTab('osquery')" current-tab="'osquery'"
|
||||
description="octrl.TabDescription.osquery.description"
|
||||
></wz-welcome-card>
|
||||
description="octrl.TabDescription.vuls.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.virustotal" class="euiFlexItem"
|
||||
logo="'icons/app_saved_objects.svg'" card-title="'VirusTotal'"
|
||||
switch-tab="octrl.switchTab('virustotal')" current-tab="'virustotal'"
|
||||
description="octrl.TabDescription.virustotal.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.osquery" class="euiFlexItem"
|
||||
logo="'icons/osquery.svg'" card-title="'Osquery'"
|
||||
switch-tab="octrl.switchTab('osquery')" current-tab="'osquery'"
|
||||
description="octrl.TabDescription.osquery.description"></wz-welcome-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -117,16 +98,12 @@
|
||||
<h3 class="euiTitle wzEuiTitle">Regulatory Compliance</h3>
|
||||
<div class="euiSpacer euiSpacer--m"></div>
|
||||
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.pci" class="euiFlexItem" logo="'icons/app_apm.svg'"
|
||||
<wz-welcome-card ng-if="octrl.extensions.pci" class="euiFlexItem" logo="'icons/app_apm.svg'"
|
||||
card-title="'PCI DSS'" switch-tab="octrl.switchTab('pci')" current-tab="'pci'"
|
||||
description="octrl.TabDescription.pci.description"
|
||||
></wz-welcome-card>
|
||||
<wz-welcome-card
|
||||
ng-if="octrl.extensions.gdpr" class="euiFlexItem" logo="'icons/app_visualize.svg'"
|
||||
card-title="'GDPR'" switch-tab="octrl.switchTab('gdpr')" current-tab="'gdpr'"
|
||||
description="octrl.TabDescription.gdpr.description"
|
||||
></wz-welcome-card>
|
||||
description="octrl.TabDescription.pci.description"></wz-welcome-card>
|
||||
<wz-welcome-card ng-if="octrl.extensions.gdpr" class="euiFlexItem"
|
||||
logo="'icons/app_visualize.svg'" card-title="'GDPR'" switch-tab="octrl.switchTab('gdpr')"
|
||||
current-tab="'gdpr'" description="octrl.TabDescription.gdpr.description"></wz-welcome-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -14,10 +14,6 @@
|
||||
<span> / </span>
|
||||
<span>{{ octrl.tabNames[octrl.tab] }}</span>
|
||||
</div>
|
||||
<!-- If you're on the Welcome tab, show a blank, simple breadcrumb -->
|
||||
<div ng-if="octrl.tab === 'welcome'">
|
||||
<span>Overview / Welcome</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End breadcrumbs -->
|
||||
|
||||
@ -28,77 +24,86 @@
|
||||
<!-- Reporting button section -->
|
||||
<div ng-show="octrl.tab !== 'welcome' && octrl.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'" ng-click="octrl.startVis2Png()" aria-label="Generate report button">
|
||||
<button class="kuiButton kuiButton--secondary wz-margin-right-8 small" tooltip="Generate report"
|
||||
tooltip-placement="bottom"
|
||||
ng-class="{'euiButtonEmpty--disabled': !rendered || loading || resultState !== 'ready'}"
|
||||
ng-disabled="!rendered || loading || resultState !== 'ready'" ng-click="octrl.startVis2Png()"
|
||||
aria-label="Generate report button">
|
||||
<i class="fa fa-fw fa-print" aria-hidden="true"></i>
|
||||
</md-button>
|
||||
</button>
|
||||
</div>
|
||||
<!-- End Reporting buttons section -->
|
||||
|
||||
<!-- Discover/Dashboard buttons section -->
|
||||
<div ng-show="octrl.tab !== 'welcome'">
|
||||
<div ng-show="octrl.tab !== 'welcome'" class="wz-margin-right-8">
|
||||
<!-- Dashboard button -->
|
||||
<md-button ng-if="octrl.tabView === 'discover'" class="wz-button-flat small" ng-click="octrl.switchSubtab('panels')" aria-label="Dashboard button">
|
||||
<button ng-if="octrl.tabView === 'discover'" class="kuiButton kuiButton--secondary small"
|
||||
ng-click="octrl.switchSubtab('panels')" aria-label="Dashboard button">
|
||||
<i class="fa fa-fw fa-th" aria-hidden="true"></i> Dashboard
|
||||
</md-button>
|
||||
</button>
|
||||
|
||||
<!-- Discover button -->
|
||||
<md-button ng-if="octrl.tabView === 'panels'" class="wz-button-flat small" ng-click="octrl.switchSubtab('discover')" aria-label="Discover button">
|
||||
<button ng-if="octrl.tabView === 'panels'" class="kuiButton kuiButton--secondary small"
|
||||
ng-click="octrl.switchSubtab('discover')" aria-label="Discover button">
|
||||
<i class="fa fa-fw fa-compass" aria-hidden="true"></i> Discover
|
||||
</md-button>
|
||||
</button>
|
||||
</div>
|
||||
<!-- End Discover/Dashboard buttons section -->
|
||||
</div>
|
||||
<!-- End navigation section -->
|
||||
|
||||
<!-- Host monitoring navigation bar -->
|
||||
<md-nav-bar
|
||||
ng-if="octrl.inArray(octrl.tab, octrl.hostMonitoringTabs)"
|
||||
class="wz-nav-bar"
|
||||
ng-show="octrl.tab !== 'welcome'"
|
||||
md-selected-nav-item="octrl.tab"
|
||||
<md-nav-bar ng-if="octrl.inArray(octrl.tab, octrl.hostMonitoringTabs)" class="wz-nav-bar"
|
||||
ng-show="octrl.tab !== 'welcome'" md-selected-nav-item="octrl.tab"
|
||||
nav-bar-aria-label="Host monitoring navigation links">
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('general',true)" name="general">{{ octrl.tabNames['general'] }}</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('fim',true)" name="fim">{{ octrl.tabNames['fim'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.aws" class="wz-nav-item" md-nav-click="octrl.switchTab('aws',true)" name="aws">{{ octrl.tabNames['aws'] }}</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('general',true)" name="general">
|
||||
{{ octrl.tabNames['general'] }}</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('fim',true)" name="fim">
|
||||
{{ octrl.tabNames['fim'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.aws" class="wz-nav-item" md-nav-click="octrl.switchTab('aws',true)"
|
||||
name="aws">{{ octrl.tabNames['aws'] }}</md-nav-item>
|
||||
</md-nav-bar>
|
||||
<!-- End Host monitoring navigation bar -->
|
||||
|
||||
<!-- System audit navigation bar -->
|
||||
<md-nav-bar
|
||||
ng-if="octrl.inArray(octrl.tab, octrl.systemAuditTabs) && (octrl.extensions.audit || octrl.extensions.oscap || octrl.extensions.ciscat)"
|
||||
class="wz-nav-bar"
|
||||
ng-show="octrl.tab !== 'welcome'"
|
||||
md-selected-nav-item="octrl.tab"
|
||||
class="wz-nav-bar" ng-show="octrl.tab !== 'welcome'" md-selected-nav-item="octrl.tab"
|
||||
nav-bar-aria-label="System audit navigation links">
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('pm',true)" name="pm">{{ octrl.tabNames['pm'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.audit" class="wz-nav-item" md-nav-click="octrl.switchTab('audit',true)" name="audit">{{ octrl.tabNames['audit'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.oscap" class="wz-nav-item" md-nav-click="octrl.switchTab('oscap',true)" name="oscap">{{ octrl.tabNames['oscap'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.ciscat" class="wz-nav-item" md-nav-click="octrl.switchTab('ciscat',true)" name="ciscat">{{ octrl.tabNames['ciscat'] }}</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('pm',true)" name="pm">{{ octrl.tabNames['pm'] }}
|
||||
</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.audit" class="wz-nav-item" md-nav-click="octrl.switchTab('audit',true)"
|
||||
name="audit">{{ octrl.tabNames['audit'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.oscap" class="wz-nav-item" md-nav-click="octrl.switchTab('oscap',true)"
|
||||
name="oscap">{{ octrl.tabNames['oscap'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.ciscat" class="wz-nav-item" md-nav-click="octrl.switchTab('ciscat',true)"
|
||||
name="ciscat">{{ octrl.tabNames['ciscat'] }}</md-nav-item>
|
||||
</md-nav-bar>
|
||||
<!-- End System audit navigation bar -->
|
||||
|
||||
<!-- Security navigation bar -->
|
||||
<md-nav-bar
|
||||
ng-if="octrl.inArray(octrl.tab, octrl.securityTabs) && (octrl.extensions.virustotal || octrl.extensions.osquery)"
|
||||
class="wz-nav-bar"
|
||||
ng-show="octrl.tab !== 'welcome'"
|
||||
md-selected-nav-item="octrl.tab"
|
||||
class="wz-nav-bar" ng-show="octrl.tab !== 'welcome'" md-selected-nav-item="octrl.tab"
|
||||
nav-bar-aria-label="Security navigation links">
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('vuls',true)" name="vuls">{{ octrl.tabNames['vuls'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.virustotal" class="wz-nav-item" md-nav-click="octrl.switchTab('virustotal',true)" name="virustotal">{{ octrl.tabNames['virustotal'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.osquery" class="wz-nav-item" md-nav-click="octrl.switchTab('osquery',true)" name="osquery">{{ octrl.tabNames['osquery'] }}</md-nav-item>
|
||||
<md-nav-item class="wz-nav-item" md-nav-click="octrl.switchTab('vuls',true)" name="vuls">
|
||||
{{ octrl.tabNames['vuls'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.virustotal" class="wz-nav-item"
|
||||
md-nav-click="octrl.switchTab('virustotal',true)" name="virustotal">{{ octrl.tabNames['virustotal'] }}
|
||||
</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.osquery" class="wz-nav-item"
|
||||
md-nav-click="octrl.switchTab('osquery',true)" name="osquery">{{ octrl.tabNames['osquery'] }}</md-nav-item>
|
||||
</md-nav-bar>
|
||||
<!-- End Security navigation bar -->
|
||||
|
||||
<!-- Compliance navigation bar -->
|
||||
<md-nav-bar
|
||||
ng-if="octrl.inArray(octrl.tab, octrl.complianceTabs) && octrl.extensions.pci && octrl.extensions.gdpr"
|
||||
class="wz-nav-bar"
|
||||
ng-show="octrl.tab !== 'welcome'"
|
||||
md-selected-nav-item="octrl.tab"
|
||||
<md-nav-bar ng-if="octrl.inArray(octrl.tab, octrl.complianceTabs) && octrl.extensions.pci && octrl.extensions.gdpr"
|
||||
class="wz-nav-bar" ng-show="octrl.tab !== 'welcome'" md-selected-nav-item="octrl.tab"
|
||||
nav-bar-aria-label="Compliance navigation links">
|
||||
<md-nav-item ng-show="octrl.extensions.pci" class="wz-nav-item" md-nav-click="octrl.switchTab('pci',true)" name="pci">{{ octrl.tabNames['pci'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.gdpr" class="wz-nav-item" md-nav-click="octrl.switchTab('gdpr',true)" name="gdpr">{{ octrl.tabNames['gdpr'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.pci" class="wz-nav-item" md-nav-click="octrl.switchTab('pci',true)"
|
||||
name="pci">{{ octrl.tabNames['pci'] }}</md-nav-item>
|
||||
<md-nav-item ng-show="octrl.extensions.gdpr" class="wz-nav-item" md-nav-click="octrl.switchTab('gdpr',true)"
|
||||
name="gdpr">{{ octrl.tabNames['gdpr'] }}</md-nav-item>
|
||||
</md-nav-bar>
|
||||
<!-- End Compliance navigation bar -->
|
||||
|
||||
@ -107,26 +112,39 @@
|
||||
<!-- End Discover search bar section -->
|
||||
|
||||
<!-- Loading status section -->
|
||||
<div layout="column" layout-align="center center" ng-if="octrl.tab !== 'welcome' && octrl.tab !== 'aws'" ng-show="resultState === 'ready' && octrl.tabView === 'panels' && !rendered">
|
||||
<div layout="column" layout-align="center center" ng-if="octrl.tab !== 'welcome' && octrl.tab !== 'aws'"
|
||||
ng-show="resultState === 'ready' && octrl.tabView === 'panels' && !rendered">
|
||||
<div class="percentage"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
|
||||
<div class="percentage">{{loadingStatus}}</div>
|
||||
</div>
|
||||
<!-- End loading status section -->
|
||||
|
||||
<!-- Report status section -->
|
||||
<div layout="column" layout-align="center center" ng-if="octrl.tab !== 'welcome'" ng-show="reportBusy && reportStatus">
|
||||
<div layout="column" layout-align="center center" ng-if="octrl.tab !== 'welcome'"
|
||||
ng-show="reportBusy && reportStatus">
|
||||
<div class="percentage"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
|
||||
<div class="percentage">{{reportStatus}}</div>
|
||||
</div>
|
||||
<!-- End report status section -->
|
||||
|
||||
<!-- No results section -->
|
||||
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="octrl.tab !== 'welcome'" ng-show="resultState === 'none' && octrl.tabView === 'panels'">
|
||||
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="octrl.tab !== 'welcome'"
|
||||
ng-show="resultState === 'none' && octrl.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>
|
||||
<span class="euiCallOutHeader__title">There are no results for selected time range. Try another one.</span>
|
||||
<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">There are no results for selected time range. Try another
|
||||
one.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- No results section -->
|
||||
<!-- No results section -->
|
@ -3,7 +3,8 @@
|
||||
<!-- Headline -->
|
||||
<div layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-tasks" aria-hidden="true"></i> API configuration</span>
|
||||
<span class="md-subheader">Use Wazuh API settings to connect the Kibana plugin to your Wazuh manager or cluster</span>
|
||||
<span class="md-subheader">Use Wazuh API settings to connect the Kibana plugin to your Wazuh manager or
|
||||
cluster</span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
@ -25,43 +26,53 @@
|
||||
<!-- API entries list section -->
|
||||
<div ng-repeat="entry in ctrl.apiEntries">
|
||||
<!-- API entry -->
|
||||
<div layout="row" layout-align="space-between center" class="wz-padding-top-10 wz-padding-bottom-14">
|
||||
<div layout="row" layout-align="space-between center"
|
||||
class="wz-padding-top-10 wz-padding-bottom-14">
|
||||
<p flex="15">
|
||||
<i ng-show="(entry._id === ctrl.currentDefault)" tooltip="This is the default Manager" tooltip-placement="right" class="fa fa-star wz-color-orange" aria-hidden="true"></i> {{entry._source.cluster_info.cluster}}</p>
|
||||
<i ng-show="(entry._id === ctrl.currentDefault)" tooltip="This is the default Manager"
|
||||
tooltip-placement="right" class="fa fa-star wz-color-orange" aria-hidden="true"></i>
|
||||
{{entry._source.cluster_info.cluster}}</p>
|
||||
<p flex="20">{{entry._source.cluster_info.manager}}</p>
|
||||
<p flex="15">{{entry._source.url}}</p>
|
||||
<p flex="15">{{entry._source.api_port}}</p>
|
||||
<p flex="15">{{entry._source.api_user}}</p>
|
||||
<p flex="20">
|
||||
<i ng-click="ctrl.setDefault(entry)" tooltip="Set as default Manager" class="fa fa-star font-size-18 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.removeManager(entry)" tooltip="Remove manager" class="fa fa-trash wz-margin-left-7 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.checkManager(entry)" tooltip="Check connection" class="fa fa-refresh wz-margin-left-7 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.toggleEditor(entry)" tooltip="Edit" class="fa fa-pencil wz-margin-left-7 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.setDefault(entry)" tooltip="Set as default Manager"
|
||||
class="fa fa-star font-size-18 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.removeManager(entry)" tooltip="Remove manager"
|
||||
class="fa fa-trash-o wz-margin-left-7 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.checkManager(entry)" tooltip="Check connection"
|
||||
class="fa fa-refresh wz-margin-left-7 cursor-pointer" aria-hidden="true"></i>
|
||||
<i ng-click="ctrl.toggleEditor(entry)" tooltip="Edit"
|
||||
class="fa fa-pencil wz-margin-left-7 cursor-pointer" aria-hidden="true"></i>
|
||||
</p>
|
||||
</div>
|
||||
<!-- End API entry -->
|
||||
<!-- Edit API form -->
|
||||
<div layout="row" layout-align="space-between center" ng-if="ctrl.showEditForm[entry._id] && ctrl.isEditing">
|
||||
<form flex ng-submit="ctrl.updateSettings(entry)" layout="column" layout-align="start stretch" class="margin-top-30">
|
||||
<div layout="row" layout-align="space-between center"
|
||||
ng-if="ctrl.showEditForm[entry._id] && ctrl.isEditing">
|
||||
<form flex ng-submit="ctrl.updateSettings(entry)" layout="column" layout-align="start stretch"
|
||||
class="margin-top-30">
|
||||
<!-- Input section -->
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>Username</label>
|
||||
<input ng-model="ctrl.formUpdate.user" ng-init="formUpdate.user=entry._source.api_user" type="text" placeholder="" aria-label="username"
|
||||
required/>
|
||||
<input ng-model="ctrl.formUpdate.user" ng-init="formUpdate.user=entry._source.api_user"
|
||||
type="text" placeholder="" aria-label="username" required />
|
||||
</md-input-container>
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>Password</label>
|
||||
<input ng-model="ctrl.formUpdate.password" type="password" placeholder="" aria-label="password" required/>
|
||||
<input ng-model="ctrl.formUpdate.password" type="password" placeholder=""
|
||||
aria-label="password" required />
|
||||
</md-input-container>
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>URL</label>
|
||||
<input ng-model="ctrl.formUpdate.url" ng-init="formUpdate.url=entry._source.url" type="url" placeholder="http(s)://" aria-label="full url"
|
||||
required/>
|
||||
<input ng-model="ctrl.formUpdate.url" ng-init="formUpdate.url=entry._source.url"
|
||||
type="url" placeholder="http(s)://" aria-label="full url" required />
|
||||
</md-input-container>
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>Port</label>
|
||||
<input ng-model="ctrl.formUpdate.port" ng-init="formUpdate.port=entry._source.api_port" type="text" placeholder="" aria-label="port"
|
||||
required/>
|
||||
<input ng-model="ctrl.formUpdate.port" ng-init="formUpdate.port=entry._source.api_port"
|
||||
type="text" placeholder="" aria-label="port" required />
|
||||
</md-input-container>
|
||||
<!-- Button and errors section -->
|
||||
<div layout="row" layout-align="center center" ng-if="ctrl.messageError">
|
||||
@ -69,7 +80,17 @@
|
||||
</div>
|
||||
<div layout="row" layout-align="center center">
|
||||
<md-button type="submit" class="wz-button md-primary" aria-label="Update API button">
|
||||
<i class="fa fa-pencil fa-fw" aria-hidden="true"></i> Update Wazuh API entry
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false"
|
||||
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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg> Update Wazuh API entry
|
||||
</md-button>
|
||||
</div>
|
||||
</form>
|
||||
@ -80,8 +101,7 @@
|
||||
|
||||
<!-- Add API button section -->
|
||||
<div ng-show="!ctrl.isUpdating()" layout="row" layout-align="center center" class="wz-padding-top-10">
|
||||
<md-button ng-click="ctrl.switch()" class="wz-button md-primary"
|
||||
aria-label="Add new API button">
|
||||
<md-button ng-click="ctrl.switch()" class="wz-button md-primary" aria-label="Add new API button">
|
||||
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> Add new Wazuh API entry
|
||||
</md-button>
|
||||
</div>
|
||||
@ -95,19 +115,23 @@
|
||||
<!-- Input section -->
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>Username</label>
|
||||
<input ng-model="ctrl.formData.user" type="text" placeholder="" aria-label="username" required/>
|
||||
<input ng-model="ctrl.formData.user" type="text" placeholder="" aria-label="username"
|
||||
required />
|
||||
</md-input-container>
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>Password</label>
|
||||
<input ng-model="ctrl.formData.password" type="password" placeholder="" aria-label="password" required/>
|
||||
<input ng-model="ctrl.formData.password" type="password" placeholder=""
|
||||
aria-label="password" required />
|
||||
</md-input-container>
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>URL</label>
|
||||
<input ng-model="ctrl.formData.url" type="url" placeholder="http(s)://" aria-label="full url" required/>
|
||||
<input ng-model="ctrl.formData.url" type="url" placeholder="http(s)://"
|
||||
aria-label="full url" required />
|
||||
</md-input-container>
|
||||
<md-input-container class="wz-input-container">
|
||||
<label>Port</label>
|
||||
<input ng-model="ctrl.formData.port" type="text" placeholder="" aria-label="port" required/>
|
||||
<input ng-model="ctrl.formData.port" type="text" placeholder="" aria-label="port"
|
||||
required />
|
||||
</md-input-container>
|
||||
<!-- Button and errors section -->
|
||||
<div layout="row" layout-align="center center" ng-if="ctrl.messageError">
|
||||
@ -127,4 +151,4 @@
|
||||
</div>
|
||||
<!-- End API configuration card section -->
|
||||
|
||||
</div>
|
||||
</div>
|
@ -3,24 +3,27 @@
|
||||
<div layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-wrench" aria-hidden="true"></i> Wazuh Kibana plugin
|
||||
configuration settings</span>
|
||||
<span class="md-subheader">Configuration file located at <span class="wz-text-monospace">/usr/share/kibana/plugins/wazuh/config.yml</span></span>
|
||||
<span class="md-subheader">Configuration file located at <span
|
||||
class="wz-text-monospace">/usr/share/kibana/plugins/wazuh/config.yml</span></span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
<div layout="row" layout-align="start center" ng-if="!ctrl.load">
|
||||
<md-card flex class="wz-md-card">
|
||||
<md-card-actions layout="row" class="wz-card-actions wz-card-actions-top"
|
||||
style="padding-top:14px !important">
|
||||
<i class="fa fa-fw fa-file-o" aria-hidden="true"></i>
|
||||
<span class="wz-headline-title">Current configuration</span>
|
||||
<span flex></span>
|
||||
<a tooltip="About and help" target="_blank" tooltip-placement="left"
|
||||
href="https://documentation.wazuh.com/current/user-manual/kibana-app/reference/config-file.html"
|
||||
aria-label="Link to open app about section">
|
||||
<i class="fa fa-fw fa-question-circle-o ng-scope" aria-hidden="true"></i>
|
||||
</a>
|
||||
</md-card-actions>
|
||||
<md-card-content>
|
||||
<div layout="row">
|
||||
<i class="fa fa-fw fa-file-o" aria-hidden="true"></i>
|
||||
<span class="wz-headline-title">Current configuration</span>
|
||||
<span flex></span>
|
||||
<a tooltip="About and help" target="_blank" tooltip-placement="left" href="https://documentation.wazuh.com/current/user-manual/kibana-app/reference/config-file.html"
|
||||
aria-label="Link to open app about section">
|
||||
<i class="fa fa-fw fa-question-circle-o ng-scope" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
<md-divider class="wz-margin-top-10"></md-divider>
|
||||
<div layout="row" class="wz-padding-top-10">
|
||||
<table class="table table-striped table-condensed table-layout-fixed table-hover table-vertical-align-middle">
|
||||
<table
|
||||
class="table table-striped table-condensed table-layout-fixed table-hover table-vertical-align-middle">
|
||||
<thead class="wz-text-bold">
|
||||
<th class="wz-text-left col-lg-2">Setting</th>
|
||||
<th class="wz-text-left col-lg-2">Value</th>
|
||||
@ -32,31 +35,55 @@
|
||||
ng-style="ctrl.editingKey === key && {'background': '#e2f7ff'}">
|
||||
<td>{{key}}</td>
|
||||
<td>
|
||||
<input ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'string' && key !== 'wazuh.monitoring.creation'"
|
||||
ng-disabled="ctrl.loadingChange" type="text" class="wz-input-text" ng-model="ctrl.editingNewValue"></input>
|
||||
<input
|
||||
ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'string' && key !== 'wazuh.monitoring.creation'"
|
||||
ng-disabled="ctrl.loadingChange" type="text" class="wz-input-text"
|
||||
ng-model="ctrl.editingNewValue"></input>
|
||||
<input ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'number'"
|
||||
ng-disabled="ctrl.loadingChange" type="number" class="wz-input-text" ng-model="ctrl.editingNewValue"
|
||||
min=0></input>
|
||||
<select ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'boolean'"
|
||||
ng-disabled="ctrl.loadingChange" class="wz-input-text wz-width-100" ng-model="ctrl.editingNewValue"
|
||||
ng-disabled="ctrl.loadingChange" type="number" class="wz-input-text"
|
||||
ng-model="ctrl.editingNewValue" min=0></input>
|
||||
<select
|
||||
ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'boolean'"
|
||||
ng-disabled="ctrl.loadingChange" class="wz-input-text wz-width-100"
|
||||
ng-model="ctrl.editingNewValue"
|
||||
ng-options="o as o for o in [true, false]"></select>
|
||||
<select ng-if="ctrl.editingKey === key && key === 'wazuh.monitoring.creation'"
|
||||
ng-disabled="ctrl.loadingChange" class="wz-input-text wz-width-100" ng-model="ctrl.editingNewValue"
|
||||
ng-disabled="ctrl.loadingChange" class="wz-input-text wz-width-100"
|
||||
ng-model="ctrl.editingNewValue"
|
||||
ng-options="key as value for (key , value) in {'h': 'hourly', 'd': 'daily', 'w': 'weekly', 'm': 'monthly'}"></select>
|
||||
<textarea ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'object'"
|
||||
ng-disabled="ctrl.loadingChange" class="wz-input-text wz-width-100" ng-model="ctrl.editingNewValue"></textarea>
|
||||
<textarea
|
||||
ng-if="ctrl.editingKey === key && ctrl.configurationTypes[key] === 'object'"
|
||||
ng-disabled="ctrl.loadingChange" class="wz-input-text wz-width-100"
|
||||
ng-model="ctrl.editingNewValue"></textarea>
|
||||
<span ng-show="!ctrl.editingKey || ctrl.editingKey !== key">{{value}}</span>
|
||||
</td>
|
||||
<td>{{ctrl.configEquivalence(key)}}</td>
|
||||
<td class="action-btn-td">
|
||||
<div ng-hide="key === 'admin' || !ctrl.configuration['admin']">
|
||||
<span ng-show="!ctrl.editingKey || ctrl.editingKey !== key" tooltip="Edit"
|
||||
ng-click="ctrl.setEditingKey(key, value)" class="fa fa-fw fa-pencil cursor-pointer"></span>
|
||||
ng-click="ctrl.setEditingKey(key, value)" class="cursor-pointer">
|
||||
<svg class="euiIcon euiIcon--medium euiButtonIcon__icon" focusable="false"
|
||||
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="pencil-a"
|
||||
d="M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 0 1-.708 0 .502.502 0 0 1 0-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 0 1 0 1.414l-9 9A.997.997 0 0 1 5 15H2a1 1 0 0 1-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0 1 11 1zM5 14H2v-3l3 3z">
|
||||
</path>
|
||||
</defs>
|
||||
<use xlink:href="#pencil-a"></use>
|
||||
</svg>
|
||||
|
||||
</span>
|
||||
<span ng-show="ctrl.editingKey === key && !ctrl.loadingChange" tooltip="Cancel"
|
||||
class="fa fa-fw fa-times cursor-pointer" ng-click="ctrl.cancelEditingKey()"></span>
|
||||
<span ng-show="ctrl.editingKey === key && ctrl.editingNewValue !== '' && !ctrl.loadingChange"
|
||||
tooltip="Apply" class="fa fa-fw fa-success cursor-pointer" ng-click="ctrl.editKey(key, ctrl.editingNewValue)"></span>
|
||||
<span ng-show="ctrl.editingKey === key && ctrl.loadingChange"><i class="fa fa-fw fa-spin fa-spinner"></i></span>
|
||||
class="fa fa-fw fa-times cursor-pointer"
|
||||
ng-click="ctrl.cancelEditingKey()"></span>
|
||||
<span
|
||||
ng-show="ctrl.editingKey === key && ctrl.editingNewValue !== '' && !ctrl.loadingChange"
|
||||
tooltip="Apply" class="fa fa-fw fa-success cursor-pointer"
|
||||
ng-click="ctrl.editKey(key, ctrl.editingNewValue)"></span>
|
||||
<span ng-show="ctrl.editingKey === key && ctrl.loadingChange"><i
|
||||
class="fa fa-fw fa-spin fa-spinner"></i></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -1,8 +1,10 @@
|
||||
<div layout="column" layout-align="start stretch" ng-if="ctrl.tab === 'logs' && !ctrl.load">
|
||||
<!-- Headline -->
|
||||
<div layout="column" layout-padding>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-file-text-o" aria-hidden="true"></i> Wazuh Kibana plugin log messages</span>
|
||||
<span class="md-subheader">Log file located at <span class="wz-text-monospace">/usr/share/kibana/optimize/wazuh-logs/wazuhapp.log</span></span>
|
||||
<span class="font-size-18"><i class="fa fa-fw fa-file-text-o" aria-hidden="true"></i> Wazuh Kibana plugin log
|
||||
messages</span>
|
||||
<span class="md-subheader">Log file located at <span
|
||||
class="wz-text-monospace">/usr/share/kibana/optimize/wazuh-logs/wazuhapp.log</span></span>
|
||||
</div>
|
||||
<!-- End headline -->
|
||||
|
||||
@ -13,30 +15,35 @@
|
||||
<!-- End loading ring -->
|
||||
|
||||
<div layout="row" ng-show="!ctrl.loadingLogs">
|
||||
<md-button class="wz-report-refresh-btn" ng-click="ctrl.refreshLogs()"><i class="fa fa-fw fa-refresh"></i> Refresh</md-button>
|
||||
<md-button class="wz-report-refresh-btn" ng-click="ctrl.refreshLogs()"><svg class="euiIcon euiIcon--medium"
|
||||
focusable="false" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path
|
||||
d="M11.228 2.942a.5.5 0 1 1-.538.842A5 5 0 1 0 13 8a.5.5 0 1 1 1 0 6 6 0 1 1-2.772-5.058zM14 1.5v3A1.5 1.5 0 0 1 12.5 6h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 1 1 1 0z">
|
||||
</path>
|
||||
</svg> Refresh</md-button>
|
||||
</div>
|
||||
|
||||
<div layout="row" class="md-padding" ng-show="!ctrl.loadingLogs">
|
||||
<table class="table table-striped table-condensed" style="table-layout: fixed !important" id="wz_table">
|
||||
<thead class="wz-text-bold">
|
||||
<th class="wz-text-left col-lg-2" >Date</th>
|
||||
<th class="wz-text-left col-lg-1" >Level</th>
|
||||
<th class="wz-text-left" >Message</th>
|
||||
<th class="wz-text-left col-lg-2">Date</th>
|
||||
<th class="wz-text-left col-lg-1">Level</th>
|
||||
<th class="wz-text-left">Message</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="wz-word-wrap" ng-repeat="item in ctrl.logs">
|
||||
<td>
|
||||
{{ item.date | date: "medium" }}
|
||||
{{ item.date | date: "medium" }}
|
||||
</td>
|
||||
<td>
|
||||
{{ item.level.toUpperCase() }}
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
{{ item.message }}
|
||||
</td>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -10,21 +10,6 @@
|
||||
</div>
|
||||
<!-- End loading ring -->
|
||||
|
||||
<!-- Navigation section -->
|
||||
<div layout="row" layout-align="start center" ng-if="!ctrl.load">
|
||||
<!-- Breadcrumbs -->
|
||||
<div layout="row" layout-padding>
|
||||
<!-- Always show a functional breadcrumb -->
|
||||
<div>
|
||||
<span>Settings</span>
|
||||
<span> / </span>
|
||||
<span>{{ ctrl.tabNames[ctrl.tab] }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End breadcrumbs -->
|
||||
</div>
|
||||
<!-- End navigation section -->
|
||||
|
||||
<!-- Navigation bar -->
|
||||
<md-nav-bar
|
||||
ng-if="!ctrl.load"
|
||||
|
16
public/utils/d3-chart.js
vendored
16
public/utils/d3-chart.js
vendored
@ -23,11 +23,11 @@ const render = (dataset, element) => {
|
||||
.sort(null)
|
||||
.padAngle(0.03);
|
||||
|
||||
var w = 250,
|
||||
h = 250;
|
||||
var w = 200,
|
||||
h = 200;
|
||||
|
||||
var outerRadius = w / 2;
|
||||
var innerRadius = 85;
|
||||
var innerRadius = 75;
|
||||
|
||||
var color = d3.scale.category10();
|
||||
|
||||
@ -106,8 +106,8 @@ const render = (dataset, element) => {
|
||||
legend
|
||||
.append('rect')
|
||||
.attr({
|
||||
width: legendRectSize,
|
||||
height: legendRectSize,
|
||||
width: 12,
|
||||
height: 12,
|
||||
rx: 20,
|
||||
ry: 20
|
||||
})
|
||||
@ -119,15 +119,15 @@ const render = (dataset, element) => {
|
||||
legend
|
||||
.append('text')
|
||||
.attr({
|
||||
x: 30,
|
||||
y: 15
|
||||
x: 20,
|
||||
y: 10
|
||||
})
|
||||
.text(function(d) {
|
||||
return d;
|
||||
})
|
||||
.style({
|
||||
fill: '#929DAF',
|
||||
'font-size': '14px'
|
||||
'font-size': '10px'
|
||||
});
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user