6
6
import { EuiButton , EuiFlexGroup , EuiFlexItem , EuiSpacer , EuiTitle } from '@elastic/eui' ;
7
7
import {
8
8
DetectorHit ,
9
- GetRulesResponse ,
10
9
SearchDetectorsResponse ,
11
10
UpdateDetectorResponse ,
12
11
} from '../../../../../server/models/interfaces' ;
13
- import React , { useCallback , useContext , useEffect , useState } from 'react' ;
12
+ import React , { useCallback , useContext , useEffect , useState , useMemo } from 'react' ;
14
13
import { RouteComponentProps } from 'react-router-dom' ;
15
14
import { RuleItem } from '../../../CreateDetector/components/DefineDetector/components/DetectionRules/types/interfaces' ;
16
15
import { Detector } from '../../../../../models/interfaces' ;
@@ -22,6 +21,7 @@ import { NotificationsStart } from 'opensearch-dashboards/public';
22
21
import { errorNotificationToast , successNotificationToast } from '../../../../utils/helpers' ;
23
22
import { RuleTableItem } from '../../../Rules/utils/helpers' ;
24
23
import { RuleViewerFlyout } from '../../../Rules/components/RuleViewerFlyout/RuleViewerFlyout' ;
24
+ import { RulesViewModelActor } from '../../../Rules/models/RulesViewModelActor' ;
25
25
26
26
export interface UpdateDetectorRulesProps
27
27
extends RouteComponentProps <
@@ -42,6 +42,11 @@ export const UpdateDetectorRules: React.FC<UpdateDetectorRulesProps> = (props) =
42
42
const detectorId = props . location . pathname . replace ( `${ ROUTES . EDIT_DETECTOR_RULES } /` , '' ) ;
43
43
const [ flyoutData , setFlyoutData ] = useState < RuleTableItem | null > ( null ) ;
44
44
45
+ const rulesViewModelActor = useMemo (
46
+ ( ) => ( services ? new RulesViewModelActor ( services . ruleService ) : null ) ,
47
+ [ services ]
48
+ ) ;
49
+
45
50
useEffect ( ( ) => {
46
51
const getDetector = async ( ) => {
47
52
setLoading ( true ) ;
@@ -62,83 +67,41 @@ export const UpdateDetectorRules: React.FC<UpdateDetectorRulesProps> = (props) =
62
67
} ;
63
68
64
69
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
+ ) ;
103
73
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 ( ) } ` } } ] ,
116
77
} ,
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 || [ ] ) ;
142
105
} ;
143
106
144
107
const execute = async ( ) => {
0 commit comments