diff --git a/CHANGELOG.md b/CHANGELOG.md
index 77ac8f8b9c..d1a08e4a3e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,7 +18,7 @@ All notable changes to the Wazuh app project will be documented in this file.
### Changed
-- Removed embedded discover [#6120](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6120) [#6235](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6235) [#6254](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6254) [#6285](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6285) [#6288](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6288) [#6290](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6290) [#6289](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6289) [#6286](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6286) [#6275](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6275) [#6287](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6287) [#6297](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6297) [#6287](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6287) [#6291](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6287) [#6459](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6459) [#6434](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6434) [#6504](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6504) [#6649](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6649)
+- Removed embedded discover [#6120](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6120) [#6235](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6235) [#6254](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6254) [#6285](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6285) [#6288](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6288) [#6290](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6290) [#6289](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6289) [#6286](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6286) [#6275](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6275) [#6287](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6287) [#6297](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6297) [#6291](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6287) [#6459](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6459) [#6434](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6434) [#6504](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6504) [#6649](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6649) [#6506](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6506)
- Develop logic of a new index for the fim module [#6227](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6227)
- Allow editing groups for an agent from Endpoints Summary [#6250](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6250)
- Change how the configuration is managed in the backend side [#6337](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6337) [#6519](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6519) [#6573](https://github.com/wazuh/wazuh-dashboard-plugins/pull/6573)
diff --git a/plugins/main/common/constants.ts b/plugins/main/common/constants.ts
index 6ce57bd89f..d7ac2d3f6b 100644
--- a/plugins/main/common/constants.ts
+++ b/plugins/main/common/constants.ts
@@ -230,6 +230,7 @@ export const DATA_SOURCE_FILTER_CONTROLLED_REGULATORY_COMPLIANCE_REQUIREMENT =
export const DATA_SOURCE_FILTER_CONTROLLED_PCI_DSS_EXIST = 'pci-dss-exist';
export const DATA_SOURCE_FILTER_CONTROLLED_VULNERABILITIES_RULE_GROUP =
'vulnerabilities-rule-group';
+export const DATA_SOURCE_FILTER_CONTROLLED_GDPR_EXIST = 'gdpr-rule-exist';
export const DATA_SOURCE_FILTER_CONTROLLED_HIPAA_EXIST = 'hipaa-rule-exist';
export const DATA_SOURCE_FILTER_CONTROLLED_DOCKER_RULE_GROUP =
'docker-rule-group';
diff --git a/plugins/main/public/components/common/data-source/pattern/alerts/alerts-gdpr/alerts-gdpr-data-source.ts b/plugins/main/public/components/common/data-source/pattern/alerts/alerts-gdpr/alerts-gdpr-data-source.ts
new file mode 100644
index 0000000000..0117d2fed2
--- /dev/null
+++ b/plugins/main/public/components/common/data-source/pattern/alerts/alerts-gdpr/alerts-gdpr-data-source.ts
@@ -0,0 +1,42 @@
+import { tFilter } from '../../../index';
+import { DATA_SOURCE_FILTER_CONTROLLED_GDPR_EXIST } from '../../../../../../../common/constants';
+import { AlertsDataSource } from '../alerts-data-source';
+
+const KEY_EXIST = 'rule.gdpr';
+
+export class AlertsGDPRDataSource extends AlertsDataSource {
+ constructor(id: string, title: string) {
+ super(id, title);
+ }
+
+ private getFilterExist() {
+ return [
+ {
+ meta: {
+ index: this.id,
+ negate: false,
+ disabled: false,
+ alias: null,
+ type: 'exists',
+ key: KEY_EXIST,
+ value: 'exists',
+ params: {
+ query: null,
+ type: 'phrase',
+ },
+ controlledBy: DATA_SOURCE_FILTER_CONTROLLED_GDPR_EXIST,
+ },
+ exists: {
+ field: KEY_EXIST,
+ },
+ $state: {
+ store: 'appState',
+ },
+ } as tFilter,
+ ];
+ }
+
+ getFixedFilters(): tFilter[] {
+ return [...this.getFilterExist(), ...super.getFixedFilters()];
+ }
+}
diff --git a/plugins/main/public/components/common/data-source/pattern/alerts/alerts-gdpr/index.ts b/plugins/main/public/components/common/data-source/pattern/alerts/alerts-gdpr/index.ts
new file mode 100644
index 0000000000..1ce8ffa32d
--- /dev/null
+++ b/plugins/main/public/components/common/data-source/pattern/alerts/alerts-gdpr/index.ts
@@ -0,0 +1 @@
+export * from './alerts-gdpr-data-source';
diff --git a/plugins/main/public/components/common/data-source/pattern/alerts/index.ts b/plugins/main/public/components/common/data-source/pattern/alerts/index.ts
index f7cb5abfb7..047fba4a23 100644
--- a/plugins/main/public/components/common/data-source/pattern/alerts/index.ts
+++ b/plugins/main/public/components/common/data-source/pattern/alerts/index.ts
@@ -10,5 +10,6 @@ export * from './vulnerabilities';
export * from './mitre-attack';
export * from './pci-dss';
export * from './virustotal';
+export * from './alerts-gdpr';
export * from './alerts-configuration-assessment';
export * from './alerts-google-cloud';
diff --git a/plugins/main/public/components/common/modules/modules-defaults.tsx b/plugins/main/public/components/common/modules/modules-defaults.tsx
index 314442d4f0..dd327e3b6b 100644
--- a/plugins/main/public/components/common/modules/modules-defaults.tsx
+++ b/plugins/main/public/components/common/modules/modules-defaults.tsx
@@ -49,12 +49,12 @@ import { mitreAttackColumns } from '../../overview/mitre/events/mitre-attack-col
import { virustotalColumns } from '../../overview/virustotal/events/virustotal-columns';
import { malwareDetectionColumns } from '../../overview/malware-detection/events/malware-detection-columns';
import { WAZUH_VULNERABILITIES_PATTERN } from '../../../../common/constants';
+import { DashboardGDPR } from '../../overview/gdpr/dashboards/dashboard';
import { DashboardPCIDSS } from '../../overview/pci/dashboards/dashboard';
import { DashboardDocker } from '../../overview/docker/dashboards';
import { DashboardMalwareDetection } from '../../overview/malware-detection/dashboard';
import { DashboardFIM } from '../../overview/fim/dashboard/dashboard';
import { DashboardHIPAA } from '../../overview/hipaa/dashboards/dashboard';
-import { MitreAttackDataSource } from '../data-source/pattern/alerts/mitre-attack/mitre-attack-data-source';
import {
AlertsDockerDataSource,
AlertsDataSource,
@@ -65,6 +65,8 @@ import {
AlertsGoogleCloudDataSource,
AlertsMalwareDetectionDataSource,
AlertsFIMDataSource,
+ MitreAttackDataSource,
+ AlertsGDPRDataSource,
AlertsConfigurationAssessmentDataSource,
AlertsHIPAADataSource,
} from '../data-source';
@@ -400,7 +402,26 @@ export const ModulesDefaults = {
},
gdpr: {
init: 'dashboard',
- tabs: RegulatoryComplianceTabs(gdprColumns),
+ tabs: [
+ {
+ id: 'dashboard',
+ name: 'Dashboard',
+ buttons: [ButtonModuleExploreAgent, ButtonModuleGenerateReport],
+ component: DashboardGDPR,
+ },
+ {
+ id: 'inventory',
+ name: 'Controls',
+ buttons: [ButtonModuleExploreAgent],
+ component: props => (
+
+ ),
+ },
+ renderDiscoverTab({
+ tableColumns: gdprColumns,
+ DataSource: AlertsGDPRDataSource,
+ }),
+ ],
availableFor: ['manager', 'agent'],
},
tsc: {
diff --git a/plugins/main/public/components/common/wazuh-discover/wz-flyout-discover.tsx b/plugins/main/public/components/common/wazuh-discover/wz-flyout-discover.tsx
index 9d9ef8b296..661cd05f7b 100644
--- a/plugins/main/public/components/common/wazuh-discover/wz-flyout-discover.tsx
+++ b/plugins/main/public/components/common/wazuh-discover/wz-flyout-discover.tsx
@@ -79,11 +79,10 @@ const WazuhFlyoutDiscoverComponent = (props: WazuhDiscoverProps) => {
: undefined;
// table states
const [pagination, setPagination] = useState<
- EuiBasicTableProps['pagination']
+ Omit['pagination'], 'totalItemCount'>
>({
pageIndex: 0,
pageSize: DEFAULT_PAGE_SIZE,
- totalItemCount: 0,
});
const [sorting, setSorting] = useState['sorting']>({
sort: { field: timeField || '@timestamp', direction: 'desc' },
@@ -146,13 +145,8 @@ const WazuhFlyoutDiscoverComponent = (props: WazuhDiscoverProps) => {
sorting: parseSorting,
})
.then((response: SearchResponse) => {
- const totalHits = response?.hits?.total || 0;
setPagination({
...pagination,
- totalItemCount:
- totalHits > MAX_ENTRIES_PER_QUERY
- ? MAX_ENTRIES_PER_QUERY
- : totalHits,
});
setResults(response);
})
@@ -197,7 +191,6 @@ const WazuhFlyoutDiscoverComponent = (props: WazuhDiscoverProps) => {
setPagination({
pageIndex,
pageSize,
- totalItemCount: results?.hits?.total || 0,
});
setSorting({ sort: { field, direction: direction as Direction } });
};
@@ -325,7 +318,13 @@ const WazuhFlyoutDiscoverComponent = (props: WazuhDiscoverProps) => {
itemIdToExpandedRowMap={itemIdToExpandedRowMap}
isExpandable={isExpanded}
columns={getColumns()}
- pagination={pagination}
+ pagination={{
+ ...pagination,
+ totalItemCount:
+ (results?.hits?.total ?? 0) > MAX_ENTRIES_PER_QUERY
+ ? MAX_ENTRIES_PER_QUERY
+ : results?.hits?.total ?? 0,
+ }}
sorting={sorting}
onChange={onTableChange}
/>
diff --git a/plugins/main/public/components/overview/gdpr/dashboards/dashboard-panels.ts b/plugins/main/public/components/overview/gdpr/dashboards/dashboard-panels.ts
new file mode 100644
index 0000000000..ae293f4ca8
--- /dev/null
+++ b/plugins/main/public/components/overview/gdpr/dashboards/dashboard-panels.ts
@@ -0,0 +1,998 @@
+import { DashboardPanelState } from '../../../../../../../src/plugins/dashboard/public/application';
+import { EmbeddableInput } from '../../../../../../../src/plugins/embeddable/public';
+
+const getVisStateTopAgentsByAlertsCount = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Overview-GDPR-Agents',
+ title: 'Top 10 agents by alerts number',
+ type: 'pie',
+ params: {
+ type: 'pie',
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ isDonut: true,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ {
+ id: '1',
+ enabled: true,
+ type: 'count',
+ schema: 'metric',
+ params: {},
+ },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'agent.name',
+ size: 10,
+ order: 'desc',
+ orderBy: '1',
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateRequirements = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Overview-GDPR-requirements',
+ title: 'GDPR requirements',
+ type: 'line',
+ params: {
+ type: 'line',
+ grid: { categoryLines: true, valueAxis: 'ValueAxis-1' },
+ categoryAxes: [
+ {
+ id: 'CategoryAxis-1',
+ type: 'category',
+ position: 'bottom',
+ show: true,
+ style: {},
+ scale: { type: 'linear' },
+ labels: { show: true, filter: true, truncate: 100 },
+ title: {},
+ },
+ ],
+ valueAxes: [
+ {
+ id: 'ValueAxis-1',
+ name: 'LeftAxis-1',
+ type: 'value',
+ position: 'left',
+ show: true,
+ style: {},
+ scale: { type: 'linear', mode: 'normal' },
+ labels: { show: true, rotate: 0, filter: false, truncate: 100 },
+ title: { text: 'Count' },
+ },
+ ],
+ seriesParams: [
+ {
+ show: 'true',
+ type: 'line',
+ mode: 'normal',
+ data: { label: 'Count', id: '1' },
+ valueAxis: 'ValueAxis-1',
+ drawLinesBetweenPoints: false,
+ showCircles: true,
+ },
+ ],
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ times: [],
+ addTimeMarker: false,
+ dimensions: {
+ x: {
+ accessor: 0,
+ format: { id: 'date', params: { pattern: 'YYYY-MM-DD' } },
+ params: { date: true, interval: 'P1D', format: 'YYYY-MM-DD' },
+ aggType: 'date_histogram',
+ },
+ y: [
+ {
+ accessor: 2,
+ format: { id: 'number' },
+ params: {},
+ aggType: 'count',
+ },
+ ],
+ z: [
+ {
+ accessor: 3,
+ format: { id: 'number' },
+ params: {},
+ aggType: 'count',
+ },
+ ],
+ series: [
+ {
+ accessor: 1,
+ format: {
+ id: 'terms',
+ params: {
+ id: 'string',
+ otherBucketLabel: 'Other',
+ missingBucketLabel: 'Missing',
+ },
+ },
+ params: {},
+ aggType: 'terms',
+ },
+ ],
+ },
+ radiusRatio: 50,
+ },
+ uiState: { vis: { legendOpen: false } },
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ {
+ id: '1',
+ enabled: true,
+ type: 'count',
+ schema: 'metric',
+ params: {},
+ },
+ {
+ id: '3',
+ enabled: true,
+ type: 'terms',
+ schema: 'group',
+ params: {
+ field: 'rule.gdpr',
+ orderBy: '1',
+ order: 'desc',
+ size: 10,
+ otherBucket: false,
+ otherBucketLabel: 'Other',
+ missingBucket: false,
+ missingBucketLabel: 'Missing',
+ },
+ },
+ {
+ id: '2',
+ enabled: true,
+ type: 'date_histogram',
+ schema: 'segment',
+ params: {
+ field: 'timestamp',
+ timeRange: { from: 'now-1h', to: 'now' },
+ useNormalizedEsInterval: true,
+ interval: 'auto',
+ drop_partials: false,
+ min_doc_count: 1,
+ extended_bounds: {},
+ },
+ },
+ {
+ id: '4',
+ enabled: true,
+ type: 'count',
+ schema: 'radius',
+ params: {},
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateRequirementsOverTime = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Overview-GDPR-Requirements-heatmap',
+ title: 'Top requirements over time',
+ type: 'area',
+ params: {
+ type: 'area',
+ grid: {
+ categoryLines: true,
+ style: { color: '#eee' },
+ valueAxis: 'ValueAxis-1',
+ },
+ categoryAxes: [
+ {
+ id: 'CategoryAxis-1',
+ type: 'category',
+ position: 'bottom',
+ show: true,
+ style: {},
+ scale: { type: 'linear' },
+ labels: { show: true, filter: true, truncate: 100 },
+ title: {},
+ },
+ ],
+ valueAxes: [
+ {
+ id: 'ValueAxis-1',
+ name: 'LeftAxis-1',
+ type: 'value',
+ position: 'left',
+ show: true,
+ style: {},
+ scale: { type: 'linear', mode: 'normal' },
+ labels: { show: true, rotate: 0, filter: false, truncate: 100 },
+ title: { text: 'Count' },
+ },
+ ],
+ seriesParams: [
+ {
+ show: 'true',
+ type: 'area',
+ mode: 'stacked',
+ data: { label: 'Count', id: '1' },
+ drawLinesBetweenPoints: true,
+ showCircles: true,
+ interpolate: 'cardinal',
+ valueAxis: 'ValueAxis-1',
+ },
+ ],
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ times: [],
+ addTimeMarker: false,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ {
+ id: '1',
+ enabled: true,
+ type: 'count',
+ schema: 'metric',
+ params: {},
+ },
+ {
+ id: '3',
+ enabled: true,
+ type: 'terms',
+ schema: 'group',
+ params: {
+ field: 'rule.gdpr',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ otherBucket: false,
+ otherBucketLabel: 'Other',
+ missingBucket: false,
+ missingBucketLabel: 'Missing',
+ },
+ },
+ {
+ id: '2',
+ enabled: true,
+ type: 'date_histogram',
+ schema: 'segment',
+ params: {
+ field: 'timestamp',
+ timeRange: { from: 'now-24h', to: 'now', mode: 'quick' },
+ useNormalizedEsInterval: true,
+ interval: 'auto',
+ time_zone: 'Europe/Berlin',
+ drop_partials: false,
+ customInterval: '2h',
+ min_doc_count: 1,
+ extended_bounds: {},
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateRequirementsHeatmap = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Overview-GDPR-Requirements-Agents-heatmap',
+ title: 'Last alerts',
+ type: 'heatmap',
+ params: {
+ type: 'heatmap',
+ addTooltip: true,
+ addLegend: true,
+ enableHover: false,
+ legendPosition: 'right',
+ times: [],
+ colorsNumber: 10,
+ colorSchema: 'Greens',
+ setColorRange: false,
+ colorsRange: [],
+ invertColors: false,
+ percentageMode: false,
+ valueAxes: [
+ {
+ show: false,
+ id: 'ValueAxis-1',
+ type: 'value',
+ scale: { type: 'linear', defaultYExtents: false },
+ labels: {
+ show: false,
+ rotate: 0,
+ overwriteColor: false,
+ color: '#555',
+ },
+ },
+ ],
+ },
+ uiState: {
+ vis: {
+ defaultColors: {
+ '0 - 13': 'rgb(247,252,245)',
+ '13 - 26': 'rgb(233,247,228)',
+ '26 - 39': 'rgb(211,238,205)',
+ '39 - 52': 'rgb(184,227,177)',
+ '52 - 65': 'rgb(152,213,148)',
+ '65 - 78': 'rgb(116,196,118)',
+ '78 - 91': 'rgb(75,176,98)',
+ '91 - 104': 'rgb(47,152,79)',
+ '104 - 117': 'rgb(21,127,59)',
+ '117 - 130': 'rgb(0,100,40)',
+ },
+ },
+ },
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ {
+ id: '1',
+ enabled: true,
+ type: 'count',
+ schema: 'metric',
+ params: {},
+ },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'rule.gdpr',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ otherBucket: false,
+ otherBucketLabel: 'Other',
+ missingBucket: false,
+ missingBucketLabel: 'Missing',
+ customLabel: 'Requirements',
+ },
+ },
+ {
+ id: '3',
+ enabled: true,
+ type: 'terms',
+ schema: 'group',
+ params: {
+ field: 'agent.name',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ otherBucket: false,
+ otherBucketLabel: 'Other',
+ missingBucket: false,
+ missingBucketLabel: 'Missing',
+ customLabel: 'Agents',
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateRequirementsByAgent = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Overview-GDPR-Requirements-by-agent',
+ title: 'Requirements by agent',
+ type: 'histogram',
+ params: {
+ type: 'histogram',
+ grid: { categoryLines: false, style: { color: '#eee' } },
+ categoryAxes: [
+ {
+ id: 'CategoryAxis-1',
+ type: 'category',
+ position: 'bottom',
+ show: true,
+ style: {},
+ scale: { type: 'linear' },
+ labels: { show: true, filter: true, truncate: 100, rotate: 0 },
+ title: {},
+ },
+ ],
+ valueAxes: [
+ {
+ id: 'ValueAxis-1',
+ name: 'LeftAxis-1',
+ type: 'value',
+ position: 'left',
+ show: true,
+ style: {},
+ scale: { type: 'linear', mode: 'normal' },
+ labels: { show: true, rotate: 0, filter: false, truncate: 100 },
+ title: { text: 'Count' },
+ },
+ ],
+ seriesParams: [
+ {
+ show: 'true',
+ type: 'histogram',
+ mode: 'stacked',
+ data: { label: 'Count', id: '1' },
+ valueAxis: 'ValueAxis-1',
+ drawLinesBetweenPoints: true,
+ showCircles: true,
+ },
+ ],
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ times: [],
+ addTimeMarker: false,
+ radiusRatio: 51,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ {
+ id: '1',
+ enabled: true,
+ type: 'count',
+ schema: 'metric',
+ params: {},
+ },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'rule.gdpr',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ customLabel: 'GDPR Requirements',
+ },
+ },
+ {
+ id: '3',
+ enabled: true,
+ type: 'terms',
+ schema: 'group',
+ params: {
+ field: 'agent.name',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateTopRuleGroups = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Agents-GDPR-Groups',
+ title: 'Top 5 rule groups',
+ type: 'pie',
+ params: {
+ type: 'pie',
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ isDonut: true,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'rule.groups',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateTopRules = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Agents-GDPR-Rule',
+ title: 'Top 5 rules',
+ type: 'pie',
+ params: {
+ type: 'pie',
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ isDonut: true,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'rule.description',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateAgentTopRequirements = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Agents-GDPR-Requirement',
+ title: 'Top 5 requirements',
+ type: 'pie',
+ params: {
+ type: 'pie',
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ isDonut: true,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: { field: 'rule.gdpr', size: 5, order: 'desc', orderBy: '1' },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateAgentTopRequirementsCount = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Agents-GDPR-Requirements',
+ title: 'GDPR Requirements',
+ type: 'histogram',
+ params: {
+ type: 'histogram',
+ grid: { categoryLines: false, style: { color: '#eee' } },
+ categoryAxes: [
+ {
+ id: 'CategoryAxis-1',
+ type: 'category',
+ position: 'bottom',
+ show: true,
+ style: {},
+ scale: { type: 'linear' },
+ labels: { show: true, filter: true, truncate: 100, rotate: 0 },
+ title: {},
+ },
+ ],
+ valueAxes: [
+ {
+ id: 'ValueAxis-1',
+ name: 'LeftAxis-1',
+ type: 'value',
+ position: 'left',
+ show: true,
+ style: {},
+ scale: { type: 'linear', mode: 'normal' },
+ labels: { show: true, rotate: 0, filter: false, truncate: 100 },
+ title: { text: 'Count' },
+ },
+ ],
+ seriesParams: [
+ {
+ show: 'true',
+ type: 'histogram',
+ mode: 'stacked',
+ data: { label: 'Count', id: '1' },
+ valueAxis: 'ValueAxis-1',
+ drawLinesBetweenPoints: true,
+ showCircles: true,
+ },
+ ],
+ addTooltip: true,
+ addLegend: true,
+ legendPosition: 'right',
+ times: [],
+ addTimeMarker: false,
+ },
+ uiState: {},
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
+ {
+ id: '3',
+ enabled: true,
+ type: 'terms',
+ schema: 'group',
+ params: {
+ field: 'rule.gdpr',
+ size: 5,
+ order: 'desc',
+ orderBy: '1',
+ customLabel: '',
+ },
+ },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'rule.gdpr',
+ size: 10,
+ order: 'desc',
+ orderBy: '1',
+ customLabel: 'GDPR requirements',
+ },
+ },
+ ],
+ },
+ };
+};
+
+const getVisStateAgentRuleLevelDistribution = (indexPatternId: string) => {
+ return {
+ id: 'Wazuh-App-Agents-GDPR-Rule-level-distribution',
+ title: 'Rule level distribution',
+ type: 'pie',
+ params: {
+ type: 'pie',
+ addTooltip: true,
+ addLegend: false,
+ legendPosition: 'right',
+ isDonut: true,
+ labels: { show: true, values: true, last_level: true, truncate: 100 },
+ },
+ uiState: { vis: { legendOpen: false } },
+ data: {
+ searchSource: {
+ query: {
+ language: 'kuery',
+ query: '',
+ },
+ filter: [],
+ index: indexPatternId,
+ },
+ references: [
+ {
+ name: 'kibanaSavedObjectMeta.searchSourceJSON.index',
+ type: 'index-pattern',
+ id: indexPatternId,
+ },
+ ],
+ aggs: [
+ { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
+ {
+ id: '2',
+ enabled: true,
+ type: 'terms',
+ schema: 'segment',
+ params: {
+ field: 'rule.level',
+ size: 15,
+ order: 'desc',
+ orderBy: '1',
+ otherBucket: false,
+ otherBucketLabel: 'Other',
+ missingBucket: false,
+ missingBucketLabel: 'Missing',
+ },
+ },
+ ],
+ },
+ };
+};
+
+export const getDashboardPanels = (
+ indexPatternId: string,
+ isPinnedAgent: boolean,
+): {
+ [panelId: string]: DashboardPanelState<
+ EmbeddableInput & { [k: string]: unknown }
+ >;
+} => {
+ const overviewDashboard = {
+ g1: {
+ gridData: {
+ w: 33,
+ h: 14,
+ x: 0,
+ y: 0,
+ i: 'g1',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'g1',
+ savedVis: getVisStateTopAgentsByAlertsCount(indexPatternId),
+ },
+ },
+ g2: {
+ gridData: {
+ w: 15,
+ h: 14,
+ x: 33,
+ y: 0,
+ i: 'g2',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'g2',
+ savedVis: getVisStateRequirements(indexPatternId),
+ },
+ },
+ g3: {
+ gridData: {
+ w: 48,
+ h: 11,
+ x: 0,
+ y: 14,
+ i: 'g3',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'g3',
+ savedVis: getVisStateRequirementsOverTime(indexPatternId),
+ },
+ },
+ g4: {
+ gridData: {
+ w: 48,
+ h: 19,
+ x: 0,
+ y: 25,
+ i: 'g4',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'g4',
+ savedVis: getVisStateRequirementsHeatmap(indexPatternId),
+ },
+ },
+ g5: {
+ gridData: {
+ w: 48,
+ h: 9,
+ x: 0,
+ y: 43,
+ i: 'g5',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'g5',
+ savedVis: getVisStateRequirementsByAgent(indexPatternId),
+ },
+ },
+ };
+
+ const agentDashboard = {
+ a1: {
+ gridData: {
+ w: 16,
+ h: 11,
+ x: 0,
+ y: 0,
+ i: 'a1',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'a1',
+ savedVis: getVisStateTopRuleGroups(indexPatternId),
+ },
+ },
+ a2: {
+ gridData: {
+ w: 16,
+ h: 11,
+ x: 16,
+ y: 0,
+ i: 'a2',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'a2',
+ savedVis: getVisStateTopRules(indexPatternId),
+ },
+ },
+ a3: {
+ gridData: {
+ w: 16,
+ h: 11,
+ x: 32,
+ y: 0,
+ i: 'a3',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'a3',
+ savedVis: getVisStateAgentTopRequirements(indexPatternId),
+ },
+ },
+ a4: {
+ gridData: {
+ w: 35,
+ h: 11,
+ x: 0,
+ y: 11,
+ i: 'a4',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'a4',
+ savedVis: getVisStateAgentTopRequirementsCount(indexPatternId),
+ },
+ },
+ a5: {
+ gridData: {
+ w: 13,
+ h: 11,
+ x: 35,
+ y: 11,
+ i: 'a5',
+ },
+ type: 'visualization',
+ explicitInput: {
+ id: 'a5',
+ savedVis: getVisStateAgentRuleLevelDistribution(indexPatternId),
+ },
+ },
+ };
+ return isPinnedAgent ? agentDashboard : overviewDashboard;
+};
diff --git a/plugins/main/public/components/overview/gdpr/dashboards/dashboard.tsx b/plugins/main/public/components/overview/gdpr/dashboards/dashboard.tsx
new file mode 100644
index 0000000000..ed8934cefa
--- /dev/null
+++ b/plugins/main/public/components/overview/gdpr/dashboards/dashboard.tsx
@@ -0,0 +1,142 @@
+import React, { useState, useEffect } from 'react';
+import { SearchResponse } from '../../../../../../../src/core/server';
+import { getPlugins } from '../../../../kibana-services';
+import { ViewMode } from '../../../../../../../src/plugins/embeddable/public';
+import { getDashboardPanels } from './dashboard-panels';
+import { I18nProvider } from '@osd/i18n/react';
+import useSearchBar from '../../../common/search-bar/use-search-bar';
+import './styles.scss';
+import { withErrorBoundary } from '../../../common/hocs';
+import { DiscoverNoResults } from '../../../common/no-results/no-results';
+import { LoadingSpinner } from '../../../common/loading-spinner/loading-spinner';
+import { IndexPattern } from '../../../../../../../src/plugins/data/common';
+import {
+ ErrorFactory,
+ ErrorHandler,
+ HttpError,
+} from '../../../../react-services/error-management';
+import { compose } from 'redux';
+import { SampleDataWarning } from '../../../visualize/components';
+import { AlertsGDPRDataSource } from '../../../common/data-source/pattern/alerts/alerts-gdpr/alerts-gdpr-data-source';
+import {
+ AlertsDataSourceRepository,
+ PatternDataSource,
+ tParsedIndexPattern,
+ useDataSource,
+} from '../../../common/data-source';
+
+const plugins = getPlugins();
+
+const SearchBar = getPlugins().data.ui.SearchBar;
+
+const DashboardByRenderer = plugins.dashboard.DashboardContainerByValueRenderer;
+
+const DashboardGDPRComponent: React.FC = () => {
+ const {
+ filters,
+ dataSource,
+ fetchFilters,
+ isLoading: isDataSourceLoading,
+ fetchData,
+ setFilters,
+ } = useDataSource({
+ DataSource: AlertsGDPRDataSource,
+ repository: new AlertsDataSourceRepository(),
+ });
+ const [results, setResults] = useState({} as SearchResponse);
+
+ const { searchBarProps } = useSearchBar({
+ indexPattern: dataSource?.indexPattern as IndexPattern,
+ filters,
+ setFilters,
+ });
+
+ const { query, dateRangeFrom, dateRangeTo } = searchBarProps;
+
+ useEffect(() => {
+ if (isDataSourceLoading) {
+ return;
+ }
+ fetchData({
+ query,
+ dateRange: {
+ from: dateRangeFrom,
+ to: dateRangeTo,
+ },
+ })
+ .then(results => {
+ setResults(results);
+ })
+ .catch(error => {
+ const searchError = ErrorFactory.create(HttpError, {
+ error,
+ message: 'Error fetching alerts',
+ });
+ ErrorHandler.handleError(searchError);
+ });
+ }, [
+ JSON.stringify(fetchFilters),
+ JSON.stringify(query),
+ JSON.stringify(dateRangeFrom),
+ JSON.stringify(dateRangeTo),
+ ]);
+
+ return (
+ <>
+
+ <>
+ {isDataSourceLoading && !dataSource ? (
+
+ ) : (
+
+
+
+ )}
+ {dataSource && results?.hits?.total === 0 ? (
+
+ ) : null}
+ {dataSource && results?.hits?.total > 0 ? (
+ <>
+
+
+
+
+ >
+ ) : null}
+ >
+
+ >
+ );
+};
+
+export const DashboardGDPR = compose(withErrorBoundary)(DashboardGDPRComponent);
diff --git a/plugins/main/public/components/overview/gdpr/dashboards/index.tsx b/plugins/main/public/components/overview/gdpr/dashboards/index.tsx
new file mode 100644
index 0000000000..b691822976
--- /dev/null
+++ b/plugins/main/public/components/overview/gdpr/dashboards/index.tsx
@@ -0,0 +1 @@
+export * from './dashboard';
\ No newline at end of file
diff --git a/plugins/main/public/components/overview/gdpr/dashboards/styles.scss b/plugins/main/public/components/overview/gdpr/dashboards/styles.scss
new file mode 100644
index 0000000000..a198ad811f
--- /dev/null
+++ b/plugins/main/public/components/overview/gdpr/dashboards/styles.scss
@@ -0,0 +1,10 @@
+.gdpr-dashboard-responsive {
+ @media (max-width: 767px) {
+ .react-grid-layout {
+ height: auto !important;
+ }
+ .dshLayout-isMaximizedPanel {
+ height: 100% !important;
+ }
+ }
+}
diff --git a/plugins/main/server/integration-files/visualizations/agents/agents-gdpr.ts b/plugins/main/server/integration-files/visualizations/agents/agents-gdpr.ts
deleted file mode 100644
index 61719f8bbd..0000000000
--- a/plugins/main/server/integration-files/visualizations/agents/agents-gdpr.ts
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Wazuh app - Module for Agents/GDPR visualizations
- * Copyright (C) 2015-2022 Wazuh, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Find more information about this on the LICENSE file.
- */
-export default [
- {
- _id: 'Wazuh-App-Agents-GDPR-Groups',
- _source: {
- title: 'Top 5 rule groups',
- visState: JSON.stringify({
- title: 'Top 5 rule groups',
- type: 'pie',
- params: {
- type: 'pie',
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- isDonut: true,
- },
- aggs: [
- { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: { field: 'rule.groups', size: 5, order: 'desc', orderBy: '1' },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Agents-GDPR-Rule',
- _source: {
- title: 'Top 5 rules',
- visState: JSON.stringify({
- title: 'Top 5 rules',
- type: 'pie',
- params: {
- type: 'pie',
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- isDonut: true,
- },
- aggs: [
- { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: { field: 'rule.description', size: 5, order: 'desc', orderBy: '1' },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Agents-GDPR-Requirement',
- _source: {
- title: 'Top 5 requirements',
- visState: JSON.stringify({
- title: 'Top 5 requirements',
- type: 'pie',
- params: {
- type: 'pie',
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- isDonut: true,
- },
- aggs: [
- { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: { field: 'rule.gdpr', size: 5, order: 'desc', orderBy: '1' },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Agents-GDPR-Rule-level-distribution',
- _source: {
- title: 'Rule level distribution',
- visState: JSON.stringify({
- title: 'Rule level distribution',
- type: 'pie',
- params: {
- type: 'pie',
- addTooltip: true,
- addLegend: false,
- legendPosition: 'right',
- isDonut: true,
- labels: { show: true, values: true, last_level: true, truncate: 100 },
- },
- aggs: [
- { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: {
- field: 'rule.level',
- size: 15,
- order: 'desc',
- orderBy: '1',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- },
- },
- ],
- }),
- uiStateJSON: JSON.stringify({ vis: { legendOpen: false } }),
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Agents-GDPR-Requirements',
- _source: {
- title: 'Requirements',
- visState: JSON.stringify({
- title: 'Requirements',
- type: 'histogram',
- params: {
- type: 'histogram',
- grid: { categoryLines: false, style: { color: '#eee' } },
- categoryAxes: [
- {
- id: 'CategoryAxis-1',
- type: 'category',
- position: 'bottom',
- show: true,
- style: {},
- scale: { type: 'linear' },
- labels: { show: true, filter:true,truncate: 100, rotate: 0 },
- title: {},
- },
- ],
- valueAxes: [
- {
- id: 'ValueAxis-1',
- name: 'LeftAxis-1',
- type: 'value',
- position: 'left',
- show: true,
- style: {},
- scale: { type: 'linear', mode: 'normal' },
- labels: { show: true, rotate: 0, filter: false, truncate: 100 },
- title: { text: 'Count' },
- },
- ],
- seriesParams: [
- {
- show: 'true',
- type: 'histogram',
- mode: 'stacked',
- data: { label: 'Count', id: '1' },
- valueAxis: 'ValueAxis-1',
- drawLinesBetweenPoints: true,
- showCircles: true,
- },
- ],
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- times: [],
- addTimeMarker: false,
- },
- aggs: [
- { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'group',
- params: { field: 'rule.gdpr', size: 5, order: 'desc', orderBy: '1', customLabel: '' },
- },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: {
- field: 'rule.gdpr',
- size: 10,
- order: 'desc',
- orderBy: '1',
- customLabel: 'GDPR requirements',
- },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Agents-GDPR-Last-alerts',
- _type: 'visualization',
- _source: {
- title: 'Last alerts',
- visState: JSON.stringify({
- title: 'Last alerts',
- type: 'table',
- params: {
- perPage: 10,
- showPartialRows: false,
- showMeticsAtAllLevels: false,
- sort: { columnIndex: 2, direction: 'desc' },
- showTotal: false,
- showToolbar: true,
- totalFunc: 'sum',
- },
- aggs: [
- { id: '1', enabled: true, type: 'count', schema: 'metric', params: {} },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'rule.gdpr',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 50,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Requirement',
- },
- },
- {
- id: '4',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'rule.description',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 10,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Rule description',
- },
- },
- ],
- }),
- uiStateJSON: JSON.stringify({
- vis: { params: { sort: { columnIndex: 2, direction: 'desc' } } },
- }),
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- },
-];
diff --git a/plugins/main/server/integration-files/visualizations/agents/index.ts b/plugins/main/server/integration-files/visualizations/agents/index.ts
index 0000dd8b38..6e89a3634f 100644
--- a/plugins/main/server/integration-files/visualizations/agents/index.ts
+++ b/plugins/main/server/integration-files/visualizations/agents/index.ts
@@ -15,7 +15,6 @@ import general from './agents-general';
import gcp from './agents-gcp';
import oscap from './agents-oscap';
import ciscat from './agents-ciscat';
-import gdpr from './agents-gdpr';
import mitre from './agents-mitre';
import nist from './agents-nist';
import tsc from './agents-tsc';
@@ -34,7 +33,6 @@ export {
gcp,
oscap,
ciscat,
- gdpr,
nist,
tsc,
pm,
diff --git a/plugins/main/server/integration-files/visualizations/overview/index.ts b/plugins/main/server/integration-files/visualizations/overview/index.ts
index e3f05f1821..36750830c6 100644
--- a/plugins/main/server/integration-files/visualizations/overview/index.ts
+++ b/plugins/main/server/integration-files/visualizations/overview/index.ts
@@ -16,7 +16,6 @@ import fim from './overview-fim';
import general from './overview-general';
import oscap from './overview-oscap';
import ciscat from './overview-ciscat';
-import gdpr from './overview-gdpr';
import nist from './overview-nist';
import tsc from './overview-tsc';
import pm from './overview-pm';
@@ -35,7 +34,6 @@ export {
general,
oscap,
ciscat,
- gdpr,
nist,
tsc,
pm,
diff --git a/plugins/main/server/integration-files/visualizations/overview/overview-gdpr.ts b/plugins/main/server/integration-files/visualizations/overview/overview-gdpr.ts
deleted file mode 100644
index d1be4a41bb..0000000000
--- a/plugins/main/server/integration-files/visualizations/overview/overview-gdpr.ts
+++ /dev/null
@@ -1,718 +0,0 @@
-/*
- * Wazuh app - Module for Overview/GDPR visualizations
- * Copyright (C) 2015-2022 Wazuh, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Find more information about this on the LICENSE file.
- */
-export default [
- {
- _id: 'Wazuh-App-Overview-GDPR-Requirements-heatmap',
- _source: {
- title: 'GDPR requirements over time',
- visState: JSON.stringify({
- title: 'Alerts by action over time',
- type: 'area',
- params: {
- type: 'area',
- grid: {
- categoryLines: true,
- style: { color: '#eee' },
- valueAxis: 'ValueAxis-1',
- },
- categoryAxes: [
- {
- id: 'CategoryAxis-1',
- type: 'category',
- position: 'bottom',
- show: true,
- style: {},
- scale: { type: 'linear' },
- labels: { show: true, filter: true, truncate: 100 },
- title: {},
- },
- ],
- valueAxes: [
- {
- id: 'ValueAxis-1',
- name: 'LeftAxis-1',
- type: 'value',
- position: 'left',
- show: true,
- style: {},
- scale: { type: 'linear', mode: 'normal' },
- labels: { show: true, rotate: 0, filter: false, truncate: 100 },
- title: { text: 'Count' },
- },
- ],
- seriesParams: [
- {
- show: 'true',
- type: 'area',
- mode: 'stacked',
- data: { label: 'Count', id: '1' },
- drawLinesBetweenPoints: true,
- showCircles: true,
- interpolate: 'cardinal',
- valueAxis: 'ValueAxis-1',
- },
- ],
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- times: [],
- addTimeMarker: false,
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'group',
- params: {
- field: 'rule.gdpr',
- size: 5,
- order: 'desc',
- orderBy: '1',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- },
- },
- {
- id: '2',
- enabled: true,
- type: 'date_histogram',
- schema: 'segment',
- params: {
- field: 'timestamp',
- timeRange: { from: 'now-24h', to: 'now', mode: 'quick' },
- useNormalizedEsInterval: true,
- interval: 'auto',
- time_zone: 'Europe/Berlin',
- drop_partials: false,
- customInterval: '2h',
- min_doc_count: 1,
- extended_bounds: {},
- },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { language: 'lucene', query: '' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Overview-GDPR-Requirements-Agents-heatmap',
- _type: 'visualization',
- _source: {
- title: 'Last alerts',
- visState: JSON.stringify({
- title: 'Last alerts',
- type: 'heatmap',
- params: {
- type: 'heatmap',
- addTooltip: true,
- addLegend: true,
- enableHover: false,
- legendPosition: 'right',
- times: [],
- colorsNumber: 10,
- colorSchema: 'Greens',
- setColorRange: false,
- colorsRange: [],
- invertColors: false,
- percentageMode: false,
- valueAxes: [
- {
- show: false,
- id: 'ValueAxis-1',
- type: 'value',
- scale: { type: 'linear', defaultYExtents: false },
- labels: {
- show: false,
- rotate: 0,
- overwriteColor: false,
- color: '#555',
- },
- },
- ],
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: {
- field: 'rule.gdpr',
- size: 5,
- order: 'desc',
- orderBy: '1',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- customLabel: 'Requirements',
- },
- },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'group',
- params: {
- field: 'agent.name',
- size: 5,
- order: 'desc',
- orderBy: '1',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- customLabel: 'Agents',
- },
- },
- ],
- }),
- uiStateJSON: JSON.stringify({
- vis: {
- defaultColors: {
- '0 - 13': 'rgb(247,252,245)',
- '13 - 26': 'rgb(233,247,228)',
- '26 - 39': 'rgb(211,238,205)',
- '39 - 52': 'rgb(184,227,177)',
- '52 - 65': 'rgb(152,213,148)',
- '65 - 78': 'rgb(116,196,118)',
- '78 - 91': 'rgb(75,176,98)',
- '91 - 104': 'rgb(47,152,79)',
- '104 - 117': 'rgb(21,127,59)',
- '117 - 130': 'rgb(0,100,40)',
- },
- },
- }),
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- query: { query: '', language: 'lucene' },
- filter: [],
- }),
- },
- },
- },
- {
- _id: 'Wazuh-App-Overview-GDPR-requirements',
- _source: {
- title: 'GDPR requirements',
- visState: JSON.stringify({
- title: 'GDPR requirements',
- type: 'line',
- params: {
- type: 'line',
- grid: { categoryLines: true, valueAxis: 'ValueAxis-1' },
- categoryAxes: [
- {
- id: 'CategoryAxis-1',
- type: 'category',
- position: 'bottom',
- show: true,
- style: {},
- scale: { type: 'linear' },
- labels: { show: true, filter: true, truncate: 100 },
- title: {},
- },
- ],
- valueAxes: [
- {
- id: 'ValueAxis-1',
- name: 'LeftAxis-1',
- type: 'value',
- position: 'left',
- show: true,
- style: {},
- scale: { type: 'linear', mode: 'normal' },
- labels: { show: true, rotate: 0, filter: false, truncate: 100 },
- title: { text: 'Count' },
- },
- ],
- seriesParams: [
- {
- show: 'true',
- type: 'line',
- mode: 'normal',
- data: { label: 'Count', id: '1' },
- valueAxis: 'ValueAxis-1',
- drawLinesBetweenPoints: false,
- showCircles: true,
- },
- ],
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- times: [],
- addTimeMarker: false,
- dimensions: {
- x: {
- accessor: 0,
- format: { id: 'date', params: { pattern: 'YYYY-MM-DD' } },
- params: { date: true, interval: 'P1D', format: 'YYYY-MM-DD' },
- aggType: 'date_histogram',
- },
- y: [
- {
- accessor: 2,
- format: { id: 'number' },
- params: {},
- aggType: 'count',
- },
- ],
- z: [
- {
- accessor: 3,
- format: { id: 'number' },
- params: {},
- aggType: 'count',
- },
- ],
- series: [
- {
- accessor: 1,
- format: {
- id: 'terms',
- params: {
- id: 'string',
- otherBucketLabel: 'Other',
- missingBucketLabel: 'Missing',
- },
- },
- params: {},
- aggType: 'terms',
- },
- ],
- },
- radiusRatio: 50,
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'group',
- params: {
- field: 'rule.gdpr',
- orderBy: '1',
- order: 'desc',
- size: 10,
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- },
- },
- {
- id: '2',
- enabled: true,
- type: 'date_histogram',
- schema: 'segment',
- params: {
- field: 'timestamp',
- timeRange: { from: 'now-1h', to: 'now' },
- useNormalizedEsInterval: true,
- interval: 'auto',
- drop_partials: false,
- min_doc_count: 1,
- extended_bounds: {},
- },
- },
- {
- id: '4',
- enabled: true,
- type: 'count',
- schema: 'radius',
- params: {},
- },
- ],
- }),
- uiStateJSON: '{"vis":{"legendOpen":false}}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Overview-GDPR-Agents',
- _source: {
- title: 'GDPR Agents',
- visState: JSON.stringify({
- title: 'GDPR Agents',
- type: 'pie',
- params: {
- type: 'pie',
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- isDonut: false,
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: {
- field: 'agent.name',
- size: 10,
- order: 'desc',
- orderBy: '1',
- },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Overview-GDPR-Requirements-by-agent',
- _source: {
- title: 'GDPR Requirements by agent',
- visState: JSON.stringify({
- title: 'GDPR Requirements by agent',
- type: 'histogram',
- params: {
- type: 'histogram',
- grid: { categoryLines: false, style: { color: '#eee' } },
- categoryAxes: [
- {
- id: 'CategoryAxis-1',
- type: 'category',
- position: 'bottom',
- show: true,
- style: {},
- scale: { type: 'linear' },
- labels: { show: true, filter: true, truncate: 100, rotate: 0 },
- title: {},
- },
- ],
- valueAxes: [
- {
- id: 'ValueAxis-1',
- name: 'LeftAxis-1',
- type: 'value',
- position: 'left',
- show: true,
- style: {},
- scale: { type: 'linear', mode: 'normal' },
- labels: { show: true, rotate: 0, filter: false, truncate: 100 },
- title: { text: 'Count' },
- },
- ],
- seriesParams: [
- {
- show: 'true',
- type: 'histogram',
- mode: 'stacked',
- data: { label: 'Count', id: '1' },
- valueAxis: 'ValueAxis-1',
- drawLinesBetweenPoints: true,
- showCircles: true,
- },
- ],
- addTooltip: true,
- addLegend: true,
- legendPosition: 'right',
- times: [],
- addTimeMarker: false,
- radiusRatio: 51,
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'segment',
- params: {
- field: 'rule.gdpr',
- size: 5,
- order: 'desc',
- orderBy: '1',
- customLabel: 'GDPR Requirements',
- },
- },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'group',
- params: {
- field: 'agent.name',
- size: 5,
- order: 'desc',
- orderBy: '1',
- },
- },
- ],
- }),
- uiStateJSON: '{}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- _type: 'visualization',
- },
- {
- _id: 'Wazuh-App-Overview-GDPR-Last-alerts',
- _type: 'visualization',
- _source: {
- title: 'GDPR Last alerts',
- visState: JSON.stringify({
- title: 'GDPR Last alerts',
- type: 'table',
- params: {
- perPage: 10,
- showPartialRows: false,
- showMeticsAtAllLevels: false,
- sort: { columnIndex: null, direction: null },
- showTotal: false,
- showToolbar: true,
- totalFunc: 'sum',
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'agent.name',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 50,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Agent name',
- },
- },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'rule.gdpr',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 10,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Requirement',
- },
- },
- {
- id: '4',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'rule.description',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 10,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Rule description',
- },
- },
- ],
- }),
- uiStateJSON:
- '{"vis":{"params":{"sort":{"columnIndex":3,"direction":"desc"}}}}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- },
- {
- _id: 'Wazuh-App-Overview-GDPR-Alerts-summary',
- _type: 'visualization',
- _source: {
- title: 'Alerts summary',
- visState: JSON.stringify({
- title: 'Alerts summary',
- type: 'table',
- params: {
- perPage: 10,
- showPartialRows: false,
- showMeticsAtAllLevels: false,
- sort: { columnIndex: 3, direction: 'desc' },
- showTotal: false,
- showToolbar: true,
- totalFunc: 'sum',
- },
- aggs: [
- {
- id: '1',
- enabled: true,
- type: 'count',
- schema: 'metric',
- params: {},
- },
- {
- id: '2',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'agent.name',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 50,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Agent name',
- },
- },
- {
- id: '3',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'rule.gdpr',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 10,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Requirement',
- },
- },
- {
- id: '4',
- enabled: true,
- type: 'terms',
- schema: 'bucket',
- params: {
- field: 'rule.description',
- otherBucket: false,
- otherBucketLabel: 'Other',
- missingBucket: false,
- missingBucketLabel: 'Missing',
- size: 10,
- order: 'desc',
- orderBy: '1',
- customLabel: 'Rule description',
- },
- },
- ],
- }),
- uiStateJSON:
- '{"vis":{"params":{"sort":{"columnIndex":3,"direction":"desc"}}}}',
- description: '',
- version: 1,
- kibanaSavedObjectMeta: {
- searchSourceJSON: JSON.stringify({
- index: 'wazuh-alerts',
- filter: [],
- query: { query: '', language: 'lucene' },
- }),
- },
- },
- },
-];