Skip to content

Commit 60af9ab

Browse files
committed
migrate update detector rules to RulesViewModelActor
Signed-off-by: Aleksandar Djindjic <[email protected]>
1 parent b7f899c commit 60af9ab

File tree

2 files changed

+41
-78
lines changed

2 files changed

+41
-78
lines changed

public/pages/Detectors/components/DetectorRulesView/DetectorRulesView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export const DetectorRulesView: React.FC<DetectorRulesViewProps> = (props) => {
6161
const services = useContext(ServicesContext);
6262

6363
const rulesViewModelActor = useMemo(
64-
() => (services ? new RulesViewModelActor(services?.ruleService) : null),
64+
() => (services ? new RulesViewModelActor(services.ruleService) : null),
6565
[services]
6666
);
6767

public/pages/Detectors/components/UpdateRules/UpdateRules.tsx

Lines changed: 40 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui';
77
import {
88
DetectorHit,
9-
GetRulesResponse,
109
SearchDetectorsResponse,
1110
UpdateDetectorResponse,
1211
} from '../../../../../server/models/interfaces';
13-
import React, { useCallback, useContext, useEffect, useState } from 'react';
12+
import React, { useCallback, useContext, useEffect, useState, useMemo } from 'react';
1413
import { RouteComponentProps } from 'react-router-dom';
1514
import { RuleItem } from '../../../CreateDetector/components/DefineDetector/components/DetectionRules/types/interfaces';
1615
import { Detector } from '../../../../../models/interfaces';
@@ -22,6 +21,7 @@ import { NotificationsStart } from 'opensearch-dashboards/public';
2221
import { errorNotificationToast, successNotificationToast } from '../../../../utils/helpers';
2322
import { RuleTableItem } from '../../../Rules/utils/helpers';
2423
import { RuleViewerFlyout } from '../../../Rules/components/RuleViewerFlyout/RuleViewerFlyout';
24+
import { RulesViewModelActor } from '../../../Rules/models/RulesViewModelActor';
2525

2626
export interface UpdateDetectorRulesProps
2727
extends RouteComponentProps<
@@ -42,6 +42,11 @@ export const UpdateDetectorRules: React.FC<UpdateDetectorRulesProps> = (props) =
4242
const detectorId = props.location.pathname.replace(`${ROUTES.EDIT_DETECTOR_RULES}/`, '');
4343
const [flyoutData, setFlyoutData] = useState<RuleTableItem | null>(null);
4444

45+
const rulesViewModelActor = useMemo(
46+
() => (services ? new RulesViewModelActor(services.ruleService) : null),
47+
[services]
48+
);
49+
4550
useEffect(() => {
4651
const getDetector = async () => {
4752
setLoading(true);
@@ -62,83 +67,41 @@ export const UpdateDetectorRules: React.FC<UpdateDetectorRulesProps> = (props) =
6267
};
6368

6469
const getRules = async (detector: Detector) => {
65-
const prePackagedResponse = (await services?.ruleService.getRules(true, {
66-
from: 0,
67-
size: 5000,
68-
query: {
69-
nested: {
70-
path: 'rule',
71-
query: {
72-
bool: {
73-
must: [{ match: { 'rule.category': `${detector.detector_type.toLowerCase()}` } }],
74-
},
75-
},
76-
},
77-
},
78-
})) as ServerResponse<GetRulesResponse>;
79-
if (prePackagedResponse.ok) {
80-
const ruleInfos = prePackagedResponse.response.hits.hits;
81-
const enabledRuleIds = detector.inputs[0].detector_input.pre_packaged_rules.map(
82-
(rule) => rule.id
83-
);
84-
const ruleItems = ruleInfos.map((rule) => ({
85-
name: rule._source.title,
86-
id: rule._id,
87-
severity: rule._source.level,
88-
logType: rule._source.category,
89-
library: 'Sigma',
90-
description: rule._source.description,
91-
active: enabledRuleIds.includes(rule._id),
92-
ruleInfo: rule,
93-
}));
94-
setPrePackagedRuleItems(ruleItems);
95-
} else {
96-
errorNotificationToast(
97-
props.notifications,
98-
'retrieve',
99-
'pre-packaged rules',
100-
prePackagedResponse.error
101-
);
102-
}
70+
const enabledRuleIds = detector.inputs[0].detector_input.pre_packaged_rules.map(
71+
(rule) => rule.id
72+
);
10373

104-
const customResponse = (await services?.ruleService.getRules(false, {
105-
from: 0,
106-
size: 5000,
107-
query: {
108-
nested: {
109-
path: 'rule',
110-
query: {
111-
bool: {
112-
must: [{ match: { 'rule.category': `${detector.detector_type.toLowerCase()}` } }],
113-
},
114-
},
115-
},
74+
const allRules = await rulesViewModelActor?.fetchRules(undefined, {
75+
bool: {
76+
must: [{ match: { 'rule.category': `${detector.detector_type.toLowerCase()}` } }],
11677
},
117-
})) as ServerResponse<GetRulesResponse>;
118-
if (customResponse.ok) {
119-
const ruleInfos = customResponse.response.hits.hits;
120-
const enabledRuleIds = detector.inputs[0].detector_input.custom_rules.map(
121-
(rule) => rule.id
122-
);
123-
const ruleItems = ruleInfos.map((rule) => ({
124-
name: rule._source.title,
125-
id: rule._id,
126-
severity: rule._source.level,
127-
logType: rule._source.category,
128-
library: 'Custom',
129-
description: rule._source.description,
130-
active: enabledRuleIds.includes(rule._id),
131-
ruleInfo: rule,
132-
}));
133-
setCustomRuleItems(ruleItems);
134-
} else {
135-
errorNotificationToast(
136-
props.notifications,
137-
'retrieve',
138-
'custom rules',
139-
customResponse.error
140-
);
141-
}
78+
});
79+
80+
const prePackagedRules = allRules?.filter((rule) => rule.prePackaged);
81+
const prePackagedRuleItems = prePackagedRules?.map((rule) => ({
82+
name: rule._source.title,
83+
id: rule._id,
84+
severity: rule._source.level,
85+
logType: rule._source.category,
86+
library: 'Sigma',
87+
description: rule._source.description,
88+
active: enabledRuleIds.includes(rule._id),
89+
ruleInfo: rule,
90+
}));
91+
setPrePackagedRuleItems(prePackagedRuleItems || []);
92+
93+
const customRules = allRules?.filter((rule) => !rule.prePackaged);
94+
const customRuleItems = customRules?.map((rule) => ({
95+
name: rule._source.title,
96+
id: rule._id,
97+
severity: rule._source.level,
98+
logType: rule._source.category,
99+
library: 'Custom',
100+
description: rule._source.description,
101+
active: enabledRuleIds.includes(rule._id),
102+
ruleInfo: rule,
103+
}));
104+
setCustomRuleItems(customRuleItems || []);
142105
};
143106

144107
const execute = async () => {

0 commit comments

Comments
 (0)