mkdocs site
Taylor committed
Jul 11, 2023 at 16:00 UTC
34cef750eb4bd61a3d9b5a9d7d59da8d6939fe7f
15 files changed
+17258
-4650
backend/site/404.html
+47
-20
@@ -189,8 +189,8 @@
189
190
191
<li class="md-tabs__item">
192
- <a href="/alerts/" class="md-tabs__link">
193
- Alerts
192
+ <a href="/wazuhindexer/" class="md-tabs__link">
193
+ Wazuh-Indexer
194
</a>
195
</li>
196
@@ -201,8 +201,8 @@
201
202
203
<li class="md-tabs__item">
204
- <a href="/artifacts/" class="md-tabs__link">
205
- Artifacts
204
+ <a href="/dfiriris/" class="md-tabs__link">
205
+ Dfir-Iris
206
</a>
207
</li>
208
@@ -213,8 +213,8 @@
213
214
215
<li class="md-tabs__item">
216
- <a href="/cases/" class="md-tabs__link">
217
- Cases
216
+ <a href="/graylog/" class="md-tabs__link">
217
+ Graylog
218
</a>
219
</li>
220
@@ -225,8 +225,8 @@
225
226
227
<li class="md-tabs__item">
228
- <a href="/graylog/" class="md-tabs__link">
229
- Graylog
228
+ <a href="/wazuhmanager/" class="md-tabs__link">
229
+ Wazuh-Manager
230
</a>
231
</li>
232
@@ -237,8 +237,20 @@
237
238
239
<li class="md-tabs__item">
240
- <a href="/wazuhmanager/" class="md-tabs__link">
241
- Wazuh-Manager
240
+ <a href="/velociraptor/" class="md-tabs__link">
241
+ Velociraptor
242
+ </a>
243
+ </li>
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+ <li class="md-tabs__item">
252
+ <a href="/shuffle/" class="md-tabs__link">
253
+ Shuffle
254
</a>
255
</li>
256
@@ -330,8 +342,8 @@
342
343
344
<li class="md-nav__item">
333
- <a href="/alerts/" class="md-nav__link">
334
- Alerts
345
+ <a href="/wazuhindexer/" class="md-nav__link">
346
+ Wazuh-Indexer
347
</a>
348
</li>
349
@@ -345,8 +357,8 @@
357
358
359
<li class="md-nav__item">
348
- <a href="/artifacts/" class="md-nav__link">
349
- Artifacts
360
+ <a href="/dfiriris/" class="md-nav__link">
361
+ Dfir-Iris
362
</a>
363
</li>
364
@@ -360,8 +372,8 @@
372
373
374
<li class="md-nav__item">
363
- <a href="/cases/" class="md-nav__link">
364
- Cases
375
+ <a href="/graylog/" class="md-nav__link">
376
+ Graylog
377
</a>
378
</li>
379
@@ -375,8 +387,8 @@
387
388
389
<li class="md-nav__item">
378
- <a href="/graylog/" class="md-nav__link">
379
- Graylog
390
+ <a href="/wazuhmanager/" class="md-nav__link">
391
+ Wazuh-Manager
392
</a>
393
</li>
394
@@ -390,8 +402,23 @@
402
403
404
<li class="md-nav__item">
393
- <a href="/wazuhmanager/" class="md-nav__link">
394
- Wazuh-Manager
405
+ <a href="/velociraptor/" class="md-nav__link">
406
+ Velociraptor
407
+ </a>
408
+ </li>
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+ <li class="md-nav__item">
420
+ <a href="/shuffle/" class="md-nav__link">
421
+ Shuffle
422
</a>
423
</li>
424
backend/site/agents/index.html
+48
-21
@@ -12,7 +12,7 @@
12
<link rel="prev" href="../connectors/">
13
14
15
- <link rel="next" href="../alerts/">
15
+ <link rel="next" href="../wazuhindexer/">
16
17
<link rel="icon" href="../assets/images/favicon.png">
18
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
@@ -200,8 +200,8 @@
200
201
202
<li class="md-tabs__item">
203
- <a href="../alerts/" class="md-tabs__link">
204
- Alerts
203
+ <a href="../wazuhindexer/" class="md-tabs__link">
204
+ Wazuh-Indexer
205
</a>
206
</li>
207
@@ -212,8 +212,8 @@
212
213
214
<li class="md-tabs__item">
215
- <a href="../artifacts/" class="md-tabs__link">
216
- Artifacts
215
+ <a href="../dfiriris/" class="md-tabs__link">
216
+ Dfir-Iris
217
</a>
218
</li>
219
@@ -224,8 +224,8 @@
224
225
226
<li class="md-tabs__item">
227
- <a href="../cases/" class="md-tabs__link">
228
- Cases
227
+ <a href="../graylog/" class="md-tabs__link">
228
+ Graylog
229
</a>
230
</li>
231
@@ -236,8 +236,8 @@
236
237
238
<li class="md-tabs__item">
239
- <a href="../graylog/" class="md-tabs__link">
240
- Graylog
239
+ <a href="../wazuhmanager/" class="md-tabs__link">
240
+ Wazuh-Manager
241
</a>
242
</li>
243
@@ -248,8 +248,20 @@
248
249
250
<li class="md-tabs__item">
251
- <a href="../wazuhmanager/" class="md-tabs__link">
252
- Wazuh-Manager
251
+ <a href="../velociraptor/" class="md-tabs__link">
252
+ Velociraptor
253
+ </a>
254
+ </li>
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <li class="md-tabs__item">
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
</a>
266
</li>
267
@@ -631,8 +643,8 @@
643
644
645
<li class="md-nav__item">
634
- <a href="../alerts/" class="md-nav__link">
635
- Alerts
646
+ <a href="../wazuhindexer/" class="md-nav__link">
647
+ Wazuh-Indexer
648
</a>
649
</li>
650
@@ -646,8 +658,8 @@
658
659
660
<li class="md-nav__item">
649
- <a href="../artifacts/" class="md-nav__link">
650
- Artifacts
661
+ <a href="../dfiriris/" class="md-nav__link">
662
+ Dfir-Iris
663
</a>
664
</li>
665
@@ -661,8 +673,8 @@
673
674
675
<li class="md-nav__item">
664
- <a href="../cases/" class="md-nav__link">
665
- Cases
676
+ <a href="../graylog/" class="md-nav__link">
677
+ Graylog
678
</a>
679
</li>
680
@@ -676,8 +688,8 @@
688
689
690
<li class="md-nav__item">
679
- <a href="../graylog/" class="md-nav__link">
680
- Graylog
691
+ <a href="../wazuhmanager/" class="md-nav__link">
692
+ Wazuh-Manager
693
</a>
694
</li>
695
@@ -691,8 +703,23 @@
703
704
705
<li class="md-nav__item">
694
- <a href="../wazuhmanager/" class="md-nav__link">
695
- Wazuh-Manager
706
+ <a href="../velociraptor/" class="md-nav__link">
707
+ Velociraptor
708
+ </a>
709
+ </li>
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+ <li class="md-nav__item">
721
+ <a href="../shuffle/" class="md-nav__link">
722
+ Shuffle
723
</a>
724
</li>
725
backend/site/alerts/index.html
deleted
-1398
@@ -1,1398 +0,0 @@
1
-
2
-<!doctype html>
3
-<html lang="en" class="no-js">
4
- <head>
5
-
6
- <meta charset="utf-8">
7
- <meta name="viewport" content="width=device-width,initial-scale=1">
8
-
9
-
10
-
11
-
12
- <link rel="prev" href="../agents/">
13
-
14
-
15
- <link rel="next" href="../artifacts/">
16
-
17
- <link rel="icon" href="../assets/images/favicon.png">
18
- <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
-
20
-
21
-
22
- <title>Alerts - SOCFortress CoPilot</title>
23
-
24
-
25
-
26
- <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27
-
28
-
29
- <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41
- <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42
-
43
-
44
-
45
- <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46
-
47
- <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48
-
49
-
50
-
51
-
52
-
53
-
54
- </head>
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
- <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65
-
66
-
67
-
68
- <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69
-
70
- <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71
- <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72
- <label class="md-overlay" for="__drawer"></label>
73
- <div data-md-component="skip">
74
-
75
-
76
- <a href="#alerts-overview" class="md-skip">
77
- Skip to content
78
- </a>
79
-
80
- </div>
81
- <div data-md-component="announce">
82
-
83
- </div>
84
-
85
-
86
-
87
-
88
-<header class="md-header" data-md-component="header">
89
- <nav class="md-header__inner md-grid" aria-label="Header">
90
- <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91
-
92
-
93
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94
-
95
- </a>
96
- <label class="md-header__button md-icon" for="__drawer">
97
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98
- </label>
99
- <div class="md-header__title" data-md-component="header-title">
100
- <div class="md-header__ellipsis">
101
- <div class="md-header__topic">
102
- <span class="md-ellipsis">
103
- SOCFortress CoPilot
104
- </span>
105
- </div>
106
- <div class="md-header__topic" data-md-component="header-topic">
107
- <span class="md-ellipsis">
108
-
109
- Alerts
110
-
111
- </span>
112
- </div>
113
- </div>
114
- </div>
115
-
116
-
117
- <form class="md-header__option" data-md-component="palette">
118
-
119
-
120
-
121
-
122
- <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123
-
124
- <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126
- </label>
127
-
128
-
129
-
130
-
131
-
132
- <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133
-
134
- <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136
- </label>
137
-
138
-
139
- </form>
140
-
141
-
142
-
143
-
144
-
145
- </nav>
146
-
147
-</header>
148
-
149
- <div class="md-container" data-md-component="container">
150
-
151
-
152
-
153
-
154
-
155
-<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156
- <div class="md-grid">
157
- <ul class="md-tabs__list">
158
-
159
-
160
-
161
-
162
-
163
-
164
- <li class="md-tabs__item">
165
- <a href=".." class="md-tabs__link">
166
- Home
167
- </a>
168
- </li>
169
-
170
-
171
-
172
-
173
-
174
-
175
-
176
- <li class="md-tabs__item">
177
- <a href="../connectors/" class="md-tabs__link">
178
- Connectors
179
- </a>
180
- </li>
181
-
182
-
183
-
184
-
185
-
186
-
187
-
188
- <li class="md-tabs__item">
189
- <a href="../agents/" class="md-tabs__link">
190
- Agents
191
- </a>
192
- </li>
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
- <li class="md-tabs__item">
203
- <a href="./" class="md-tabs__link md-tabs__link--active">
204
- Alerts
205
- </a>
206
- </li>
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
- <li class="md-tabs__item">
215
- <a href="../artifacts/" class="md-tabs__link">
216
- Artifacts
217
- </a>
218
- </li>
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
- <li class="md-tabs__item">
227
- <a href="../cases/" class="md-tabs__link">
228
- Cases
229
- </a>
230
- </li>
231
-
232
-
233
-
234
-
235
-
236
-
237
-
238
- <li class="md-tabs__item">
239
- <a href="../graylog/" class="md-tabs__link">
240
- Graylog
241
- </a>
242
- </li>
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
- <li class="md-tabs__item">
251
- <a href="../wazuhmanager/" class="md-tabs__link">
252
- Wazuh-Manager
253
- </a>
254
- </li>
255
-
256
-
257
- </ul>
258
- </div>
259
-</nav>
260
-
261
-
262
-
263
- <main class="md-main" data-md-component="main">
264
- <div class="md-main__inner md-grid">
265
-
266
-
267
-
268
- <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
269
- <div class="md-sidebar__scrollwrap">
270
- <div class="md-sidebar__inner">
271
-
272
-
273
-
274
-
275
-
276
-
277
-
278
-<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
279
- <label class="md-nav__title" for="__drawer">
280
- <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
281
-
282
-
283
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
284
-
285
- </a>
286
- SOCFortress CoPilot
287
- </label>
288
-
289
- <ul class="md-nav__list" data-md-scrollfix>
290
-
291
-
292
-
293
-
294
-
295
-
296
-
297
-
298
- <li class="md-nav__item">
299
- <a href=".." class="md-nav__link">
300
- Home
301
- </a>
302
- </li>
303
-
304
-
305
-
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
- <li class="md-nav__item">
314
- <a href="../connectors/" class="md-nav__link">
315
- Connectors
316
- </a>
317
- </li>
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
- <li class="md-nav__item">
329
- <a href="../agents/" class="md-nav__link">
330
- Agents
331
- </a>
332
- </li>
333
-
334
-
335
-
336
-
337
-
338
-
339
-
340
-
341
-
342
-
343
-
344
-
345
- <li class="md-nav__item md-nav__item--active">
346
-
347
- <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
348
-
349
-
350
-
351
- <label class="md-nav__link md-nav__link--active" for="__toc">
352
- Alerts
353
- <span class="md-nav__icon md-icon"></span>
354
- </label>
355
-
356
- <a href="./" class="md-nav__link md-nav__link--active">
357
- Alerts
358
- </a>
359
-
360
-
361
-
362
-<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
363
-
364
-
365
-
366
-
367
- <label class="md-nav__title" for="__toc">
368
- <span class="md-nav__icon md-icon"></span>
369
- Table of contents
370
- </label>
371
- <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
372
-
373
- <li class="md-nav__item">
374
- <a href="#alerts-overview" class="md-nav__link">
375
- Alerts Overview
376
- </a>
377
-
378
- <nav class="md-nav" aria-label="Alerts Overview">
379
- <ul class="md-nav__list">
380
-
381
- <li class="md-nav__item">
382
- <a href="#alert-routes" class="md-nav__link">
383
- Alert Routes
384
- </a>
385
-
386
-</li>
387
-
388
- </ul>
389
- </nav>
390
-
391
-</li>
392
-
393
- <li class="md-nav__item">
394
- <a href="#app.routes.alerts" class="md-nav__link">
395
- app.routes.alerts
396
- </a>
397
-
398
-</li>
399
-
400
- <li class="md-nav__item">
401
- <a href="#app.routes.alerts.get_alerts" class="md-nav__link">
402
- get_alerts()
403
- </a>
404
-
405
- <nav class="md-nav" aria-label="get_alerts()">
406
- <ul class="md-nav__list">
407
-
408
- <li class="md-nav__item">
409
- <a href="#alert-services" class="md-nav__link">
410
- Alert Services
411
- </a>
412
-
413
-</li>
414
-
415
- </ul>
416
- </nav>
417
-
418
-</li>
419
-
420
- <li class="md-nav__item">
421
- <a href="#app.services.WazuhIndexer.alerts" class="md-nav__link">
422
- app.services.WazuhIndexer.alerts
423
- </a>
424
-
425
-</li>
426
-
427
- <li class="md-nav__item">
428
- <a href="#app.services.WazuhIndexer.alerts.AlertsService" class="md-nav__link">
429
- AlertsService
430
- </a>
431
-
432
- <nav class="md-nav" aria-label="AlertsService">
433
- <ul class="md-nav__list">
434
-
435
- <li class="md-nav__item">
436
- <a href="#app.services.WazuhIndexer.alerts.AlertsService.__init__" class="md-nav__link">
437
- __init__()
438
- </a>
439
-
440
-</li>
441
-
442
- <li class="md-nav__item">
443
- <a href="#app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="md-nav__link">
444
- collect_alerts()
445
- </a>
446
-
447
-</li>
448
-
449
- <li class="md-nav__item">
450
- <a href="#app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="md-nav__link">
451
- is_index_skipped()
452
- </a>
453
-
454
-</li>
455
-
456
- </ul>
457
- </nav>
458
-
459
-</li>
460
-
461
- </ul>
462
-
463
-</nav>
464
-
465
- </li>
466
-
467
-
468
-
469
-
470
-
471
-
472
-
473
-
474
-
475
-
476
- <li class="md-nav__item">
477
- <a href="../artifacts/" class="md-nav__link">
478
- Artifacts
479
- </a>
480
- </li>
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
- <li class="md-nav__item">
492
- <a href="../cases/" class="md-nav__link">
493
- Cases
494
- </a>
495
- </li>
496
-
497
-
498
-
499
-
500
-
501
-
502
-
503
-
504
-
505
-
506
- <li class="md-nav__item">
507
- <a href="../graylog/" class="md-nav__link">
508
- Graylog
509
- </a>
510
- </li>
511
-
512
-
513
-
514
-
515
-
516
-
517
-
518
-
519
-
520
-
521
- <li class="md-nav__item">
522
- <a href="../wazuhmanager/" class="md-nav__link">
523
- Wazuh-Manager
524
- </a>
525
- </li>
526
-
527
-
528
-
529
- </ul>
530
-</nav>
531
- </div>
532
- </div>
533
- </div>
534
-
535
-
536
-
537
-
538
- <div class="md-content" data-md-component="content">
539
- <article class="md-content__inner md-typeset">
540
-
541
-
542
-
543
-
544
- <h1>Alerts</h1>
545
-
546
-<h2 id="alerts-overview">Alerts Overview</h2>
547
-<h3 id="alert-routes"><span style="color:green">Alert Routes</span></h3>
548
-
549
-
550
-<div class="doc doc-object doc-module">
551
-
552
-
553
-<a id="app.routes.alerts"></a>
554
- <div class="doc doc-contents first">
555
-
556
-
557
-
558
- <div class="doc doc-children">
559
-
560
-
561
-
562
-
563
-
564
-
565
-
566
-
567
-
568
-<div class="doc doc-object doc-function">
569
-
570
-
571
-
572
-<h2 id="app.routes.alerts.get_alerts" class="doc doc-heading">
573
-<code class="highlight language-python"><span class="n">get_alerts</span><span class="p">()</span></code>
574
-
575
-</h2>
576
-
577
-
578
- <div class="doc doc-contents ">
579
-
580
- <p>Retrieves all alerts from the AlertsService.</p>
581
-<p>This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of
582
-the AlertsService class and calling its <code>collect_alerts</code> method. The result is a list of all alerts currently
583
-available.</p>
584
-
585
- <p><strong>Returns:</strong></p>
586
- <table>
587
- <thead>
588
- <tr>
589
-<th>Name</th> <th>Type</th>
590
- <th>Description</th>
591
- </tr>
592
- </thead>
593
- <tbody>
594
- <tr>
595
-<td><code>jsonify</code></td> <td>
596
- <code><span title="flask.jsonify">jsonify</span></code>
597
- </td>
598
- <td>
599
- <div class="doc-md-description">
600
- <p>A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</p>
601
- </div>
602
- </td>
603
- </tr>
604
- <tr>
605
-<td></td> <td>
606
- <code><span title="flask.jsonify">jsonify</span></code>
607
- </td>
608
- <td>
609
- <div class="doc-md-description">
610
- <p>containing all its associated data.</p>
611
- </div>
612
- </td>
613
- </tr>
614
- </tbody>
615
- </table>
616
-
617
- <details class="quote">
618
- <summary>Source code in <code>app\routes\alerts.py</code></summary>
619
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
620
-<span class="normal"><a href="#__codelineno-0-10">10</a></span>
621
-<span class="normal"><a href="#__codelineno-0-11">11</a></span>
622
-<span class="normal"><a href="#__codelineno-0-12">12</a></span>
623
-<span class="normal"><a href="#__codelineno-0-13">13</a></span>
624
-<span class="normal"><a href="#__codelineno-0-14">14</a></span>
625
-<span class="normal"><a href="#__codelineno-0-15">15</a></span>
626
-<span class="normal"><a href="#__codelineno-0-16">16</a></span>
627
-<span class="normal"><a href="#__codelineno-0-17">17</a></span>
628
-<span class="normal"><a href="#__codelineno-0-18">18</a></span>
629
-<span class="normal"><a href="#__codelineno-0-19">19</a></span>
630
-<span class="normal"><a href="#__codelineno-0-20">20</a></span>
631
-<span class="normal"><a href="#__codelineno-0-21">21</a></span>
632
-<span class="normal"><a href="#__codelineno-0-22">22</a></span>
633
-<span class="normal"><a href="#__codelineno-0-23">23</a></span>
634
-<span class="normal"><a href="#__codelineno-0-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/alerts"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
635
-<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">()</span> <span class="o">-></span> <span class="n">jsonify</span><span class="p">:</span>
636
-<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
637
-<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Retrieves all alerts from the AlertsService.</span>
638
-<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
639
-<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of</span>
640
-<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> the AlertsService class and calling its `collect_alerts` method. The result is a list of all alerts currently</span>
641
-<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> available.</span>
642
-<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
643
-<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Returns:</span>
644
-<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> jsonify: A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</span>
645
-<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> containing all its associated data.</span>
646
-<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> """</span>
647
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
648
-<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_alerts</span><span class="p">()</span>
649
-<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">alerts</span><span class="p">)</span>
650
-</code></pre></div></td></tr></table></div>
651
- </details>
652
- </div>
653
-
654
-</div>
655
-
656
-
657
-
658
- </div>
659
-
660
- </div>
661
-
662
-</div><p><br></p>
663
-<h3 id="alert-services"><span style="color:red">Alert Services</span></h3>
664
-
665
-
666
-<div class="doc doc-object doc-module">
667
-
668
-
669
-<a id="app.services.WazuhIndexer.alerts"></a>
670
- <div class="doc doc-contents first">
671
-
672
-
673
-
674
- <div class="doc doc-children">
675
-
676
-
677
-
678
-
679
-
680
-
681
-
682
-
683
-<div class="doc doc-object doc-class">
684
-
685
-
686
-
687
-<h2 id="app.services.WazuhIndexer.alerts.AlertsService" class="doc doc-heading">
688
- <code>AlertsService</code>
689
-
690
-
691
-</h2>
692
-
693
-
694
- <div class="doc doc-contents ">
695
-
696
-
697
- <p>A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</p>
698
-
699
- <p><strong>Attributes:</strong></p>
700
- <table>
701
- <thead>
702
- <tr>
703
- <th>Name</th>
704
- <th>Type</th>
705
- <th>Description</th>
706
- </tr>
707
- </thead>
708
- <tbody>
709
- <tr>
710
- <td><code>connector_url</code></td>
711
- <td>
712
- <code>str</code>
713
- </td>
714
- <td>
715
- <div class="doc-md-description">
716
- <p>The url to the Wazuh-Indexer.</p>
717
- </div>
718
- </td>
719
- </tr>
720
- <tr>
721
- <td><code>connector_username</code></td>
722
- <td>
723
- <code>str</code>
724
- </td>
725
- <td>
726
- <div class="doc-md-description">
727
- <p>The username for the Wazuh-Indexer.</p>
728
- </div>
729
- </td>
730
- </tr>
731
- <tr>
732
- <td><code>connector_password</code></td>
733
- <td>
734
- <code>str</code>
735
- </td>
736
- <td>
737
- <div class="doc-md-description">
738
- <p>The password for the Wazuh-Indexer.</p>
739
- </div>
740
- </td>
741
- </tr>
742
- <tr>
743
- <td><code>es</code></td>
744
- <td>
745
- <code><span title="elasticsearch7.Elasticsearch">Elasticsearch</span></code>
746
- </td>
747
- <td>
748
- <div class="doc-md-description">
749
- <p>The Elasticsearch client.</p>
750
- </div>
751
- </td>
752
- </tr>
753
- </tbody>
754
- </table>
755
-
756
-
757
- <details class="quote">
758
- <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
759
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
760
-<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
761
-<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
762
-<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
763
-<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
764
-<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
765
-<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
766
-<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
767
-<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
768
-<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
769
-<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
770
-<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
771
-<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
772
-<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
773
-<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
774
-<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
775
-<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
776
-<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
777
-<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
778
-<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
779
-<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
780
-<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
781
-<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
782
-<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
783
-<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
784
-<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
785
-<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
786
-<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
787
-<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
788
-<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
789
-<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
790
-<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
791
-<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
792
-<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
793
-<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
794
-<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
795
-<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
796
-<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
797
-<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
798
-<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
799
-<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
800
-<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
801
-<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
802
-<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
803
-<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
804
-<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
805
-<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
806
-<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
807
-<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
808
-<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
809
-<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
810
-<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
811
-<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
812
-<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
813
-<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
814
-<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
815
-<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
816
-<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
817
-<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
818
-<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
819
-<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
820
-<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
821
-<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
822
-<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
823
-<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
824
-<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
825
-<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
826
-<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
827
-<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
828
-<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
829
-<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
830
-<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
831
-<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
832
-<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
833
-<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
834
-<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
835
-<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
836
-<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
837
-<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
838
-<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
839
-<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
840
-<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
841
-<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
842
-<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
843
-<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
844
-<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
845
-<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
846
-<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
847
-<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
848
-<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
849
-<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
850
-<span class="normal"><a href="#__codelineno-0-100">100</a></span>
851
-<span class="normal"><a href="#__codelineno-0-101">101</a></span>
852
-<span class="normal"><a href="#__codelineno-0-102">102</a></span>
853
-<span class="normal"><a href="#__codelineno-0-103">103</a></span>
854
-<span class="normal"><a href="#__codelineno-0-104">104</a></span>
855
-<span class="normal"><a href="#__codelineno-0-105">105</a></span>
856
-<span class="normal"><a href="#__codelineno-0-106">106</a></span>
857
-<span class="normal"><a href="#__codelineno-0-107">107</a></span>
858
-<span class="normal"><a href="#__codelineno-0-108">108</a></span>
859
-<span class="normal"><a href="#__codelineno-0-109">109</a></span>
860
-<span class="normal"><a href="#__codelineno-0-110">110</a></span>
861
-<span class="normal"><a href="#__codelineno-0-111">111</a></span>
862
-<span class="normal"><a href="#__codelineno-0-112">112</a></span>
863
-<span class="normal"><a href="#__codelineno-0-113">113</a></span>
864
-<span class="normal"><a href="#__codelineno-0-114">114</a></span>
865
-<span class="normal"><a href="#__codelineno-0-115">115</a></span>
866
-<span class="normal"><a href="#__codelineno-0-116">116</a></span>
867
-<span class="normal"><a href="#__codelineno-0-117">117</a></span>
868
-<span class="normal"><a href="#__codelineno-0-118">118</a></span>
869
-<span class="normal"><a href="#__codelineno-0-119">119</a></span>
870
-<span class="normal"><a href="#__codelineno-0-120">120</a></span>
871
-<span class="normal"><a href="#__codelineno-0-121">121</a></span>
872
-<span class="normal"><a href="#__codelineno-0-122">122</a></span>
873
-<span class="normal"><a href="#__codelineno-0-123">123</a></span>
874
-<span class="normal"><a href="#__codelineno-0-124">124</a></span>
875
-<span class="normal"><a href="#__codelineno-0-125">125</a></span>
876
-<span class="normal"><a href="#__codelineno-0-126">126</a></span>
877
-<span class="normal"><a href="#__codelineno-0-127">127</a></span>
878
-<span class="normal"><a href="#__codelineno-0-128">128</a></span>
879
-<span class="normal"><a href="#__codelineno-0-129">129</a></span>
880
-<span class="normal"><a href="#__codelineno-0-130">130</a></span>
881
-<span class="normal"><a href="#__codelineno-0-131">131</a></span>
882
-<span class="normal"><a href="#__codelineno-0-132">132</a></span>
883
-<span class="normal"><a href="#__codelineno-0-133">133</a></span>
884
-<span class="normal"><a href="#__codelineno-0-134">134</a></span>
885
-<span class="normal"><a href="#__codelineno-0-135">135</a></span>
886
-<span class="normal"><a href="#__codelineno-0-136">136</a></span>
887
-<span class="normal"><a href="#__codelineno-0-137">137</a></span>
888
-<span class="normal"><a href="#__codelineno-0-138">138</a></span>
889
-<span class="normal"><a href="#__codelineno-0-139">139</a></span>
890
-<span class="normal"><a href="#__codelineno-0-140">140</a></span>
891
-<span class="normal"><a href="#__codelineno-0-141">141</a></span>
892
-<span class="normal"><a href="#__codelineno-0-142">142</a></span>
893
-<span class="normal"><a href="#__codelineno-0-143">143</a></span>
894
-<span class="normal"><a href="#__codelineno-0-144">144</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
895
-<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">"""</span>
896
-<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</span>
897
-<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
898
-<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
899
-<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The url to the Wazuh-Indexer.</span>
900
-<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_username (str): The username for the Wazuh-Indexer.</span>
901
-<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> connector_password (str): The password for the Wazuh-Indexer.</span>
902
-<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> es (Elasticsearch): The Elasticsearch client.</span>
903
-<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
904
-<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
905
-<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
906
-<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="s2">"wazuh-statistics"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
907
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="s2">"wazuh-monitoring"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
908
-<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="p">}</span>
909
-<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
910
-<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
911
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">"""</span>
912
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
913
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
914
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
915
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
916
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
917
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
918
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
919
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
920
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
921
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
922
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
923
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
924
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
925
-<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
926
-<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
927
-<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
928
-<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
929
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
930
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
931
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
932
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
933
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
934
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
935
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
936
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
937
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
938
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
939
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
940
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
941
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
942
-<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
943
-<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
944
-<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
945
-<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"</span>
946
-<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
947
-<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
948
-<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
949
-<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
950
-<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
951
-<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> """</span>
952
-<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
953
-<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
954
-<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
955
-<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
956
-<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
957
-<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
958
-<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
959
-<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
960
-<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
961
-<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
962
-<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
963
-<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
964
-<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
965
-<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"indices_list"</span><span class="p">]:</span>
966
-<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"wazuh_"</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
967
-<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
968
-<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
969
-<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
970
-<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">])</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
971
-<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
972
-<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
973
-<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">"index_name"</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
974
-<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"total_alerts"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">]),</span>
975
-<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"last_10_alerts"</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">],</span>
976
-<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
977
-<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
978
-<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
979
-<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
980
-<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected alerts"</span><span class="p">,</span>
981
-<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
982
-<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"alerts_summary"</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
983
-<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
984
-<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
985
-<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">def</span> <span class="nf">_collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
986
-<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">"""</span>
987
-<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or the</span>
988
-<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> `syslog_level` field is `ALERT` and return the results in descending order by the `timestamp_utc` field.</span>
989
-<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
990
-<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Args:</span>
991
-<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> index_name (str): The name of the index to query.</span>
992
-<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
993
-<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
994
-<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
995
-<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> """</span>
996
-<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting alerts from </span><span class="si">{</span><span class="n">index_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
997
-<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_query</span><span class="p">()</span>
998
-<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
999
-<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">query</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
1000
-<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">alerts_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">alert</span> <span class="k">for</span> <span class="n">alert</span> <span class="ow">in</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"hits"</span><span class="p">][</span><span class="s2">"hits"</span><span class="p">]]</span>
1001
-<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">{</span>
1002
-<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected alerts"</span><span class="p">,</span>
1003
-<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1004
-<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">"alerts"</span><span class="p">:</span> <span class="n">alerts_list</span><span class="p">,</span>
1005
-<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">}</span>
1006
-<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
1007
-<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect alerts: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
1008
-<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect alerts"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1009
-<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
1010
-<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="nd">@staticmethod</span>
1011
-<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">def</span> <span class="nf">_build_query</span><span class="p">()</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1012
-<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="w"> </span><span class="sd">"""</span>
1013
-<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> Builds the Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or</span>
1014
-<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> the `syslog_level` field is `ALERT`.</span>
1015
-<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
1016
-<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> Returns:</span>
1017
-<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Dict[str, object]: A dictionary representing the Elasticsearch query.</span>
1018
-<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> """</span>
1019
-<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="p">{</span>
1020
-<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">"query"</span><span class="p">:</span> <span class="p">{</span>
1021
-<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">"bool"</span><span class="p">:</span> <span class="p">{</span>
1022
-<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">"should"</span><span class="p">:</span> <span class="p">[</span>
1023
-<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">{</span><span class="s2">"range"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"rule_level"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"gte"</span><span class="p">:</span> <span class="mi">12</span><span class="p">}}},</span>
1024
-<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">{</span><span class="s2">"match"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"syslog_level"</span><span class="p">:</span> <span class="s2">"ALERT"</span><span class="p">}},</span>
1025
-<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">],</span>
1026
-<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">},</span>
1027
-<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="p">},</span>
1028
-<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">"sort"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"timestamp_utc"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="s2">"desc"</span><span class="p">}}],</span>
1029
-<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="p">}</span>
1030
-</code></pre></div></td></tr></table></div>
1031
- </details>
1032
-
1033
-
1034
-
1035
- <div class="doc doc-children">
1036
-
1037
-
1038
-
1039
-
1040
-
1041
-
1042
-
1043
-
1044
-
1045
-<div class="doc doc-object doc-function">
1046
-
1047
-
1048
-
1049
-<h3 id="app.services.WazuhIndexer.alerts.AlertsService.__init__" class="doc doc-heading">
1050
-<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
1051
-
1052
-</h3>
1053
-
1054
-
1055
- <div class="doc doc-contents ">
1056
-
1057
- <p>Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</p>
1058
-
1059
- <details class="quote">
1060
- <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1061
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1062
-<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1063
-<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1064
-<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1065
-<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1066
-<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1067
-<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1068
-<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1069
-<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1070
-<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1071
-<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1072
-<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1073
-<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1074
-<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1075
-<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1076
-<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1077
-<span class="normal"><a href="#__codelineno-0-41">41</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1078
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">"""</span>
1079
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1080
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
1081
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1082
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1083
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1084
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1085
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
1086
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
1087
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1088
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
1089
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1090
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1091
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1092
-<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1093
-<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1094
-</code></pre></div></td></tr></table></div>
1095
- </details>
1096
- </div>
1097
-
1098
-</div>
1099
-
1100
-<div class="doc doc-object doc-function">
1101
-
1102
-
1103
-
1104
-<h3 id="app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="doc doc-heading">
1105
-<code class="highlight language-python"><span class="n">collect_alerts</span><span class="p">()</span></code>
1106
-
1107
-</h3>
1108
-
1109
-
1110
- <div class="doc doc-contents ">
1111
-
1112
- <p>Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"
1113
-and is not in the SKIP_INDEX_NAMES list.
1114
-Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p>
1115
-
1116
- <p><strong>Returns:</strong></p>
1117
- <table>
1118
- <thead>
1119
- <tr>
1120
- <th>Type</th>
1121
- <th>Description</th>
1122
- </tr>
1123
- </thead>
1124
- <tbody>
1125
- <tr>
1126
- <td>
1127
- <code><span title="typing.Dict">Dict</span>[str, object]</code>
1128
- </td>
1129
- <td>
1130
- <div class="doc-md-description">
1131
- <p>Dict[str, object]: A dictionary containing success status and alerts or an error message.</p>
1132
- </div>
1133
- </td>
1134
- </tr>
1135
- </tbody>
1136
- </table>
1137
-
1138
- <details class="quote">
1139
- <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1140
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
1141
-<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1142
-<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1143
-<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1144
-<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1145
-<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1146
-<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1147
-<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1148
-<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1149
-<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1150
-<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1151
-<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1152
-<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1153
-<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1154
-<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1155
-<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1156
-<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1157
-<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1158
-<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1159
-<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1160
-<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1161
-<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1162
-<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1163
-<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1164
-<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1165
-<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1166
-<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1167
-<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1168
-<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1169
-<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1170
-<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1171
-<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1172
-<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1173
-<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1174
-<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1175
-<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1176
-<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1177
-<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1178
-<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1179
-<span class="normal"><a href="#__codelineno-0-97">97</a></span>
1180
-<span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1181
-<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
1182
-<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"</span>
1183
-<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1184
-<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1185
-<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1186
-<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1187
-<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1188
-<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> """</span>
1189
-<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1190
-<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
1191
-<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1192
-<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1193
-<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
1194
-<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1195
-<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1196
-<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1197
-<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
1198
-<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1199
-<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1200
-<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1201
-<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1202
-<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"indices_list"</span><span class="p">]:</span>
1203
-<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"wazuh_"</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
1204
-<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1205
-<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1206
-<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
1207
-<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">])</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
1208
-<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1209
-<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1210
-<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">"index_name"</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1211
-<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"total_alerts"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">]),</span>
1212
-<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"last_10_alerts"</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">],</span>
1213
-<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1214
-<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1215
-<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1216
-<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1217
-<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected alerts"</span><span class="p">,</span>
1218
-<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1219
-<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"alerts_summary"</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1220
-<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1221
-</code></pre></div></td></tr></table></div>
1222
- </details>
1223
- </div>
1224
-
1225
-</div>
1226
-
1227
-<div class="doc doc-object doc-function">
1228
-
1229
-
1230
-
1231
-<h3 id="app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="doc doc-heading">
1232
-<code class="highlight language-python"><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span></code>
1233
-
1234
-</h3>
1235
-
1236
-
1237
- <div class="doc doc-contents ">
1238
-
1239
- <p>Checks whether the given index name should be skipped.</p>
1240
-
1241
- <p><strong>Parameters:</strong></p>
1242
- <table>
1243
- <thead>
1244
- <tr>
1245
- <th>Name</th>
1246
- <th>Type</th>
1247
- <th>Description</th>
1248
- <th>Default</th>
1249
- </tr>
1250
- </thead>
1251
- <tbody>
1252
- <tr>
1253
- <td><code>index_name</code></td>
1254
- <td>
1255
- <code>str</code>
1256
- </td>
1257
- <td>
1258
- <div class="doc-md-description">
1259
- <p>The name of the index.</p>
1260
- </div>
1261
- </td>
1262
- <td>
1263
- <em>required</em>
1264
- </td>
1265
- </tr>
1266
- </tbody>
1267
- </table>
1268
-
1269
- <p><strong>Returns:</strong></p>
1270
- <table>
1271
- <thead>
1272
- <tr>
1273
-<th>Name</th> <th>Type</th>
1274
- <th>Description</th>
1275
- </tr>
1276
- </thead>
1277
- <tbody>
1278
- <tr>
1279
-<td><code>bool</code></td> <td>
1280
- <code>bool</code>
1281
- </td>
1282
- <td>
1283
- <div class="doc-md-description">
1284
- <p>True if the index should be skipped, False otherwise.</p>
1285
- </div>
1286
- </td>
1287
- </tr>
1288
- </tbody>
1289
- </table>
1290
-
1291
- <details class="quote">
1292
- <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1293
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-43">43</a></span>
1294
-<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1295
-<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1296
-<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1297
-<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1298
-<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1299
-<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1300
-<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1301
-<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1302
-<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1303
-<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1304
-<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1305
-<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1306
-<span class="normal"><a href="#__codelineno-0-56">56</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1307
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
1308
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1309
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1310
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1311
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1312
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1313
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1314
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1315
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
1316
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
1317
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
1318
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1319
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1320
-</code></pre></div></td></tr></table></div>
1321
- </details>
1322
- </div>
1323
-
1324
-</div>
1325
-
1326
-
1327
-
1328
- </div>
1329
-
1330
- </div>
1331
-
1332
-</div>
1333
-
1334
-
1335
-
1336
-
1337
- </div>
1338
-
1339
- </div>
1340
-
1341
-</div>
1342
-
1343
-
1344
-
1345
-
1346
-
1347
-
1348
- </article>
1349
- </div>
1350
-
1351
-
1352
- <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
1353
-
1354
- </div>
1355
-
1356
- <button type="button" class="md-top md-icon" data-md-component="top" hidden>
1357
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
1358
- Back to top
1359
- </button>
1360
-
1361
- </main>
1362
-
1363
- <footer class="md-footer">
1364
-
1365
- <div class="md-footer-meta md-typeset">
1366
- <div class="md-footer-meta__inner md-grid">
1367
- <div class="md-copyright">
1368
-
1369
- <div class="md-copyright__highlight">
1370
- © 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
1371
-
1372
- </div>
1373
-
1374
-
1375
- Made with
1376
- <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1377
- Material for MkDocs
1378
- </a>
1379
-
1380
-</div>
1381
-
1382
- </div>
1383
- </div>
1384
-</footer>
1385
-
1386
- </div>
1387
- <div class="md-dialog" data-md-component="dialog">
1388
- <div class="md-dialog__inner md-typeset"></div>
1389
- </div>
1390
-
1391
- <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
1392
-
1393
-
1394
- <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
1395
-
1396
-
1397
- </body>
1398
-</html>
\ No newline at end of file
backend/site/cases/index.html
deleted
-2127
@@ -1,2127 +0,0 @@
1
-
2
-<!doctype html>
3
-<html lang="en" class="no-js">
4
- <head>
5
-
6
- <meta charset="utf-8">
7
- <meta name="viewport" content="width=device-width,initial-scale=1">
8
-
9
-
10
-
11
-
12
- <link rel="prev" href="../artifacts/">
13
-
14
-
15
- <link rel="next" href="../graylog/">
16
-
17
- <link rel="icon" href="../assets/images/favicon.png">
18
- <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
-
20
-
21
-
22
- <title>Cases - SOCFortress CoPilot</title>
23
-
24
-
25
-
26
- <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27
-
28
-
29
- <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41
- <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42
-
43
-
44
-
45
- <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46
-
47
- <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48
-
49
-
50
-
51
-
52
-
53
-
54
- </head>
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
- <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65
-
66
-
67
-
68
- <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69
-
70
- <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71
- <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72
- <label class="md-overlay" for="__drawer"></label>
73
- <div data-md-component="skip">
74
-
75
-
76
- <a href="#cases-overview" class="md-skip">
77
- Skip to content
78
- </a>
79
-
80
- </div>
81
- <div data-md-component="announce">
82
-
83
- </div>
84
-
85
-
86
-
87
-
88
-<header class="md-header" data-md-component="header">
89
- <nav class="md-header__inner md-grid" aria-label="Header">
90
- <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91
-
92
-
93
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94
-
95
- </a>
96
- <label class="md-header__button md-icon" for="__drawer">
97
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98
- </label>
99
- <div class="md-header__title" data-md-component="header-title">
100
- <div class="md-header__ellipsis">
101
- <div class="md-header__topic">
102
- <span class="md-ellipsis">
103
- SOCFortress CoPilot
104
- </span>
105
- </div>
106
- <div class="md-header__topic" data-md-component="header-topic">
107
- <span class="md-ellipsis">
108
-
109
- Cases
110
-
111
- </span>
112
- </div>
113
- </div>
114
- </div>
115
-
116
-
117
- <form class="md-header__option" data-md-component="palette">
118
-
119
-
120
-
121
-
122
- <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123
-
124
- <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126
- </label>
127
-
128
-
129
-
130
-
131
-
132
- <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133
-
134
- <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136
- </label>
137
-
138
-
139
- </form>
140
-
141
-
142
-
143
-
144
-
145
- </nav>
146
-
147
-</header>
148
-
149
- <div class="md-container" data-md-component="container">
150
-
151
-
152
-
153
-
154
-
155
-<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156
- <div class="md-grid">
157
- <ul class="md-tabs__list">
158
-
159
-
160
-
161
-
162
-
163
-
164
- <li class="md-tabs__item">
165
- <a href=".." class="md-tabs__link">
166
- Home
167
- </a>
168
- </li>
169
-
170
-
171
-
172
-
173
-
174
-
175
-
176
- <li class="md-tabs__item">
177
- <a href="../connectors/" class="md-tabs__link">
178
- Connectors
179
- </a>
180
- </li>
181
-
182
-
183
-
184
-
185
-
186
-
187
-
188
- <li class="md-tabs__item">
189
- <a href="../agents/" class="md-tabs__link">
190
- Agents
191
- </a>
192
- </li>
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
- <li class="md-tabs__item">
201
- <a href="../alerts/" class="md-tabs__link">
202
- Alerts
203
- </a>
204
- </li>
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
- <li class="md-tabs__item">
213
- <a href="../artifacts/" class="md-tabs__link">
214
- Artifacts
215
- </a>
216
- </li>
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
- <li class="md-tabs__item">
227
- <a href="./" class="md-tabs__link md-tabs__link--active">
228
- Cases
229
- </a>
230
- </li>
231
-
232
-
233
-
234
-
235
-
236
-
237
-
238
- <li class="md-tabs__item">
239
- <a href="../graylog/" class="md-tabs__link">
240
- Graylog
241
- </a>
242
- </li>
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
- <li class="md-tabs__item">
251
- <a href="../wazuhmanager/" class="md-tabs__link">
252
- Wazuh-Manager
253
- </a>
254
- </li>
255
-
256
-
257
- </ul>
258
- </div>
259
-</nav>
260
-
261
-
262
-
263
- <main class="md-main" data-md-component="main">
264
- <div class="md-main__inner md-grid">
265
-
266
-
267
-
268
- <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
269
- <div class="md-sidebar__scrollwrap">
270
- <div class="md-sidebar__inner">
271
-
272
-
273
-
274
-
275
-
276
-
277
-
278
-<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
279
- <label class="md-nav__title" for="__drawer">
280
- <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
281
-
282
-
283
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
284
-
285
- </a>
286
- SOCFortress CoPilot
287
- </label>
288
-
289
- <ul class="md-nav__list" data-md-scrollfix>
290
-
291
-
292
-
293
-
294
-
295
-
296
-
297
-
298
- <li class="md-nav__item">
299
- <a href=".." class="md-nav__link">
300
- Home
301
- </a>
302
- </li>
303
-
304
-
305
-
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
- <li class="md-nav__item">
314
- <a href="../connectors/" class="md-nav__link">
315
- Connectors
316
- </a>
317
- </li>
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
- <li class="md-nav__item">
329
- <a href="../agents/" class="md-nav__link">
330
- Agents
331
- </a>
332
- </li>
333
-
334
-
335
-
336
-
337
-
338
-
339
-
340
-
341
-
342
-
343
- <li class="md-nav__item">
344
- <a href="../alerts/" class="md-nav__link">
345
- Alerts
346
- </a>
347
- </li>
348
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
356
-
357
-
358
- <li class="md-nav__item">
359
- <a href="../artifacts/" class="md-nav__link">
360
- Artifacts
361
- </a>
362
- </li>
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
-
374
-
375
- <li class="md-nav__item md-nav__item--active">
376
-
377
- <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
378
-
379
-
380
-
381
- <label class="md-nav__link md-nav__link--active" for="__toc">
382
- Cases
383
- <span class="md-nav__icon md-icon"></span>
384
- </label>
385
-
386
- <a href="./" class="md-nav__link md-nav__link--active">
387
- Cases
388
- </a>
389
-
390
-
391
-
392
-<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
393
-
394
-
395
-
396
-
397
- <label class="md-nav__title" for="__toc">
398
- <span class="md-nav__icon md-icon"></span>
399
- Table of contents
400
- </label>
401
- <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
402
-
403
- <li class="md-nav__item">
404
- <a href="#cases-overview" class="md-nav__link">
405
- Cases Overview
406
- </a>
407
-
408
- <nav class="md-nav" aria-label="Cases Overview">
409
- <ul class="md-nav__list">
410
-
411
- <li class="md-nav__item">
412
- <a href="#cases-model" class="md-nav__link">
413
- Cases Model
414
- </a>
415
-
416
-</li>
417
-
418
- </ul>
419
- </nav>
420
-
421
-</li>
422
-
423
- <li class="md-nav__item">
424
- <a href="#app.models.cases" class="md-nav__link">
425
- app.models.cases
426
- </a>
427
-
428
-</li>
429
-
430
- <li class="md-nav__item">
431
- <a href="#app.models.cases.Case" class="md-nav__link">
432
- Case
433
- </a>
434
-
435
- <nav class="md-nav" aria-label="Case">
436
- <ul class="md-nav__list">
437
-
438
- <li class="md-nav__item">
439
- <a href="#app.models.cases.Case.__init__" class="md-nav__link">
440
- __init__()
441
- </a>
442
-
443
-</li>
444
-
445
- <li class="md-nav__item">
446
- <a href="#app.models.cases.Case.__repr__" class="md-nav__link">
447
- __repr__()
448
- </a>
449
-
450
-</li>
451
-
452
- </ul>
453
- </nav>
454
-
455
-</li>
456
-
457
- <li class="md-nav__item">
458
- <a href="#app.models.cases.CaseSchema" class="md-nav__link">
459
- CaseSchema
460
- </a>
461
-
462
- <nav class="md-nav" aria-label="CaseSchema">
463
- <ul class="md-nav__list">
464
-
465
- <li class="md-nav__item">
466
- <a href="#app.models.cases.CaseSchema.Meta" class="md-nav__link">
467
- Meta
468
- </a>
469
-
470
-</li>
471
-
472
- <li class="md-nav__item">
473
- <a href="#cases-routes" class="md-nav__link">
474
- Cases Routes
475
- </a>
476
-
477
-</li>
478
-
479
- </ul>
480
- </nav>
481
-
482
-</li>
483
-
484
- <li class="md-nav__item">
485
- <a href="#app.routes.dfir_iris" class="md-nav__link">
486
- app.routes.dfir_iris
487
- </a>
488
-
489
-</li>
490
-
491
- <li class="md-nav__item">
492
- <a href="#app.routes.dfir_iris.create_case_note" class="md-nav__link">
493
- create_case_note()
494
- </a>
495
-
496
-</li>
497
-
498
- <li class="md-nav__item">
499
- <a href="#app.routes.dfir_iris.get_alerts" class="md-nav__link">
500
- get_alerts()
501
- </a>
502
-
503
-</li>
504
-
505
- <li class="md-nav__item">
506
- <a href="#app.routes.dfir_iris.get_case" class="md-nav__link">
507
- get_case()
508
- </a>
509
-
510
-</li>
511
-
512
- <li class="md-nav__item">
513
- <a href="#app.routes.dfir_iris.get_case_assets" class="md-nav__link">
514
- get_case_assets()
515
- </a>
516
-
517
-</li>
518
-
519
- <li class="md-nav__item">
520
- <a href="#app.routes.dfir_iris.get_case_notes" class="md-nav__link">
521
- get_case_notes()
522
- </a>
523
-
524
-</li>
525
-
526
- <li class="md-nav__item">
527
- <a href="#app.routes.dfir_iris.get_cases" class="md-nav__link">
528
- get_cases()
529
- </a>
530
-
531
- <nav class="md-nav" aria-label="get_cases()">
532
- <ul class="md-nav__list">
533
-
534
- <li class="md-nav__item">
535
- <a href="#cases-services" class="md-nav__link">
536
- Cases Services
537
- </a>
538
-
539
-</li>
540
-
541
- </ul>
542
- </nav>
543
-
544
-</li>
545
-
546
- <li class="md-nav__item">
547
- <a href="#app.services.DFIR_IRIS.cases" class="md-nav__link">
548
- app.services.DFIR_IRIS.cases
549
- </a>
550
-
551
-</li>
552
-
553
- <li class="md-nav__item">
554
- <a href="#app.services.DFIR_IRIS.cases.CasesService" class="md-nav__link">
555
- CasesService
556
- </a>
557
-
558
- <nav class="md-nav" aria-label="CasesService">
559
- <ul class="md-nav__list">
560
-
561
- <li class="md-nav__item">
562
- <a href="#app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="md-nav__link">
563
- check_case_id()
564
- </a>
565
-
566
-</li>
567
-
568
- <li class="md-nav__item">
569
- <a href="#app.services.DFIR_IRIS.cases.CasesService.get_case" class="md-nav__link">
570
- get_case()
571
- </a>
572
-
573
-</li>
574
-
575
- <li class="md-nav__item">
576
- <a href="#app.services.DFIR_IRIS.cases.CasesService.list_cases" class="md-nav__link">
577
- list_cases()
578
- </a>
579
-
580
-</li>
581
-
582
- </ul>
583
- </nav>
584
-
585
-</li>
586
-
587
- </ul>
588
-
589
-</nav>
590
-
591
- </li>
592
-
593
-
594
-
595
-
596
-
597
-
598
-
599
-
600
-
601
-
602
- <li class="md-nav__item">
603
- <a href="../graylog/" class="md-nav__link">
604
- Graylog
605
- </a>
606
- </li>
607
-
608
-
609
-
610
-
611
-
612
-
613
-
614
-
615
-
616
-
617
- <li class="md-nav__item">
618
- <a href="../wazuhmanager/" class="md-nav__link">
619
- Wazuh-Manager
620
- </a>
621
- </li>
622
-
623
-
624
-
625
- </ul>
626
-</nav>
627
- </div>
628
- </div>
629
- </div>
630
-
631
-
632
-
633
-
634
- <div class="md-content" data-md-component="content">
635
- <article class="md-content__inner md-typeset">
636
-
637
-
638
-
639
-
640
- <h1>Cases</h1>
641
-
642
-<h2 id="cases-overview">Cases Overview</h2>
643
-<h3 id="cases-model"><span style="color:blue">Cases Model</span></h3>
644
-
645
-
646
-<div class="doc doc-object doc-module">
647
-
648
-
649
-<a id="app.models.cases"></a>
650
- <div class="doc doc-contents first">
651
-
652
-
653
-
654
- <div class="doc doc-children">
655
-
656
-
657
-
658
-
659
-
660
-
661
-
662
-
663
-<div class="doc doc-object doc-class">
664
-
665
-
666
-
667
-<h2 id="app.models.cases.Case" class="doc doc-heading">
668
- <code>Case</code>
669
-
670
-
671
-</h2>
672
-
673
-
674
- <div class="doc doc-contents ">
675
- <p class="doc doc-class-bases">
676
- Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
677
-
678
-
679
- <p>Class for cases which stores the case ID, case name, and a list of agents.
680
-This class inherits from SQLAlchemy's Model class.</p>
681
-
682
-
683
- <details class="quote">
684
- <summary>Source code in <code>app\models\cases.py</code></summary>
685
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10">10</a></span>
686
-<span class="normal"><a href="#__codelineno-0-11">11</a></span>
687
-<span class="normal"><a href="#__codelineno-0-12">12</a></span>
688
-<span class="normal"><a href="#__codelineno-0-13">13</a></span>
689
-<span class="normal"><a href="#__codelineno-0-14">14</a></span>
690
-<span class="normal"><a href="#__codelineno-0-15">15</a></span>
691
-<span class="normal"><a href="#__codelineno-0-16">16</a></span>
692
-<span class="normal"><a href="#__codelineno-0-17">17</a></span>
693
-<span class="normal"><a href="#__codelineno-0-18">18</a></span>
694
-<span class="normal"><a href="#__codelineno-0-19">19</a></span>
695
-<span class="normal"><a href="#__codelineno-0-20">20</a></span>
696
-<span class="normal"><a href="#__codelineno-0-21">21</a></span>
697
-<span class="normal"><a href="#__codelineno-0-22">22</a></span>
698
-<span class="normal"><a href="#__codelineno-0-23">23</a></span>
699
-<span class="normal"><a href="#__codelineno-0-24">24</a></span>
700
-<span class="normal"><a href="#__codelineno-0-25">25</a></span>
701
-<span class="normal"><a href="#__codelineno-0-26">26</a></span>
702
-<span class="normal"><a href="#__codelineno-0-27">27</a></span>
703
-<span class="normal"><a href="#__codelineno-0-28">28</a></span>
704
-<span class="normal"><a href="#__codelineno-0-29">29</a></span>
705
-<span class="normal"><a href="#__codelineno-0-30">30</a></span>
706
-<span class="normal"><a href="#__codelineno-0-31">31</a></span>
707
-<span class="normal"><a href="#__codelineno-0-32">32</a></span>
708
-<span class="normal"><a href="#__codelineno-0-33">33</a></span>
709
-<span class="normal"><a href="#__codelineno-0-34">34</a></span>
710
-<span class="normal"><a href="#__codelineno-0-35">35</a></span>
711
-<span class="normal"><a href="#__codelineno-0-36">36</a></span>
712
-<span class="normal"><a href="#__codelineno-0-37">37</a></span>
713
-<span class="normal"><a href="#__codelineno-0-38">38</a></span>
714
-<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
715
-<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
716
-<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Class for cases which stores the case ID, case name, and a list of agents.</span>
717
-<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> This class inherits from SQLAlchemy's Model class.</span>
718
-<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> """</span>
719
-<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
720
-<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
721
-<a id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="n">case_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
722
-<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">case_name</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
723
-<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="n">agents</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
724
-<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
725
-<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
726
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">"""</span>
727
-<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
728
-<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
729
-<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
730
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
731
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
732
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
733
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
734
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
735
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
736
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
737
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
738
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">"""</span>
739
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
740
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
741
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
742
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> """</span>
743
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">>"</span>
744
-</code></pre></div></td></tr></table></div>
745
- </details>
746
-
747
-
748
-
749
- <div class="doc doc-children">
750
-
751
-
752
-
753
-
754
-
755
-
756
-
757
-
758
-
759
-<div class="doc doc-object doc-function">
760
-
761
-
762
-
763
-<h3 id="app.models.cases.Case.__init__" class="doc doc-heading">
764
-<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">case_id</span><span class="p">,</span> <span class="n">case_name</span><span class="p">,</span> <span class="n">agents</span><span class="p">)</span></code>
765
-
766
-</h3>
767
-
768
-
769
- <div class="doc doc-contents ">
770
-
771
- <p>Initialize a new instance of the Case class.</p>
772
-<p>:param case_id: The ID of the case.
773
-:param case_name: The name of the case.
774
-:param agents: A comma-separated string of agents associated with the case.</p>
775
-
776
- <details class="quote">
777
- <summary>Source code in <code>app\models\cases.py</code></summary>
778
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-21">21</a></span>
779
-<span class="normal"><a href="#__codelineno-0-22">22</a></span>
780
-<span class="normal"><a href="#__codelineno-0-23">23</a></span>
781
-<span class="normal"><a href="#__codelineno-0-24">24</a></span>
782
-<span class="normal"><a href="#__codelineno-0-25">25</a></span>
783
-<span class="normal"><a href="#__codelineno-0-26">26</a></span>
784
-<span class="normal"><a href="#__codelineno-0-27">27</a></span>
785
-<span class="normal"><a href="#__codelineno-0-28">28</a></span>
786
-<span class="normal"><a href="#__codelineno-0-29">29</a></span>
787
-<span class="normal"><a href="#__codelineno-0-30">30</a></span>
788
-<span class="normal"><a href="#__codelineno-0-31">31</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
789
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">"""</span>
790
-<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
791
-<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
792
-<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
793
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
794
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
795
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
796
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
797
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
798
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
799
-</code></pre></div></td></tr></table></div>
800
- </details>
801
- </div>
802
-
803
-</div>
804
-
805
-<div class="doc doc-object doc-function">
806
-
807
-
808
-
809
-<h3 id="app.models.cases.Case.__repr__" class="doc doc-heading">
810
-<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
811
-
812
-</h3>
813
-
814
-
815
- <div class="doc doc-contents ">
816
-
817
- <p>Returns a string representation of the Case instance.</p>
818
-<p>:return: A string representation of the case ID.</p>
819
-
820
- <details class="quote">
821
- <summary>Source code in <code>app\models\cases.py</code></summary>
822
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
823
-<span class="normal"><a href="#__codelineno-0-34">34</a></span>
824
-<span class="normal"><a href="#__codelineno-0-35">35</a></span>
825
-<span class="normal"><a href="#__codelineno-0-36">36</a></span>
826
-<span class="normal"><a href="#__codelineno-0-37">37</a></span>
827
-<span class="normal"><a href="#__codelineno-0-38">38</a></span>
828
-<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
829
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">"""</span>
830
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
831
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
832
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
833
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> """</span>
834
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">>"</span>
835
-</code></pre></div></td></tr></table></div>
836
- </details>
837
- </div>
838
-
839
-</div>
840
-
841
-
842
-
843
- </div>
844
-
845
- </div>
846
-
847
-</div>
848
-
849
-<div class="doc doc-object doc-class">
850
-
851
-
852
-
853
-<h2 id="app.models.cases.CaseSchema" class="doc doc-heading">
854
- <code>CaseSchema</code>
855
-
856
-
857
-</h2>
858
-
859
-
860
- <div class="doc doc-contents ">
861
- <p class="doc doc-class-bases">
862
- Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
863
-
864
-
865
- <p>Schema for serializing and deserializing instances of the Case class.</p>
866
-
867
-
868
- <details class="quote">
869
- <summary>Source code in <code>app\models\cases.py</code></summary>
870
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-42">42</a></span>
871
-<span class="normal"><a href="#__codelineno-0-43">43</a></span>
872
-<span class="normal"><a href="#__codelineno-0-44">44</a></span>
873
-<span class="normal"><a href="#__codelineno-0-45">45</a></span>
874
-<span class="normal"><a href="#__codelineno-0-46">46</a></span>
875
-<span class="normal"><a href="#__codelineno-0-47">47</a></span>
876
-<span class="normal"><a href="#__codelineno-0-48">48</a></span>
877
-<span class="normal"><a href="#__codelineno-0-49">49</a></span>
878
-<span class="normal"><a href="#__codelineno-0-50">50</a></span>
879
-<span class="normal"><a href="#__codelineno-0-51">51</a></span>
880
-<span class="normal"><a href="#__codelineno-0-52">52</a></span>
881
-<span class="normal"><a href="#__codelineno-0-53">53</a></span>
882
-<span class="normal"><a href="#__codelineno-0-54">54</a></span>
883
-<span class="normal"><a href="#__codelineno-0-55">55</a></span>
884
-<span class="normal"><a href="#__codelineno-0-56">56</a></span>
885
-<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">class</span> <span class="nc">CaseSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
886
-<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">"""</span>
887
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Schema for serializing and deserializing instances of the Case class.</span>
888
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> """</span>
889
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
890
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
891
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">"""</span>
892
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
893
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
894
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
895
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
896
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">"id"</span><span class="p">,</span>
897
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">"case_id"</span><span class="p">,</span>
898
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">"case_name"</span><span class="p">,</span>
899
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"agents"</span><span class="p">,</span>
900
-<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
901
-</code></pre></div></td></tr></table></div>
902
- </details>
903
-
904
-
905
-
906
- <div class="doc doc-children">
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
-<div class="doc doc-object doc-class">
916
-
917
-
918
-
919
-<h3 id="app.models.cases.CaseSchema.Meta" class="doc doc-heading">
920
- <code>Meta</code>
921
-
922
-
923
-</h3>
924
-
925
-
926
- <div class="doc doc-contents ">
927
-
928
-
929
- <p>Meta class defines the fields to be serialized/deserialized.</p>
930
-
931
-
932
- <details class="quote">
933
- <summary>Source code in <code>app\models\cases.py</code></summary>
934
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-47">47</a></span>
935
-<span class="normal"><a href="#__codelineno-0-48">48</a></span>
936
-<span class="normal"><a href="#__codelineno-0-49">49</a></span>
937
-<span class="normal"><a href="#__codelineno-0-50">50</a></span>
938
-<span class="normal"><a href="#__codelineno-0-51">51</a></span>
939
-<span class="normal"><a href="#__codelineno-0-52">52</a></span>
940
-<span class="normal"><a href="#__codelineno-0-53">53</a></span>
941
-<span class="normal"><a href="#__codelineno-0-54">54</a></span>
942
-<span class="normal"><a href="#__codelineno-0-55">55</a></span>
943
-<span class="normal"><a href="#__codelineno-0-56">56</a></span>
944
-<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
945
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">"""</span>
946
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
947
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
948
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
949
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
950
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">"id"</span><span class="p">,</span>
951
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">"case_id"</span><span class="p">,</span>
952
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">"case_name"</span><span class="p">,</span>
953
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"agents"</span><span class="p">,</span>
954
-<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
955
-</code></pre></div></td></tr></table></div>
956
- </details>
957
-
958
-
959
-
960
- <div class="doc doc-children">
961
-
962
-
963
-
964
-
965
-
966
-
967
-
968
-
969
-
970
-
971
-
972
- </div>
973
-
974
- </div>
975
-
976
-</div>
977
-
978
-
979
-
980
-
981
- </div>
982
-
983
- </div>
984
-
985
-</div>
986
-
987
-
988
-
989
-
990
- </div>
991
-
992
- </div>
993
-
994
-</div><p><br></p>
995
-<h3 id="cases-routes"><span style="color:green">Cases Routes</span></h3>
996
-
997
-
998
-<div class="doc doc-object doc-module">
999
-
1000
-
1001
-<a id="app.routes.dfir_iris"></a>
1002
- <div class="doc doc-contents first">
1003
-
1004
-
1005
-
1006
- <div class="doc doc-children">
1007
-
1008
-
1009
-
1010
-
1011
-
1012
-
1013
-
1014
-
1015
-
1016
-<div class="doc doc-object doc-function">
1017
-
1018
-
1019
-
1020
-<h2 id="app.routes.dfir_iris.create_case_note" class="doc doc-heading">
1021
-<code class="highlight language-python"><span class="n">create_case_note</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1022
-
1023
-</h2>
1024
-
1025
-
1026
- <div class="doc doc-contents ">
1027
-
1028
- <p>Endpoint to create a note for a specific case in DFIR IRIS.</p>
1029
-
1030
- <p><strong>Parameters:</strong></p>
1031
- <table>
1032
- <thead>
1033
- <tr>
1034
- <th>Name</th>
1035
- <th>Type</th>
1036
- <th>Description</th>
1037
- <th>Default</th>
1038
- </tr>
1039
- </thead>
1040
- <tbody>
1041
- <tr>
1042
- <td><code>case_id</code></td>
1043
- <td>
1044
- <code>str</code>
1045
- </td>
1046
- <td>
1047
- <div class="doc-md-description">
1048
- <p>The ID of the case to create a note for.</p>
1049
- </div>
1050
- </td>
1051
- <td>
1052
- <em>required</em>
1053
- </td>
1054
- </tr>
1055
- </tbody>
1056
- </table>
1057
-
1058
- <p><strong>Returns:</strong></p>
1059
- <table>
1060
- <thead>
1061
- <tr>
1062
-<th>Name</th> <th>Type</th>
1063
- <th>Description</th>
1064
- </tr>
1065
- </thead>
1066
- <tbody>
1067
- <tr>
1068
-<td><code>json</code></td> <td>
1069
- </td>
1070
- <td>
1071
- <div class="doc-md-description">
1072
- <p>A JSON response containing the result of the note creation operation.</p>
1073
- </div>
1074
- </td>
1075
- </tr>
1076
- </tbody>
1077
- </table>
1078
-
1079
- <details class="quote">
1080
- <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1081
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-57">57</a></span>
1082
-<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1083
-<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1084
-<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1085
-<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1086
-<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1087
-<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1088
-<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1089
-<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1090
-<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1091
-<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1092
-<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1093
-<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1094
-<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1095
-<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1096
-<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1097
-<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1098
-<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1099
-<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1100
-<span class="normal"><a href="#__codelineno-0-76">76</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>/note"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"POST"</span><span class="p">])</span>
1101
-<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1102
-<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
1103
-<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Endpoint to create a note for a specific case in DFIR IRIS.</span>
1104
-<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1105
-<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Args:</span>
1106
-<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> case_id (str): The ID of the case to create a note for.</span>
1107
-<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1108
-<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1109
-<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> json: A JSON response containing the result of the note creation operation.</span>
1110
-<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
1111
-<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">note_title</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">"note_title"</span><span class="p">]</span>
1112
-<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">note_content</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">"note_content"</span><span class="p">]</span>
1113
-<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1114
-<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">created_note</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">create_case_note</span><span class="p">(</span>
1115
-<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">,</span>
1116
-<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">note_title</span><span class="o">=</span><span class="n">note_title</span><span class="p">,</span>
1117
-<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">note_content</span><span class="o">=</span><span class="n">note_content</span><span class="p">,</span>
1118
-<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">)</span>
1119
-<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="n">created_note</span>
1120
-</code></pre></div></td></tr></table></div>
1121
- </details>
1122
- </div>
1123
-
1124
-</div>
1125
-
1126
-<div class="doc doc-object doc-function">
1127
-
1128
-
1129
-
1130
-<h2 id="app.routes.dfir_iris.get_alerts" class="doc doc-heading">
1131
-<code class="highlight language-python"><span class="n">get_alerts</span><span class="p">()</span></code>
1132
-
1133
-</h2>
1134
-
1135
-
1136
- <div class="doc doc-contents ">
1137
-
1138
- <p>Endpoint to retrieve all alerts from DFIR IRIS.</p>
1139
-
1140
- <p><strong>Returns:</strong></p>
1141
- <table>
1142
- <thead>
1143
- <tr>
1144
-<th>Name</th> <th>Type</th>
1145
- <th>Description</th>
1146
- </tr>
1147
- </thead>
1148
- <tbody>
1149
- <tr>
1150
-<td><code>json</code></td> <td>
1151
- </td>
1152
- <td>
1153
- <div class="doc-md-description">
1154
- <p>A JSON response containing the list of alerts.</p>
1155
- </div>
1156
- </td>
1157
- </tr>
1158
- </tbody>
1159
- </table>
1160
-
1161
- <details class="quote">
1162
- <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1163
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1164
-<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1165
-<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1166
-<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1167
-<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1168
-<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1169
-<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1170
-<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1171
-<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1172
-<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1173
-<span class="normal"><a href="#__codelineno-0-105">105</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/alerts"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1174
-<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">():</span>
1175
-<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="w"> </span><span class="sd">"""</span>
1176
-<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Endpoint to retrieve all alerts from DFIR IRIS.</span>
1177
-<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1178
-<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Returns:</span>
1179
-<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> json: A JSON response containing the list of alerts.</span>
1180
-<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> """</span>
1181
-<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
1182
-<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_alerts</span><span class="p">()</span>
1183
-<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">alerts</span>
1184
-</code></pre></div></td></tr></table></div>
1185
- </details>
1186
- </div>
1187
-
1188
-</div>
1189
-
1190
-<div class="doc doc-object doc-function">
1191
-
1192
-
1193
-
1194
-<h2 id="app.routes.dfir_iris.get_case" class="doc doc-heading">
1195
-<code class="highlight language-python"><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1196
-
1197
-</h2>
1198
-
1199
-
1200
- <div class="doc doc-contents ">
1201
-
1202
- <p>Endpoint to retrieve a specific case from DFIR IRIS.</p>
1203
-
1204
- <p><strong>Parameters:</strong></p>
1205
- <table>
1206
- <thead>
1207
- <tr>
1208
- <th>Name</th>
1209
- <th>Type</th>
1210
- <th>Description</th>
1211
- <th>Default</th>
1212
- </tr>
1213
- </thead>
1214
- <tbody>
1215
- <tr>
1216
- <td><code>case_id</code></td>
1217
- <td>
1218
- <code>str</code>
1219
- </td>
1220
- <td>
1221
- <div class="doc-md-description">
1222
- <p>The ID of the case to retrieve.</p>
1223
- </div>
1224
- </td>
1225
- <td>
1226
- <em>required</em>
1227
- </td>
1228
- </tr>
1229
- </tbody>
1230
- </table>
1231
-
1232
- <p><strong>Returns:</strong></p>
1233
- <table>
1234
- <thead>
1235
- <tr>
1236
-<th>Name</th> <th>Type</th>
1237
- <th>Description</th>
1238
- </tr>
1239
- </thead>
1240
- <tbody>
1241
- <tr>
1242
-<td><code>json</code></td> <td>
1243
- </td>
1244
- <td>
1245
- <div class="doc-md-description">
1246
- <p>A JSON response containing the case data.</p>
1247
- </div>
1248
- </td>
1249
- </tr>
1250
- </tbody>
1251
- </table>
1252
-
1253
- <details class="quote">
1254
- <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1255
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1256
-<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1257
-<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1258
-<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1259
-<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1260
-<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1261
-<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1262
-<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1263
-<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1264
-<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1265
-<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1266
-<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1267
-<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1268
-<span class="normal"><a href="#__codelineno-0-38">38</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1269
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1270
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">"""</span>
1271
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Endpoint to retrieve a specific case from DFIR IRIS.</span>
1272
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
1273
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
1274
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> case_id (str): The ID of the case to retrieve.</span>
1275
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1276
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1277
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> json: A JSON response containing the case data.</span>
1278
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
1279
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1280
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1281
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">return</span> <span class="n">case</span>
1282
-</code></pre></div></td></tr></table></div>
1283
- </details>
1284
- </div>
1285
-
1286
-</div>
1287
-
1288
-<div class="doc doc-object doc-function">
1289
-
1290
-
1291
-
1292
-<h2 id="app.routes.dfir_iris.get_case_assets" class="doc doc-heading">
1293
-<code class="highlight language-python"><span class="n">get_case_assets</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1294
-
1295
-</h2>
1296
-
1297
-
1298
- <div class="doc doc-contents ">
1299
-
1300
- <p>Endpoint to retrieve assets of a specific case from DFIR IRIS.</p>
1301
-
1302
- <p><strong>Parameters:</strong></p>
1303
- <table>
1304
- <thead>
1305
- <tr>
1306
- <th>Name</th>
1307
- <th>Type</th>
1308
- <th>Description</th>
1309
- <th>Default</th>
1310
- </tr>
1311
- </thead>
1312
- <tbody>
1313
- <tr>
1314
- <td><code>case_id</code></td>
1315
- <td>
1316
- <code>str</code>
1317
- </td>
1318
- <td>
1319
- <div class="doc-md-description">
1320
- <p>The ID of the case to retrieve assets from.</p>
1321
- </div>
1322
- </td>
1323
- <td>
1324
- <em>required</em>
1325
- </td>
1326
- </tr>
1327
- </tbody>
1328
- </table>
1329
-
1330
- <p><strong>Returns:</strong></p>
1331
- <table>
1332
- <thead>
1333
- <tr>
1334
-<th>Name</th> <th>Type</th>
1335
- <th>Description</th>
1336
- </tr>
1337
- </thead>
1338
- <tbody>
1339
- <tr>
1340
-<td><code>json</code></td> <td>
1341
- </td>
1342
- <td>
1343
- <div class="doc-md-description">
1344
- <p>A JSON response containing the list of assets for the case.</p>
1345
- </div>
1346
- </td>
1347
- </tr>
1348
- </tbody>
1349
- </table>
1350
-
1351
- <details class="quote">
1352
- <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1353
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-79">79</a></span>
1354
-<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1355
-<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1356
-<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1357
-<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1358
-<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1359
-<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1360
-<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1361
-<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1362
-<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1363
-<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1364
-<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1365
-<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1366
-<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>/assets"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1367
-<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1368
-<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="w"> </span><span class="sd">"""</span>
1369
-<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> Endpoint to retrieve assets of a specific case from DFIR IRIS.</span>
1370
-<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1371
-<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Args:</span>
1372
-<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> case_id (str): The ID of the case to retrieve assets from.</span>
1373
-<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
1374
-<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
1375
-<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> json: A JSON response containing the list of assets for the case.</span>
1376
-<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> """</span>
1377
-<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">asset_service</span> <span class="o">=</span> <span class="n">AssetsService</span><span class="p">()</span>
1378
-<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">assets</span> <span class="o">=</span> <span class="n">asset_service</span><span class="o">.</span><span class="n">get_case_assets</span><span class="p">(</span><span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1379
-<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="n">assets</span>
1380
-</code></pre></div></td></tr></table></div>
1381
- </details>
1382
- </div>
1383
-
1384
-</div>
1385
-
1386
-<div class="doc doc-object doc-function">
1387
-
1388
-
1389
-
1390
-<h2 id="app.routes.dfir_iris.get_case_notes" class="doc doc-heading">
1391
-<code class="highlight language-python"><span class="n">get_case_notes</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1392
-
1393
-</h2>
1394
-
1395
-
1396
- <div class="doc doc-contents ">
1397
-
1398
- <p>Endpoint to retrieve notes of a specific case from DFIR IRIS.</p>
1399
-
1400
- <p><strong>Parameters:</strong></p>
1401
- <table>
1402
- <thead>
1403
- <tr>
1404
- <th>Name</th>
1405
- <th>Type</th>
1406
- <th>Description</th>
1407
- <th>Default</th>
1408
- </tr>
1409
- </thead>
1410
- <tbody>
1411
- <tr>
1412
- <td><code>case_id</code></td>
1413
- <td>
1414
- <code>str</code>
1415
- </td>
1416
- <td>
1417
- <div class="doc-md-description">
1418
- <p>The ID of the case to retrieve notes from.</p>
1419
- </div>
1420
- </td>
1421
- <td>
1422
- <em>required</em>
1423
- </td>
1424
- </tr>
1425
- </tbody>
1426
- </table>
1427
-
1428
- <p><strong>Returns:</strong></p>
1429
- <table>
1430
- <thead>
1431
- <tr>
1432
-<th>Name</th> <th>Type</th>
1433
- <th>Description</th>
1434
- </tr>
1435
- </thead>
1436
- <tbody>
1437
- <tr>
1438
-<td><code>json</code></td> <td>
1439
- </td>
1440
- <td>
1441
- <div class="doc-md-description">
1442
- <p>A JSON response containing the list of notes for the case.</p>
1443
- </div>
1444
- </td>
1445
- </tr>
1446
- </tbody>
1447
- </table>
1448
-
1449
- <details class="quote">
1450
- <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1451
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-41">41</a></span>
1452
-<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1453
-<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1454
-<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1455
-<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1456
-<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1457
-<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1458
-<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1459
-<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1460
-<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1461
-<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1462
-<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1463
-<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1464
-<span class="normal"><a href="#__codelineno-0-54">54</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>/notes"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1465
-<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
1466
-<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">"""</span>
1467
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Endpoint to retrieve notes of a specific case from DFIR IRIS.</span>
1468
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1469
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
1470
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> case_id (str): The ID of the case to retrieve notes from.</span>
1471
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1472
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1473
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> json: A JSON response containing the list of notes for the case.</span>
1474
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> """</span>
1475
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1476
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">notes</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">get_case_notes</span><span class="p">(</span><span class="n">search_term</span><span class="o">=</span><span class="s2">"%"</span><span class="p">,</span> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1477
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="n">notes</span>
1478
-</code></pre></div></td></tr></table></div>
1479
- </details>
1480
- </div>
1481
-
1482
-</div>
1483
-
1484
-<div class="doc doc-object doc-function">
1485
-
1486
-
1487
-
1488
-<h2 id="app.routes.dfir_iris.get_cases" class="doc doc-heading">
1489
-<code class="highlight language-python"><span class="n">get_cases</span><span class="p">()</span></code>
1490
-
1491
-</h2>
1492
-
1493
-
1494
- <div class="doc doc-contents ">
1495
-
1496
- <p>Endpoint to retrieve all the cases from DFIR IRIS.</p>
1497
-
1498
- <p><strong>Returns:</strong></p>
1499
- <table>
1500
- <thead>
1501
- <tr>
1502
-<th>Name</th> <th>Type</th>
1503
- <th>Description</th>
1504
- </tr>
1505
- </thead>
1506
- <tbody>
1507
- <tr>
1508
-<td><code>json</code></td> <td>
1509
- </td>
1510
- <td>
1511
- <div class="doc-md-description">
1512
- <p>A JSON response containing the list of cases.</p>
1513
- </div>
1514
- </td>
1515
- </tr>
1516
- </tbody>
1517
- </table>
1518
-
1519
- <details class="quote">
1520
- <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1521
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-12">12</a></span>
1522
-<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1523
-<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1524
-<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1525
-<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1526
-<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1527
-<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1528
-<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1529
-<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1530
-<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1531
-<span class="normal"><a href="#__codelineno-0-22">22</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1532
-<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">def</span> <span class="nf">get_cases</span><span class="p">():</span>
1533
-<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">"""</span>
1534
-<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Endpoint to retrieve all the cases from DFIR IRIS.</span>
1535
-<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
1536
-<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Returns:</span>
1537
-<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> json: A JSON response containing the list of cases.</span>
1538
-<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> """</span>
1539
-<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1540
-<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">cases</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_cases</span><span class="p">()</span>
1541
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">cases</span>
1542
-</code></pre></div></td></tr></table></div>
1543
- </details>
1544
- </div>
1545
-
1546
-</div>
1547
-
1548
-
1549
-
1550
- </div>
1551
-
1552
- </div>
1553
-
1554
-</div><p><br></p>
1555
-<h3 id="cases-services"><span style="color:red">Cases Services</span></h3>
1556
-
1557
-
1558
-<div class="doc doc-object doc-module">
1559
-
1560
-
1561
-<a id="app.services.DFIR_IRIS.cases"></a>
1562
- <div class="doc doc-contents first">
1563
-
1564
-
1565
-
1566
- <div class="doc doc-children">
1567
-
1568
-
1569
-
1570
-
1571
-
1572
-
1573
-
1574
-
1575
-<div class="doc doc-object doc-class">
1576
-
1577
-
1578
-
1579
-<h2 id="app.services.DFIR_IRIS.cases.CasesService" class="doc doc-heading">
1580
- <code>CasesService</code>
1581
-
1582
-
1583
-</h2>
1584
-
1585
-
1586
- <div class="doc doc-contents ">
1587
-
1588
-
1589
- <p>A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</p>
1590
-
1591
-
1592
- <details class="quote">
1593
- <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1594
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1595
-<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1596
-<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1597
-<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1598
-<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1599
-<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1600
-<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1601
-<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1602
-<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1603
-<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1604
-<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1605
-<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1606
-<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1607
-<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1608
-<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1609
-<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1610
-<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1611
-<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1612
-<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1613
-<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1614
-<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1615
-<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1616
-<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1617
-<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1618
-<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1619
-<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1620
-<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1621
-<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1622
-<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1623
-<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1624
-<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1625
-<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1626
-<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1627
-<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1628
-<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1629
-<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1630
-<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1631
-<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1632
-<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1633
-<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1634
-<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1635
-<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1636
-<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1637
-<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1638
-<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1639
-<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1640
-<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1641
-<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1642
-<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1643
-<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1644
-<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1645
-<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1646
-<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1647
-<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1648
-<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1649
-<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1650
-<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1651
-<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1652
-<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1653
-<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1654
-<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1655
-<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1656
-<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1657
-<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1658
-<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1659
-<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1660
-<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1661
-<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1662
-<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1663
-<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1664
-<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1665
-<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1666
-<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1667
-<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1668
-<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1669
-<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1670
-<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1671
-<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1672
-<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1673
-<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1674
-<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1675
-<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1676
-<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1677
-<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1678
-<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1679
-<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1680
-<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1681
-<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">CasesService</span><span class="p">:</span>
1682
-<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">"""</span>
1683
-<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</span>
1684
-<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> """</span>
1685
-<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1686
-<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1687
-<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
1688
-<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
1689
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a>
1690
-<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1691
-<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
1692
-<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
1693
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">else</span><span class="p">:</span>
1694
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
1695
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
1696
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1697
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">"""</span>
1698
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
1699
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1700
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1701
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
1702
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
1703
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1704
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
1705
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1706
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
1707
-<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
1708
-<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
1709
-<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting cases from DFIR-IRIS"</span><span class="p">)</span>
1710
-<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1711
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1712
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1713
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
1714
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
1715
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1716
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1717
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
1718
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1719
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cases from DFIR-IRIS"</span><span class="p">,</span>
1720
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
1721
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
1722
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
1723
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1724
-<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cases from DFIR-IRIS"</span><span class="p">,</span>
1725
-<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">"cases"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
1726
-<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
1727
-<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1728
-<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1729
-<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">"""</span>
1730
-<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
1731
-<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1732
-<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1733
-<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1734
-<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
1735
-<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1736
-<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
1737
-<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1738
-<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
1739
-<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
1740
-<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
1741
-<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
1742
-<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1743
-<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1744
-<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1745
-<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
1746
-<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
1747
-<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
1748
-<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
1749
-<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1750
-<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
1751
-<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1752
-<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
1753
-<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
1754
-<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
1755
-<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
1756
-<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1757
-<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
1758
-<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">"case"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
1759
-<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
1760
-<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1761
-<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1762
-<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">"""</span>
1763
-<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
1764
-<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
1765
-<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
1766
-<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1767
-<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> """</span>
1768
-<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
1769
-</code></pre></div></td></tr></table></div>
1770
- </details>
1771
-
1772
-
1773
-
1774
- <div class="doc doc-children">
1775
-
1776
-
1777
-
1778
-
1779
-
1780
-
1781
-
1782
-
1783
-
1784
-<div class="doc doc-object doc-function">
1785
-
1786
-
1787
-
1788
-<h3 id="app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="doc doc-heading">
1789
-<code class="highlight language-python"><span class="n">check_case_id</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1790
-
1791
-</h3>
1792
-
1793
-
1794
- <div class="doc doc-contents ">
1795
-
1796
- <p>Checks if a case exists in DFIR-IRIS</p>
1797
-
1798
- <p><strong>Returns:</strong></p>
1799
- <table>
1800
- <thead>
1801
- <tr>
1802
-<th>Name</th> <th>Type</th>
1803
- <th>Description</th>
1804
- </tr>
1805
- </thead>
1806
- <tbody>
1807
- <tr>
1808
-<td><code>dict</code></td> <td>
1809
- <code>bool</code>
1810
- </td>
1811
- <td>
1812
- <div class="doc-md-description">
1813
- <p>A dictionary containing the success status, a message and potentially the case.</p>
1814
- </div>
1815
- </td>
1816
- </tr>
1817
- </tbody>
1818
- </table>
1819
-
1820
- <details class="quote">
1821
- <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1822
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1823
-<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1824
-<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1825
-<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1826
-<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1827
-<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1828
-<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1829
-<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1830
-<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">"""</span>
1831
-<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
1832
-<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
1833
-<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
1834
-<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1835
-<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> """</span>
1836
-<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
1837
-</code></pre></div></td></tr></table></div>
1838
- </details>
1839
- </div>
1840
-
1841
-</div>
1842
-
1843
-<div class="doc doc-object doc-function">
1844
-
1845
-
1846
-
1847
-<h3 id="app.services.DFIR_IRIS.cases.CasesService.get_case" class="doc doc-heading">
1848
-<code class="highlight language-python"><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
1849
-
1850
-</h3>
1851
-
1852
-
1853
- <div class="doc doc-contents ">
1854
-
1855
- <p>Gets a case from DFIR-IRIS and returns all the details</p>
1856
-
1857
- <p><strong>Returns:</strong></p>
1858
- <table>
1859
- <thead>
1860
- <tr>
1861
-<th>Name</th> <th>Type</th>
1862
- <th>Description</th>
1863
- </tr>
1864
- </thead>
1865
- <tbody>
1866
- <tr>
1867
-<td><code>dict</code></td> <td>
1868
- <code>bool</code>
1869
- </td>
1870
- <td>
1871
- <div class="doc-md-description">
1872
- <p>A dictionary containing the success status, a message and potentially the case.</p>
1873
- </div>
1874
- </td>
1875
- </tr>
1876
- </tbody>
1877
- </table>
1878
-
1879
- <details class="quote">
1880
- <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1881
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-61">61</a></span>
1882
-<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1883
-<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1884
-<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1885
-<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1886
-<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1887
-<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1888
-<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1889
-<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1890
-<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1891
-<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1892
-<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1893
-<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1894
-<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1895
-<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1896
-<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1897
-<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1898
-<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1899
-<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1900
-<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1901
-<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1902
-<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1903
-<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1904
-<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1905
-<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1906
-<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1907
-<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1908
-<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1909
-<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1910
-<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1911
-<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1912
-<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1913
-<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">"""</span>
1914
-<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
1915
-<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1916
-<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1917
-<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
1918
-<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
1919
-<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1920
-<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
1921
-<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1922
-<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
1923
-<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
1924
-<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
1925
-<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
1926
-<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1927
-<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1928
-<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1929
-<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
1930
-<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
1931
-<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
1932
-<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
1933
-<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1934
-<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
1935
-<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1936
-<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
1937
-<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
1938
-<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
1939
-<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
1940
-<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1941
-<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
1942
-<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">"case"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
1943
-<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
1944
-</code></pre></div></td></tr></table></div>
1945
- </details>
1946
- </div>
1947
-
1948
-</div>
1949
-
1950
-<div class="doc doc-object doc-function">
1951
-
1952
-
1953
-
1954
-<h3 id="app.services.DFIR_IRIS.cases.CasesService.list_cases" class="doc doc-heading">
1955
-<code class="highlight language-python"><span class="n">list_cases</span><span class="p">()</span></code>
1956
-
1957
-</h3>
1958
-
1959
-
1960
- <div class="doc doc-contents ">
1961
-
1962
- <p>Lists all cases from DFIR-IRIS</p>
1963
-
1964
- <p><strong>Returns:</strong></p>
1965
- <table>
1966
- <thead>
1967
- <tr>
1968
-<th>Name</th> <th>Type</th>
1969
- <th>Description</th>
1970
- </tr>
1971
- </thead>
1972
- <tbody>
1973
- <tr>
1974
-<td><code>dict</code></td> <td>
1975
- <code><span title="typing.Dict">Dict</span>[str, object]</code>
1976
- </td>
1977
- <td>
1978
- <div class="doc-md-description">
1979
- <p>A dictionary containing the success status, a message and potentially the cases.</p>
1980
- </div>
1981
- </td>
1982
- </tr>
1983
- </tbody>
1984
- </table>
1985
-
1986
- <details class="quote">
1987
- <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
1988
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
1989
-<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1990
-<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1991
-<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1992
-<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1993
-<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1994
-<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1995
-<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1996
-<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1997
-<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1998
-<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1999
-<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2000
-<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2001
-<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2002
-<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2003
-<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2004
-<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2005
-<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2006
-<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2007
-<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2008
-<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2009
-<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2010
-<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2011
-<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2012
-<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2013
-<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2014
-<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2015
-<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2016
-<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2017
-<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2018
-<span class="normal"><a href="#__codelineno-0-59">59</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2019
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">"""</span>
2020
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
2021
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2022
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
2023
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
2024
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
2025
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2026
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
2027
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2028
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2029
-<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
2030
-<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2031
-<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting cases from DFIR-IRIS"</span><span class="p">)</span>
2032
-<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2033
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2034
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2035
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
2036
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
2037
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2038
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2039
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2040
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2041
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cases from DFIR-IRIS"</span><span class="p">,</span>
2042
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2043
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2044
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
2045
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2046
-<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cases from DFIR-IRIS"</span><span class="p">,</span>
2047
-<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">"cases"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
2048
-<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
2049
-</code></pre></div></td></tr></table></div>
2050
- </details>
2051
- </div>
2052
-
2053
-</div>
2054
-
2055
-
2056
-
2057
- </div>
2058
-
2059
- </div>
2060
-
2061
-</div>
2062
-
2063
-
2064
-
2065
-
2066
- </div>
2067
-
2068
- </div>
2069
-
2070
-</div>
2071
-
2072
-
2073
-
2074
-
2075
-
2076
-
2077
- </article>
2078
- </div>
2079
-
2080
-
2081
- <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
2082
-
2083
- </div>
2084
-
2085
- <button type="button" class="md-top md-icon" data-md-component="top" hidden>
2086
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
2087
- Back to top
2088
- </button>
2089
-
2090
- </main>
2091
-
2092
- <footer class="md-footer">
2093
-
2094
- <div class="md-footer-meta md-typeset">
2095
- <div class="md-footer-meta__inner md-grid">
2096
- <div class="md-copyright">
2097
-
2098
- <div class="md-copyright__highlight">
2099
- © 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
2100
-
2101
- </div>
2102
-
2103
-
2104
- Made with
2105
- <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2106
- Material for MkDocs
2107
- </a>
2108
-
2109
-</div>
2110
-
2111
- </div>
2112
- </div>
2113
-</footer>
2114
-
2115
- </div>
2116
- <div class="md-dialog" data-md-component="dialog">
2117
- <div class="md-dialog__inner md-typeset"></div>
2118
- </div>
2119
-
2120
- <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
2121
-
2122
-
2123
- <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
2124
-
2125
-
2126
- </body>
2127
-</html>
\ No newline at end of file
backend/site/connectors/index.html
+47
-20
@@ -200,8 +200,8 @@
200
201
202
<li class="md-tabs__item">
203
- <a href="../alerts/" class="md-tabs__link">
204
- Alerts
203
+ <a href="../wazuhindexer/" class="md-tabs__link">
204
+ Wazuh-Indexer
205
</a>
206
</li>
207
@@ -212,8 +212,8 @@
212
213
214
<li class="md-tabs__item">
215
- <a href="../artifacts/" class="md-tabs__link">
216
- Artifacts
215
+ <a href="../dfiriris/" class="md-tabs__link">
216
+ Dfir-Iris
217
</a>
218
</li>
219
@@ -224,8 +224,8 @@
224
225
226
<li class="md-tabs__item">
227
- <a href="../cases/" class="md-tabs__link">
228
- Cases
227
+ <a href="../graylog/" class="md-tabs__link">
228
+ Graylog
229
</a>
230
</li>
231
@@ -236,8 +236,8 @@
236
237
238
<li class="md-tabs__item">
239
- <a href="../graylog/" class="md-tabs__link">
240
- Graylog
239
+ <a href="../wazuhmanager/" class="md-tabs__link">
240
+ Wazuh-Manager
241
</a>
242
</li>
243
@@ -248,8 +248,20 @@
248
249
250
<li class="md-tabs__item">
251
- <a href="../wazuhmanager/" class="md-tabs__link">
252
- Wazuh-Manager
251
+ <a href="../velociraptor/" class="md-tabs__link">
252
+ Velociraptor
253
+ </a>
254
+ </li>
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <li class="md-tabs__item">
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
</a>
266
</li>
267
@@ -743,8 +755,8 @@
755
756
757
<li class="md-nav__item">
746
- <a href="../alerts/" class="md-nav__link">
747
- Alerts
758
+ <a href="../wazuhindexer/" class="md-nav__link">
759
+ Wazuh-Indexer
760
</a>
761
</li>
762
@@ -758,8 +770,8 @@
770
771
772
<li class="md-nav__item">
761
- <a href="../artifacts/" class="md-nav__link">
762
- Artifacts
773
+ <a href="../dfiriris/" class="md-nav__link">
774
+ Dfir-Iris
775
</a>
776
</li>
777
@@ -773,8 +785,8 @@
785
786
787
<li class="md-nav__item">
776
- <a href="../cases/" class="md-nav__link">
777
- Cases
788
+ <a href="../graylog/" class="md-nav__link">
789
+ Graylog
790
</a>
791
</li>
792
@@ -788,8 +800,8 @@
800
801
802
<li class="md-nav__item">
791
- <a href="../graylog/" class="md-nav__link">
792
- Graylog
803
+ <a href="../wazuhmanager/" class="md-nav__link">
804
+ Wazuh-Manager
805
</a>
806
</li>
807
@@ -803,8 +815,23 @@
815
816
817
<li class="md-nav__item">
806
- <a href="../wazuhmanager/" class="md-nav__link">
807
- Wazuh-Manager
818
+ <a href="../velociraptor/" class="md-nav__link">
819
+ Velociraptor
820
+ </a>
821
+ </li>
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+ <li class="md-nav__item">
833
+ <a href="../shuffle/" class="md-nav__link">
834
+ Shuffle
835
</a>
836
</li>
837
backend/site/dfiriris/index.html
new
+4716
@@ -0,0 +1,4716 @@
1
+
2
+<!doctype html>
3
+<html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+
10
+
11
+
12
+ <link rel="prev" href="../wazuhindexer/">
13
+
14
+
15
+ <link rel="next" href="../graylog/">
16
+
17
+ <link rel="icon" href="../assets/images/favicon.png">
18
+ <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
+
20
+
21
+
22
+ <title>Dfir-Iris - SOCFortress CoPilot</title>
23
+
24
+
25
+
26
+ <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27
+
28
+
29
+ <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42
+
43
+
44
+
45
+ <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46
+
47
+ <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48
+
49
+
50
+
51
+
52
+
53
+
54
+ </head>
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65
+
66
+
67
+
68
+ <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69
+
70
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72
+ <label class="md-overlay" for="__drawer"></label>
73
+ <div data-md-component="skip">
74
+
75
+
76
+ <a href="#dfir-iris-overview" class="md-skip">
77
+ Skip to content
78
+ </a>
79
+
80
+ </div>
81
+ <div data-md-component="announce">
82
+
83
+ </div>
84
+
85
+
86
+
87
+
88
+<header class="md-header" data-md-component="header">
89
+ <nav class="md-header__inner md-grid" aria-label="Header">
90
+ <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91
+
92
+
93
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94
+
95
+ </a>
96
+ <label class="md-header__button md-icon" for="__drawer">
97
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98
+ </label>
99
+ <div class="md-header__title" data-md-component="header-title">
100
+ <div class="md-header__ellipsis">
101
+ <div class="md-header__topic">
102
+ <span class="md-ellipsis">
103
+ SOCFortress CoPilot
104
+ </span>
105
+ </div>
106
+ <div class="md-header__topic" data-md-component="header-topic">
107
+ <span class="md-ellipsis">
108
+
109
+ Dfir-Iris
110
+
111
+ </span>
112
+ </div>
113
+ </div>
114
+ </div>
115
+
116
+
117
+ <form class="md-header__option" data-md-component="palette">
118
+
119
+
120
+
121
+
122
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123
+
124
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126
+ </label>
127
+
128
+
129
+
130
+
131
+
132
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133
+
134
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136
+ </label>
137
+
138
+
139
+ </form>
140
+
141
+
142
+
143
+
144
+
145
+ </nav>
146
+
147
+</header>
148
+
149
+ <div class="md-container" data-md-component="container">
150
+
151
+
152
+
153
+
154
+
155
+<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156
+ <div class="md-grid">
157
+ <ul class="md-tabs__list">
158
+
159
+
160
+
161
+
162
+
163
+
164
+ <li class="md-tabs__item">
165
+ <a href=".." class="md-tabs__link">
166
+ Home
167
+ </a>
168
+ </li>
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ <li class="md-tabs__item">
177
+ <a href="../connectors/" class="md-tabs__link">
178
+ Connectors
179
+ </a>
180
+ </li>
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+ <li class="md-tabs__item">
189
+ <a href="../agents/" class="md-tabs__link">
190
+ Agents
191
+ </a>
192
+ </li>
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+ <li class="md-tabs__item">
201
+ <a href="../wazuhindexer/" class="md-tabs__link">
202
+ Wazuh-Indexer
203
+ </a>
204
+ </li>
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+ <li class="md-tabs__item">
215
+ <a href="./" class="md-tabs__link md-tabs__link--active">
216
+ Dfir-Iris
217
+ </a>
218
+ </li>
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+ <li class="md-tabs__item">
227
+ <a href="../graylog/" class="md-tabs__link">
228
+ Graylog
229
+ </a>
230
+ </li>
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+ <li class="md-tabs__item">
239
+ <a href="../wazuhmanager/" class="md-tabs__link">
240
+ Wazuh-Manager
241
+ </a>
242
+ </li>
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+ <li class="md-tabs__item">
251
+ <a href="../velociraptor/" class="md-tabs__link">
252
+ Velociraptor
253
+ </a>
254
+ </li>
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <li class="md-tabs__item">
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
+ </a>
266
+ </li>
267
+
268
+
269
+ </ul>
270
+ </div>
271
+</nav>
272
+
273
+
274
+
275
+ <main class="md-main" data-md-component="main">
276
+ <div class="md-main__inner md-grid">
277
+
278
+
279
+
280
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
281
+ <div class="md-sidebar__scrollwrap">
282
+ <div class="md-sidebar__inner">
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
291
+ <label class="md-nav__title" for="__drawer">
292
+ <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
293
+
294
+
295
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
296
+
297
+ </a>
298
+ SOCFortress CoPilot
299
+ </label>
300
+
301
+ <ul class="md-nav__list" data-md-scrollfix>
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+ <li class="md-nav__item">
311
+ <a href=".." class="md-nav__link">
312
+ Home
313
+ </a>
314
+ </li>
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+ <li class="md-nav__item">
326
+ <a href="../connectors/" class="md-nav__link">
327
+ Connectors
328
+ </a>
329
+ </li>
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+ <li class="md-nav__item">
341
+ <a href="../agents/" class="md-nav__link">
342
+ Agents
343
+ </a>
344
+ </li>
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+ <li class="md-nav__item">
356
+ <a href="../wazuhindexer/" class="md-nav__link">
357
+ Wazuh-Indexer
358
+ </a>
359
+ </li>
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+ <li class="md-nav__item md-nav__item--active">
373
+
374
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
375
+
376
+
377
+
378
+ <label class="md-nav__link md-nav__link--active" for="__toc">
379
+ Dfir-Iris
380
+ <span class="md-nav__icon md-icon"></span>
381
+ </label>
382
+
383
+ <a href="./" class="md-nav__link md-nav__link--active">
384
+ Dfir-Iris
385
+ </a>
386
+
387
+
388
+
389
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
390
+
391
+
392
+
393
+
394
+ <label class="md-nav__title" for="__toc">
395
+ <span class="md-nav__icon md-icon"></span>
396
+ Table of contents
397
+ </label>
398
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
399
+
400
+ <li class="md-nav__item">
401
+ <a href="#dfir-iris-overview" class="md-nav__link">
402
+ Dfir-Iris Overview
403
+ </a>
404
+
405
+ <nav class="md-nav" aria-label="Dfir-Iris Overview">
406
+ <ul class="md-nav__list">
407
+
408
+ <li class="md-nav__item">
409
+ <a href="#cases-model" class="md-nav__link">
410
+ Cases Model
411
+ </a>
412
+
413
+</li>
414
+
415
+ </ul>
416
+ </nav>
417
+
418
+</li>
419
+
420
+ <li class="md-nav__item">
421
+ <a href="#app.models.cases" class="md-nav__link">
422
+ app.models.cases
423
+ </a>
424
+
425
+</li>
426
+
427
+ <li class="md-nav__item">
428
+ <a href="#app.models.cases.Case" class="md-nav__link">
429
+ Case
430
+ </a>
431
+
432
+ <nav class="md-nav" aria-label="Case">
433
+ <ul class="md-nav__list">
434
+
435
+ <li class="md-nav__item">
436
+ <a href="#app.models.cases.Case.__init__" class="md-nav__link">
437
+ __init__()
438
+ </a>
439
+
440
+</li>
441
+
442
+ <li class="md-nav__item">
443
+ <a href="#app.models.cases.Case.__repr__" class="md-nav__link">
444
+ __repr__()
445
+ </a>
446
+
447
+</li>
448
+
449
+ </ul>
450
+ </nav>
451
+
452
+</li>
453
+
454
+ <li class="md-nav__item">
455
+ <a href="#app.models.cases.CaseSchema" class="md-nav__link">
456
+ CaseSchema
457
+ </a>
458
+
459
+ <nav class="md-nav" aria-label="CaseSchema">
460
+ <ul class="md-nav__list">
461
+
462
+ <li class="md-nav__item">
463
+ <a href="#app.models.cases.CaseSchema.Meta" class="md-nav__link">
464
+ Meta
465
+ </a>
466
+
467
+</li>
468
+
469
+ <li class="md-nav__item">
470
+ <a href="#cases-routes" class="md-nav__link">
471
+ Cases Routes
472
+ </a>
473
+
474
+</li>
475
+
476
+ </ul>
477
+ </nav>
478
+
479
+</li>
480
+
481
+ <li class="md-nav__item">
482
+ <a href="#app.routes.dfir_iris.get_cases" class="md-nav__link">
483
+ app.routes.dfir_iris.get_cases
484
+ </a>
485
+
486
+</li>
487
+
488
+ <li class="md-nav__item">
489
+ <a href="#app.routes.dfir_iris.get_case" class="md-nav__link">
490
+ app.routes.dfir_iris.get_case
491
+ </a>
492
+
493
+ <nav class="md-nav" aria-label="app.routes.dfir_iris.get_case">
494
+ <ul class="md-nav__list">
495
+
496
+ <li class="md-nav__item">
497
+ <a href="#notes-routes" class="md-nav__link">
498
+ Notes Routes
499
+ </a>
500
+
501
+</li>
502
+
503
+ </ul>
504
+ </nav>
505
+
506
+</li>
507
+
508
+ <li class="md-nav__item">
509
+ <a href="#app.routes.dfir_iris.get_case_notes" class="md-nav__link">
510
+ app.routes.dfir_iris.get_case_notes
511
+ </a>
512
+
513
+</li>
514
+
515
+ <li class="md-nav__item">
516
+ <a href="#app.routes.dfir_iris.create_case_note" class="md-nav__link">
517
+ app.routes.dfir_iris.create_case_note
518
+ </a>
519
+
520
+ <nav class="md-nav" aria-label="app.routes.dfir_iris.create_case_note">
521
+ <ul class="md-nav__list">
522
+
523
+ <li class="md-nav__item">
524
+ <a href="#assets-routes" class="md-nav__link">
525
+ Assets Routes
526
+ </a>
527
+
528
+</li>
529
+
530
+ </ul>
531
+ </nav>
532
+
533
+</li>
534
+
535
+ <li class="md-nav__item">
536
+ <a href="#app.routes.dfir_iris.get_case_assets" class="md-nav__link">
537
+ app.routes.dfir_iris.get_case_assets
538
+ </a>
539
+
540
+ <nav class="md-nav" aria-label="app.routes.dfir_iris.get_case_assets">
541
+ <ul class="md-nav__list">
542
+
543
+ <li class="md-nav__item">
544
+ <a href="#alerts-routes" class="md-nav__link">
545
+ Alerts Routes
546
+ </a>
547
+
548
+</li>
549
+
550
+ </ul>
551
+ </nav>
552
+
553
+</li>
554
+
555
+ <li class="md-nav__item">
556
+ <a href="#app.routes.dfir_iris.get_alerts" class="md-nav__link">
557
+ app.routes.dfir_iris.get_alerts
558
+ </a>
559
+
560
+ <nav class="md-nav" aria-label="app.routes.dfir_iris.get_alerts">
561
+ <ul class="md-nav__list">
562
+
563
+ <li class="md-nav__item">
564
+ <a href="#alerts-services" class="md-nav__link">
565
+ Alerts Services
566
+ </a>
567
+
568
+</li>
569
+
570
+ </ul>
571
+ </nav>
572
+
573
+</li>
574
+
575
+ <li class="md-nav__item">
576
+ <a href="#app.services.DFIR_IRIS.alerts" class="md-nav__link">
577
+ app.services.DFIR_IRIS.alerts
578
+ </a>
579
+
580
+</li>
581
+
582
+ <li class="md-nav__item">
583
+ <a href="#app.services.DFIR_IRIS.alerts.AlertsService" class="md-nav__link">
584
+ AlertsService
585
+ </a>
586
+
587
+ <nav class="md-nav" aria-label="AlertsService">
588
+ <ul class="md-nav__list">
589
+
590
+ <li class="md-nav__item">
591
+ <a href="#app.services.DFIR_IRIS.alerts.AlertsService.__init__" class="md-nav__link">
592
+ __init__()
593
+ </a>
594
+
595
+</li>
596
+
597
+ <li class="md-nav__item">
598
+ <a href="#app.services.DFIR_IRIS.alerts.AlertsService.list_alerts" class="md-nav__link">
599
+ list_alerts()
600
+ </a>
601
+
602
+</li>
603
+
604
+ <li class="md-nav__item">
605
+ <a href="#cases-services" class="md-nav__link">
606
+ Cases Services
607
+ </a>
608
+
609
+</li>
610
+
611
+ </ul>
612
+ </nav>
613
+
614
+</li>
615
+
616
+ <li class="md-nav__item">
617
+ <a href="#app.services.DFIR_IRIS.cases" class="md-nav__link">
618
+ app.services.DFIR_IRIS.cases
619
+ </a>
620
+
621
+</li>
622
+
623
+ <li class="md-nav__item">
624
+ <a href="#app.services.DFIR_IRIS.cases.CasesService" class="md-nav__link">
625
+ CasesService
626
+ </a>
627
+
628
+ <nav class="md-nav" aria-label="CasesService">
629
+ <ul class="md-nav__list">
630
+
631
+ <li class="md-nav__item">
632
+ <a href="#app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="md-nav__link">
633
+ check_case_id()
634
+ </a>
635
+
636
+</li>
637
+
638
+ <li class="md-nav__item">
639
+ <a href="#app.services.DFIR_IRIS.cases.CasesService.get_case" class="md-nav__link">
640
+ get_case()
641
+ </a>
642
+
643
+</li>
644
+
645
+ <li class="md-nav__item">
646
+ <a href="#app.services.DFIR_IRIS.cases.CasesService.list_cases" class="md-nav__link">
647
+ list_cases()
648
+ </a>
649
+
650
+</li>
651
+
652
+ <li class="md-nav__item">
653
+ <a href="#assets-services" class="md-nav__link">
654
+ Assets Services
655
+ </a>
656
+
657
+</li>
658
+
659
+ </ul>
660
+ </nav>
661
+
662
+</li>
663
+
664
+ <li class="md-nav__item">
665
+ <a href="#app.services.DFIR_IRIS.assets" class="md-nav__link">
666
+ app.services.DFIR_IRIS.assets
667
+ </a>
668
+
669
+</li>
670
+
671
+ <li class="md-nav__item">
672
+ <a href="#app.services.DFIR_IRIS.assets.AssetsService" class="md-nav__link">
673
+ AssetsService
674
+ </a>
675
+
676
+ <nav class="md-nav" aria-label="AssetsService">
677
+ <ul class="md-nav__list">
678
+
679
+ <li class="md-nav__item">
680
+ <a href="#app.services.DFIR_IRIS.assets.AssetsService.__init__" class="md-nav__link">
681
+ __init__()
682
+ </a>
683
+
684
+</li>
685
+
686
+ <li class="md-nav__item">
687
+ <a href="#app.services.DFIR_IRIS.assets.AssetsService.get_case_assets" class="md-nav__link">
688
+ get_case_assets()
689
+ </a>
690
+
691
+</li>
692
+
693
+ <li class="md-nav__item">
694
+ <a href="#notes-services" class="md-nav__link">
695
+ Notes Services
696
+ </a>
697
+
698
+</li>
699
+
700
+ </ul>
701
+ </nav>
702
+
703
+</li>
704
+
705
+ <li class="md-nav__item">
706
+ <a href="#app.services.DFIR_IRIS.notes" class="md-nav__link">
707
+ app.services.DFIR_IRIS.notes
708
+ </a>
709
+
710
+</li>
711
+
712
+ <li class="md-nav__item">
713
+ <a href="#app.services.DFIR_IRIS.notes.NotesService" class="md-nav__link">
714
+ NotesService
715
+ </a>
716
+
717
+ <nav class="md-nav" aria-label="NotesService">
718
+ <ul class="md-nav__list">
719
+
720
+ <li class="md-nav__item">
721
+ <a href="#app.services.DFIR_IRIS.notes.NotesService.__init__" class="md-nav__link">
722
+ __init__()
723
+ </a>
724
+
725
+</li>
726
+
727
+ <li class="md-nav__item">
728
+ <a href="#app.services.DFIR_IRIS.notes.NotesService.create_case_note" class="md-nav__link">
729
+ create_case_note()
730
+ </a>
731
+
732
+</li>
733
+
734
+ <li class="md-nav__item">
735
+ <a href="#app.services.DFIR_IRIS.notes.NotesService.get_case_notes" class="md-nav__link">
736
+ get_case_notes()
737
+ </a>
738
+
739
+</li>
740
+
741
+ <li class="md-nav__item">
742
+ <a href="#universal-services" class="md-nav__link">
743
+ Universal Services
744
+ </a>
745
+
746
+</li>
747
+
748
+ </ul>
749
+ </nav>
750
+
751
+</li>
752
+
753
+ <li class="md-nav__item">
754
+ <a href="#app.services.DFIR_IRIS.universal" class="md-nav__link">
755
+ app.services.DFIR_IRIS.universal
756
+ </a>
757
+
758
+</li>
759
+
760
+ <li class="md-nav__item">
761
+ <a href="#app.services.DFIR_IRIS.universal.UniversalService" class="md-nav__link">
762
+ UniversalService
763
+ </a>
764
+
765
+ <nav class="md-nav" aria-label="UniversalService">
766
+ <ul class="md-nav__list">
767
+
768
+ <li class="md-nav__item">
769
+ <a href="#app.services.DFIR_IRIS.universal.UniversalService.__init__" class="md-nav__link">
770
+ __init__()
771
+ </a>
772
+
773
+</li>
774
+
775
+ <li class="md-nav__item">
776
+ <a href="#app.services.DFIR_IRIS.universal.UniversalService.collect_iris_details" class="md-nav__link">
777
+ collect_iris_details()
778
+ </a>
779
+
780
+</li>
781
+
782
+ <li class="md-nav__item">
783
+ <a href="#app.services.DFIR_IRIS.universal.UniversalService.create_session" class="md-nav__link">
784
+ create_session()
785
+ </a>
786
+
787
+</li>
788
+
789
+ <li class="md-nav__item">
790
+ <a href="#app.services.DFIR_IRIS.universal.UniversalService.fetch_and_parse_data" class="md-nav__link">
791
+ fetch_and_parse_data()
792
+ </a>
793
+
794
+</li>
795
+
796
+ </ul>
797
+ </nav>
798
+
799
+</li>
800
+
801
+ </ul>
802
+
803
+</nav>
804
+
805
+ </li>
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+ <li class="md-nav__item">
817
+ <a href="../graylog/" class="md-nav__link">
818
+ Graylog
819
+ </a>
820
+ </li>
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+ <li class="md-nav__item">
832
+ <a href="../wazuhmanager/" class="md-nav__link">
833
+ Wazuh-Manager
834
+ </a>
835
+ </li>
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+ <li class="md-nav__item">
847
+ <a href="../velociraptor/" class="md-nav__link">
848
+ Velociraptor
849
+ </a>
850
+ </li>
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+ <li class="md-nav__item">
862
+ <a href="../shuffle/" class="md-nav__link">
863
+ Shuffle
864
+ </a>
865
+ </li>
866
+
867
+
868
+
869
+ </ul>
870
+</nav>
871
+ </div>
872
+ </div>
873
+ </div>
874
+
875
+
876
+
877
+
878
+ <div class="md-content" data-md-component="content">
879
+ <article class="md-content__inner md-typeset">
880
+
881
+
882
+
883
+
884
+ <h1>Dfir-Iris</h1>
885
+
886
+<h2 id="dfir-iris-overview">Dfir-Iris Overview</h2>
887
+<h3 id="cases-model"><span style="color:blue">Cases Model</span></h3>
888
+
889
+
890
+<div class="doc doc-object doc-module">
891
+
892
+
893
+<a id="app.models.cases"></a>
894
+ <div class="doc doc-contents first">
895
+
896
+
897
+
898
+ <div class="doc doc-children">
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+<div class="doc doc-object doc-class">
908
+
909
+
910
+
911
+<h2 id="app.models.cases.Case" class="doc doc-heading">
912
+ <code>Case</code>
913
+
914
+
915
+</h2>
916
+
917
+
918
+ <div class="doc doc-contents ">
919
+ <p class="doc doc-class-bases">
920
+ Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
921
+
922
+
923
+ <p>Class for cases which stores the case ID, case name, and a list of agents.
924
+This class inherits from SQLAlchemy's Model class.</p>
925
+
926
+
927
+ <details class="quote">
928
+ <summary>Source code in <code>app\models\cases.py</code></summary>
929
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10">10</a></span>
930
+<span class="normal"><a href="#__codelineno-0-11">11</a></span>
931
+<span class="normal"><a href="#__codelineno-0-12">12</a></span>
932
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
933
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
934
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
935
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
936
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
937
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
938
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
939
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
940
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
941
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
942
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
943
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
944
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
945
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
946
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
947
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
948
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
949
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
950
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
951
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
952
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
953
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
954
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
955
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
956
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
957
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
958
+<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
959
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
960
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Class for cases which stores the case ID, case name, and a list of agents.</span>
961
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> This class inherits from SQLAlchemy's Model class.</span>
962
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> """</span>
963
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
964
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
965
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="n">case_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
966
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">case_name</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
967
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="n">agents</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
968
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
969
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
970
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">"""</span>
971
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
972
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
973
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
974
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
975
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
976
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
977
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
978
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
979
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
980
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
981
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
982
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">"""</span>
983
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
984
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
985
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
986
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> """</span>
987
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">>"</span>
988
+</code></pre></div></td></tr></table></div>
989
+ </details>
990
+
991
+
992
+
993
+ <div class="doc doc-children">
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+<div class="doc doc-object doc-function">
1004
+
1005
+
1006
+
1007
+<h3 id="app.models.cases.Case.__init__" class="doc doc-heading">
1008
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">case_id</span><span class="p">,</span> <span class="n">case_name</span><span class="p">,</span> <span class="n">agents</span><span class="p">)</span></code>
1009
+
1010
+</h3>
1011
+
1012
+
1013
+ <div class="doc doc-contents ">
1014
+
1015
+ <p>Initialize a new instance of the Case class.</p>
1016
+<p>:param case_id: The ID of the case.
1017
+:param case_name: The name of the case.
1018
+:param agents: A comma-separated string of agents associated with the case.</p>
1019
+
1020
+ <details class="quote">
1021
+ <summary>Source code in <code>app\models\cases.py</code></summary>
1022
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-21">21</a></span>
1023
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1024
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1025
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1026
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1027
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1028
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1029
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1030
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1031
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1032
+<span class="normal"><a href="#__codelineno-0-31">31</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">case_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agents</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1033
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">"""</span>
1034
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initialize a new instance of the Case class.</span>
1035
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
1036
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :param case_id: The ID of the case.</span>
1037
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> :param case_name: The name of the case.</span>
1038
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> :param agents: A comma-separated string of agents associated with the case.</span>
1039
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
1040
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_id</span> <span class="o">=</span> <span class="n">case_id</span>
1041
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">case_name</span> <span class="o">=</span> <span class="n">case_name</span>
1042
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agents</span> <span class="o">=</span> <span class="n">agents</span>
1043
+</code></pre></div></td></tr></table></div>
1044
+ </details>
1045
+ </div>
1046
+
1047
+</div>
1048
+
1049
+<div class="doc doc-object doc-function">
1050
+
1051
+
1052
+
1053
+<h3 id="app.models.cases.Case.__repr__" class="doc doc-heading">
1054
+<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
1055
+
1056
+</h3>
1057
+
1058
+
1059
+ <div class="doc doc-contents ">
1060
+
1061
+ <p>Returns a string representation of the Case instance.</p>
1062
+<p>:return: A string representation of the case ID.</p>
1063
+
1064
+ <details class="quote">
1065
+ <summary>Source code in <code>app\models\cases.py</code></summary>
1066
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
1067
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1068
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1069
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1070
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1071
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1072
+<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
1073
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">"""</span>
1074
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns a string representation of the Case instance.</span>
1075
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
1076
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> :return: A string representation of the case ID.</span>
1077
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> """</span>
1078
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<Case </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">case_id</span><span class="si">}</span><span class="s2">>"</span>
1079
+</code></pre></div></td></tr></table></div>
1080
+ </details>
1081
+ </div>
1082
+
1083
+</div>
1084
+
1085
+
1086
+
1087
+ </div>
1088
+
1089
+ </div>
1090
+
1091
+</div>
1092
+
1093
+<div class="doc doc-object doc-class">
1094
+
1095
+
1096
+
1097
+<h2 id="app.models.cases.CaseSchema" class="doc doc-heading">
1098
+ <code>CaseSchema</code>
1099
+
1100
+
1101
+</h2>
1102
+
1103
+
1104
+ <div class="doc doc-contents ">
1105
+ <p class="doc doc-class-bases">
1106
+ Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
1107
+
1108
+
1109
+ <p>Schema for serializing and deserializing instances of the Case class.</p>
1110
+
1111
+
1112
+ <details class="quote">
1113
+ <summary>Source code in <code>app\models\cases.py</code></summary>
1114
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-42">42</a></span>
1115
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1116
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1117
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1118
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1119
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1120
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1121
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1122
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1123
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1124
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1125
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1126
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1127
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1128
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1129
+<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">class</span> <span class="nc">CaseSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
1130
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">"""</span>
1131
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Schema for serializing and deserializing instances of the Case class.</span>
1132
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> """</span>
1133
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1134
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1135
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">"""</span>
1136
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1137
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
1138
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
1139
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1140
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">"id"</span><span class="p">,</span>
1141
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">"case_id"</span><span class="p">,</span>
1142
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">"case_name"</span><span class="p">,</span>
1143
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"agents"</span><span class="p">,</span>
1144
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
1145
+</code></pre></div></td></tr></table></div>
1146
+ </details>
1147
+
1148
+
1149
+
1150
+ <div class="doc doc-children">
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+<div class="doc doc-object doc-class">
1160
+
1161
+
1162
+
1163
+<h3 id="app.models.cases.CaseSchema.Meta" class="doc doc-heading">
1164
+ <code>Meta</code>
1165
+
1166
+
1167
+</h3>
1168
+
1169
+
1170
+ <div class="doc doc-contents ">
1171
+
1172
+
1173
+ <p>Meta class defines the fields to be serialized/deserialized.</p>
1174
+
1175
+
1176
+ <details class="quote">
1177
+ <summary>Source code in <code>app\models\cases.py</code></summary>
1178
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-47">47</a></span>
1179
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1180
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1181
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1182
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1183
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1184
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1185
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1186
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1187
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1188
+<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1189
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">"""</span>
1190
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1191
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
1192
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
1193
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1194
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">"id"</span><span class="p">,</span>
1195
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">"case_id"</span><span class="p">,</span>
1196
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="s2">"case_name"</span><span class="p">,</span>
1197
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"agents"</span><span class="p">,</span>
1198
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="p">)</span>
1199
+</code></pre></div></td></tr></table></div>
1200
+ </details>
1201
+
1202
+
1203
+
1204
+ <div class="doc doc-children">
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+ </div>
1217
+
1218
+ </div>
1219
+
1220
+</div>
1221
+
1222
+
1223
+
1224
+
1225
+ </div>
1226
+
1227
+ </div>
1228
+
1229
+</div>
1230
+
1231
+
1232
+
1233
+
1234
+ </div>
1235
+
1236
+ </div>
1237
+
1238
+</div><p><br></p>
1239
+<h3 id="cases-routes"><span style="color:green">Cases Routes</span></h3>
1240
+
1241
+
1242
+<div class="doc doc-object doc-function">
1243
+
1244
+
1245
+<a id="app.routes.dfir_iris.get_cases"></a>
1246
+ <div class="doc doc-contents first">
1247
+
1248
+ <p>Handle GET requests at the "/cases" endpoint. Retrieve all cases from DFIR IRIS.</p>
1249
+
1250
+ <p><strong>Returns:</strong></p>
1251
+ <table>
1252
+ <thead>
1253
+ <tr>
1254
+<th>Name</th> <th>Type</th>
1255
+ <th>Description</th>
1256
+ </tr>
1257
+ </thead>
1258
+ <tbody>
1259
+ <tr>
1260
+<td><code>Response</code></td> <td>
1261
+ </td>
1262
+ <td>
1263
+ <div class="doc-md-description">
1264
+ <p>A Flask Response object carrying a JSON representation of the list of cases.</p>
1265
+ </div>
1266
+ </td>
1267
+ </tr>
1268
+ </tbody>
1269
+ </table>
1270
+
1271
+ <details class="quote">
1272
+ <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1273
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-12">12</a></span>
1274
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1275
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1276
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1277
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1278
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1279
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1280
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1281
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1282
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1283
+<span class="normal"><a href="#__codelineno-0-22">22</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1284
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">def</span> <span class="nf">get_cases</span><span class="p">():</span>
1285
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">"""</span>
1286
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Handle GET requests at the "/cases" endpoint. Retrieve all cases from DFIR IRIS.</span>
1287
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
1288
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Returns:</span>
1289
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of cases.</span>
1290
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> """</span>
1291
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1292
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">cases</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_cases</span><span class="p">()</span>
1293
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">cases</span>
1294
+</code></pre></div></td></tr></table></div>
1295
+ </details>
1296
+ </div>
1297
+
1298
+</div>
1299
+
1300
+<div class="doc doc-object doc-function">
1301
+
1302
+
1303
+<a id="app.routes.dfir_iris.get_case"></a>
1304
+ <div class="doc doc-contents first">
1305
+
1306
+ <p>Handle GET requests at the "/cases/<case_id>" endpoint. Retrieve a specific case from DFIR IRIS.</p>
1307
+
1308
+ <p><strong>Parameters:</strong></p>
1309
+ <table>
1310
+ <thead>
1311
+ <tr>
1312
+ <th>Name</th>
1313
+ <th>Type</th>
1314
+ <th>Description</th>
1315
+ <th>Default</th>
1316
+ </tr>
1317
+ </thead>
1318
+ <tbody>
1319
+ <tr>
1320
+ <td><code>case_id</code></td>
1321
+ <td>
1322
+ <code>str</code>
1323
+ </td>
1324
+ <td>
1325
+ <div class="doc-md-description">
1326
+ <p>The ID of the case to retrieve.</p>
1327
+ </div>
1328
+ </td>
1329
+ <td>
1330
+ <em>required</em>
1331
+ </td>
1332
+ </tr>
1333
+ </tbody>
1334
+ </table>
1335
+
1336
+ <p><strong>Returns:</strong></p>
1337
+ <table>
1338
+ <thead>
1339
+ <tr>
1340
+<th>Name</th> <th>Type</th>
1341
+ <th>Description</th>
1342
+ </tr>
1343
+ </thead>
1344
+ <tbody>
1345
+ <tr>
1346
+<td><code>Response</code></td> <td>
1347
+ </td>
1348
+ <td>
1349
+ <div class="doc-md-description">
1350
+ <p>A Flask Response object carrying a JSON representation of the case data.</p>
1351
+ </div>
1352
+ </td>
1353
+ </tr>
1354
+ </tbody>
1355
+ </table>
1356
+
1357
+ <details class="quote">
1358
+ <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1359
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1360
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1361
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1362
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1363
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1364
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1365
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1366
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1367
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1368
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1369
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1370
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1371
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1372
+<span class="normal"><a href="#__codelineno-0-38">38</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1373
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1374
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">"""</span>
1375
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Handle GET requests at the "/cases/<case_id>" endpoint. Retrieve a specific case from DFIR IRIS.</span>
1376
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
1377
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
1378
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> case_id (str): The ID of the case to retrieve.</span>
1379
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1380
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1381
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the case data.</span>
1382
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
1383
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1384
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1385
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">return</span> <span class="n">case</span>
1386
+</code></pre></div></td></tr></table></div>
1387
+ </details>
1388
+ </div>
1389
+
1390
+</div><p><br></p>
1391
+<h3 id="notes-routes"><span style="color:green">Notes Routes</span></h3>
1392
+
1393
+
1394
+<div class="doc doc-object doc-function">
1395
+
1396
+
1397
+<a id="app.routes.dfir_iris.get_case_notes"></a>
1398
+ <div class="doc doc-contents first">
1399
+
1400
+ <p>Handle GET requests at the "/cases/<case_id>/notes" endpoint. Retrieve notes of a specific case from DFIR IRIS.</p>
1401
+
1402
+ <p><strong>Parameters:</strong></p>
1403
+ <table>
1404
+ <thead>
1405
+ <tr>
1406
+ <th>Name</th>
1407
+ <th>Type</th>
1408
+ <th>Description</th>
1409
+ <th>Default</th>
1410
+ </tr>
1411
+ </thead>
1412
+ <tbody>
1413
+ <tr>
1414
+ <td><code>case_id</code></td>
1415
+ <td>
1416
+ <code>str</code>
1417
+ </td>
1418
+ <td>
1419
+ <div class="doc-md-description">
1420
+ <p>The ID of the case to retrieve notes from.</p>
1421
+ </div>
1422
+ </td>
1423
+ <td>
1424
+ <em>required</em>
1425
+ </td>
1426
+ </tr>
1427
+ </tbody>
1428
+ </table>
1429
+
1430
+ <p><strong>Returns:</strong></p>
1431
+ <table>
1432
+ <thead>
1433
+ <tr>
1434
+<th>Name</th> <th>Type</th>
1435
+ <th>Description</th>
1436
+ </tr>
1437
+ </thead>
1438
+ <tbody>
1439
+ <tr>
1440
+<td><code>Response</code></td> <td>
1441
+ </td>
1442
+ <td>
1443
+ <div class="doc-md-description">
1444
+ <p>A Flask Response object carrying a JSON representation of the list of notes for the case.</p>
1445
+ </div>
1446
+ </td>
1447
+ </tr>
1448
+ </tbody>
1449
+ </table>
1450
+
1451
+ <details class="quote">
1452
+ <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1453
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-41">41</a></span>
1454
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1455
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1456
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1457
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1458
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1459
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1460
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1461
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1462
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1463
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1464
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1465
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1466
+<span class="normal"><a href="#__codelineno-0-54">54</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>/notes"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1467
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
1468
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">"""</span>
1469
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Handle GET requests at the "/cases/<case_id>/notes" endpoint. Retrieve notes of a specific case from DFIR IRIS.</span>
1470
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1471
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
1472
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> case_id (str): The ID of the case to retrieve notes from.</span>
1473
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1474
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1475
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of notes for the case.</span>
1476
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> """</span>
1477
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1478
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">notes</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">get_case_notes</span><span class="p">(</span><span class="n">search_term</span><span class="o">=</span><span class="s2">"%"</span><span class="p">,</span> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1479
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="n">notes</span>
1480
+</code></pre></div></td></tr></table></div>
1481
+ </details>
1482
+ </div>
1483
+
1484
+</div>
1485
+
1486
+<div class="doc doc-object doc-function">
1487
+
1488
+
1489
+<a id="app.routes.dfir_iris.create_case_note"></a>
1490
+ <div class="doc doc-contents first">
1491
+
1492
+ <p>Handle POST requests at the "/cases/<case_id>/note" endpoint. Create a note for a specific case in DFIR IRIS.</p>
1493
+
1494
+ <p><strong>Parameters:</strong></p>
1495
+ <table>
1496
+ <thead>
1497
+ <tr>
1498
+ <th>Name</th>
1499
+ <th>Type</th>
1500
+ <th>Description</th>
1501
+ <th>Default</th>
1502
+ </tr>
1503
+ </thead>
1504
+ <tbody>
1505
+ <tr>
1506
+ <td><code>case_id</code></td>
1507
+ <td>
1508
+ <code>str</code>
1509
+ </td>
1510
+ <td>
1511
+ <div class="doc-md-description">
1512
+ <p>The ID of the case to create a note for.</p>
1513
+ </div>
1514
+ </td>
1515
+ <td>
1516
+ <em>required</em>
1517
+ </td>
1518
+ </tr>
1519
+ </tbody>
1520
+ </table>
1521
+
1522
+ <p><strong>Returns:</strong></p>
1523
+ <table>
1524
+ <thead>
1525
+ <tr>
1526
+<th>Name</th> <th>Type</th>
1527
+ <th>Description</th>
1528
+ </tr>
1529
+ </thead>
1530
+ <tbody>
1531
+ <tr>
1532
+<td><code>Response</code></td> <td>
1533
+ </td>
1534
+ <td>
1535
+ <div class="doc-md-description">
1536
+ <p>A Flask Response object carrying a JSON representation of the result of the note creation operation.</p>
1537
+ </div>
1538
+ </td>
1539
+ </tr>
1540
+ </tbody>
1541
+ </table>
1542
+
1543
+ <details class="quote">
1544
+ <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1545
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-57">57</a></span>
1546
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1547
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1548
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1549
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1550
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1551
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1552
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1553
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1554
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1555
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1556
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1557
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1558
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1559
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1560
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1561
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1562
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1563
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1564
+<span class="normal"><a href="#__codelineno-0-76">76</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>/note"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"POST"</span><span class="p">])</span>
1565
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1566
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
1567
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Handle POST requests at the "/cases/<case_id>/note" endpoint. Create a note for a specific case in DFIR IRIS.</span>
1568
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1569
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Args:</span>
1570
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> case_id (str): The ID of the case to create a note for.</span>
1571
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1572
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1573
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the result of the note creation operation.</span>
1574
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
1575
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">note_title</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">"note_title"</span><span class="p">]</span>
1576
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">note_content</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">[</span><span class="s2">"note_content"</span><span class="p">]</span>
1577
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1578
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">created_note</span> <span class="o">=</span> <span class="n">notes_service</span><span class="o">.</span><span class="n">create_case_note</span><span class="p">(</span>
1579
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">,</span>
1580
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">note_title</span><span class="o">=</span><span class="n">note_title</span><span class="p">,</span>
1581
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">note_content</span><span class="o">=</span><span class="n">note_content</span><span class="p">,</span>
1582
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">)</span>
1583
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="n">created_note</span>
1584
+</code></pre></div></td></tr></table></div>
1585
+ </details>
1586
+ </div>
1587
+
1588
+</div><p><br></p>
1589
+<h3 id="assets-routes"><span style="color:green">Assets Routes</span></h3>
1590
+
1591
+
1592
+<div class="doc doc-object doc-function">
1593
+
1594
+
1595
+<a id="app.routes.dfir_iris.get_case_assets"></a>
1596
+ <div class="doc doc-contents first">
1597
+
1598
+ <p>Handle GET requests at the "/cases/<case_id>/assets" endpoint. Retrieve assets of a specific case from DFIR IRIS.</p>
1599
+
1600
+ <p><strong>Parameters:</strong></p>
1601
+ <table>
1602
+ <thead>
1603
+ <tr>
1604
+ <th>Name</th>
1605
+ <th>Type</th>
1606
+ <th>Description</th>
1607
+ <th>Default</th>
1608
+ </tr>
1609
+ </thead>
1610
+ <tbody>
1611
+ <tr>
1612
+ <td><code>case_id</code></td>
1613
+ <td>
1614
+ <code>str</code>
1615
+ </td>
1616
+ <td>
1617
+ <div class="doc-md-description">
1618
+ <p>The ID of the case to retrieve assets from.</p>
1619
+ </div>
1620
+ </td>
1621
+ <td>
1622
+ <em>required</em>
1623
+ </td>
1624
+ </tr>
1625
+ </tbody>
1626
+ </table>
1627
+
1628
+ <p><strong>Returns:</strong></p>
1629
+ <table>
1630
+ <thead>
1631
+ <tr>
1632
+<th>Name</th> <th>Type</th>
1633
+ <th>Description</th>
1634
+ </tr>
1635
+ </thead>
1636
+ <tbody>
1637
+ <tr>
1638
+<td><code>Response</code></td> <td>
1639
+ </td>
1640
+ <td>
1641
+ <div class="doc-md-description">
1642
+ <p>A Flask Response object carrying a JSON representation of the list of assets for the case.</p>
1643
+ </div>
1644
+ </td>
1645
+ </tr>
1646
+ </tbody>
1647
+ </table>
1648
+
1649
+ <details class="quote">
1650
+ <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1651
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-79">79</a></span>
1652
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1653
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1654
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1655
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1656
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1657
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1658
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1659
+<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1660
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1661
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1662
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1663
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1664
+<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/cases/<case_id>/assets"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1665
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="n">case_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1666
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="w"> </span><span class="sd">"""</span>
1667
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> Handle GET requests at the "/cases/<case_id>/assets" endpoint. Retrieve assets of a specific case from DFIR IRIS.</span>
1668
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1669
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Args:</span>
1670
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> case_id (str): The ID of the case to retrieve assets from.</span>
1671
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
1672
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
1673
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of assets for the case.</span>
1674
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> """</span>
1675
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">asset_service</span> <span class="o">=</span> <span class="n">AssetsService</span><span class="p">()</span>
1676
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">assets</span> <span class="o">=</span> <span class="n">asset_service</span><span class="o">.</span><span class="n">get_case_assets</span><span class="p">(</span><span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1677
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="n">assets</span>
1678
+</code></pre></div></td></tr></table></div>
1679
+ </details>
1680
+ </div>
1681
+
1682
+</div><p><br></p>
1683
+<h3 id="alerts-routes"><span style="color:green">Alerts Routes</span></h3>
1684
+
1685
+
1686
+<div class="doc doc-object doc-function">
1687
+
1688
+
1689
+<a id="app.routes.dfir_iris.get_alerts"></a>
1690
+ <div class="doc doc-contents first">
1691
+
1692
+ <p>Handle GET requests at the "/alerts" endpoint. Retrieve all alerts from DFIR IRIS.</p>
1693
+
1694
+ <p><strong>Returns:</strong></p>
1695
+ <table>
1696
+ <thead>
1697
+ <tr>
1698
+<th>Name</th> <th>Type</th>
1699
+ <th>Description</th>
1700
+ </tr>
1701
+ </thead>
1702
+ <tbody>
1703
+ <tr>
1704
+<td><code>Response</code></td> <td>
1705
+ </td>
1706
+ <td>
1707
+ <div class="doc-md-description">
1708
+ <p>A Flask Response object carrying a JSON representation of the list of alerts.</p>
1709
+ </div>
1710
+ </td>
1711
+ </tr>
1712
+ </tbody>
1713
+ </table>
1714
+
1715
+ <details class="quote">
1716
+ <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1717
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1718
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1719
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1720
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1721
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1722
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1723
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1724
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1725
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1726
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1727
+<span class="normal"><a href="#__codelineno-0-105">105</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/dfir_iris/alerts"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1728
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">():</span>
1729
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="w"> </span><span class="sd">"""</span>
1730
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Handle GET requests at the "/alerts" endpoint. Retrieve all alerts from DFIR IRIS.</span>
1731
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1732
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Returns:</span>
1733
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Response: A Flask Response object carrying a JSON representation of the list of alerts.</span>
1734
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> """</span>
1735
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
1736
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">list_alerts</span><span class="p">()</span>
1737
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">alerts</span>
1738
+</code></pre></div></td></tr></table></div>
1739
+ </details>
1740
+ </div>
1741
+
1742
+</div><p><br></p>
1743
+<h3 id="alerts-services"><span style="color:red">Alerts Services</span></h3>
1744
+
1745
+
1746
+<div class="doc doc-object doc-module">
1747
+
1748
+
1749
+<a id="app.services.DFIR_IRIS.alerts"></a>
1750
+ <div class="doc doc-contents first">
1751
+
1752
+
1753
+
1754
+ <div class="doc doc-children">
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+<div class="doc doc-object doc-class">
1764
+
1765
+
1766
+
1767
+<h2 id="app.services.DFIR_IRIS.alerts.AlertsService" class="doc doc-heading">
1768
+ <code>AlertsService</code>
1769
+
1770
+
1771
+</h2>
1772
+
1773
+
1774
+ <div class="doc doc-contents ">
1775
+
1776
+
1777
+ <p>A service class that encapsulates the logic for pulling alerts from DFIR-IRIS. It creates a DFIR-IRIS session upon
1778
+initialization and uses it to fetch alerts.</p>
1779
+
1780
+
1781
+ <details class="quote">
1782
+ <summary>Source code in <code>app\services\DFIR_IRIS\alerts.py</code></summary>
1783
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
1784
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1785
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1786
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1787
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1788
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1789
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1790
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1791
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1792
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1793
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1794
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1795
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1796
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1797
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1798
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1799
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1800
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1801
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1802
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1803
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1804
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1805
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1806
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1807
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1808
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1809
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1810
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1811
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1812
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1813
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1814
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1815
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1816
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1817
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1818
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1819
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1820
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1821
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1822
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1823
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1824
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1825
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1826
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1827
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1828
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1829
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1830
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1831
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1832
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1833
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1834
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1835
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1836
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1837
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1838
+<span class="normal"><a href="#__codelineno-0-68">68</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
1839
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">"""</span>
1840
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from DFIR-IRIS. It creates a DFIR-IRIS session upon</span>
1841
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> initialization and uses it to fetch alerts.</span>
1842
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> """</span>
1843
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1844
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1845
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">"""</span>
1846
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Initializes the AlertsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.</span>
1847
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
1848
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> """</span>
1849
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
1850
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
1851
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a>
1852
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1853
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
1854
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
1855
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">else</span><span class="p">:</span>
1856
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
1857
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1858
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="nf">list_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1859
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">"""</span>
1860
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> List all alerts from DFIR-IRIS. If the iris_session attribute is None, this indicates that the session creation</span>
1861
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise, it attempts to fetch and</span>
1862
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> parse the alerts data.</span>
1863
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
1864
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Returns:</span>
1865
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched alerts. The</span>
1866
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
1867
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> providing details about the operation. The "results" key, included when "success" is True, contains the</span>
1868
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> fetched alerts data.</span>
1869
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> """</span>
1870
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1871
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="p">{</span>
1872
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1873
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
1874
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="p">}</span>
1875
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
1876
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting cases from DFIR-IRIS"</span><span class="p">)</span>
1877
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">alert</span> <span class="o">=</span> <span class="n">Alert</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
1878
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
1879
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
1880
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">alert</span><span class="o">.</span><span class="n">filter_alerts</span><span class="p">,</span>
1881
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="p">)</span>
1882
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1883
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1884
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="p">{</span>
1885
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1886
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cases from DFIR-IRIS"</span><span class="p">,</span>
1887
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">}</span>
1888
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1889
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
1890
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1891
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cases from DFIR-IRIS"</span><span class="p">,</span>
1892
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">"results"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
1893
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
1894
+</code></pre></div></td></tr></table></div>
1895
+ </details>
1896
+
1897
+
1898
+
1899
+ <div class="doc doc-children">
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+<div class="doc doc-object doc-function">
1910
+
1911
+
1912
+
1913
+<h3 id="app.services.DFIR_IRIS.alerts.AlertsService.__init__" class="doc doc-heading">
1914
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
1915
+
1916
+</h3>
1917
+
1918
+
1919
+ <div class="doc doc-contents ">
1920
+
1921
+ <p>Initializes the AlertsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.
1922
+If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</p>
1923
+
1924
+ <details class="quote">
1925
+ <summary>Source code in <code>app\services\DFIR_IRIS\alerts.py</code></summary>
1926
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-19">19</a></span>
1927
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1928
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1929
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1930
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1931
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1932
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1933
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1934
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1935
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1936
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1937
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1938
+<span class="normal"><a href="#__codelineno-0-31">31</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1939
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="w"> </span><span class="sd">"""</span>
1940
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Initializes the AlertsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.</span>
1941
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
1942
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> """</span>
1943
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
1944
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
1945
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a>
1946
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1947
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
1948
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
1949
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">else</span><span class="p">:</span>
1950
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
1951
+</code></pre></div></td></tr></table></div>
1952
+ </details>
1953
+ </div>
1954
+
1955
+</div>
1956
+
1957
+<div class="doc doc-object doc-function">
1958
+
1959
+
1960
+
1961
+<h3 id="app.services.DFIR_IRIS.alerts.AlertsService.list_alerts" class="doc doc-heading">
1962
+<code class="highlight language-python"><span class="n">list_alerts</span><span class="p">()</span></code>
1963
+
1964
+</h3>
1965
+
1966
+
1967
+ <div class="doc doc-contents ">
1968
+
1969
+ <p>List all alerts from DFIR-IRIS. If the iris_session attribute is None, this indicates that the session creation
1970
+was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise, it attempts to fetch and
1971
+parse the alerts data.</p>
1972
+
1973
+ <p><strong>Returns:</strong></p>
1974
+ <table>
1975
+ <thead>
1976
+ <tr>
1977
+<th>Name</th> <th>Type</th>
1978
+ <th>Description</th>
1979
+ </tr>
1980
+ </thead>
1981
+ <tbody>
1982
+ <tr>
1983
+<td><code>dict</code></td> <td>
1984
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
1985
+ </td>
1986
+ <td>
1987
+ <div class="doc-md-description">
1988
+ <p>A dictionary containing the success status, a message, and potentially the fetched alerts. The</p>
1989
+ </div>
1990
+ </td>
1991
+ </tr>
1992
+ <tr>
1993
+<td></td> <td>
1994
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
1995
+ </td>
1996
+ <td>
1997
+ <div class="doc-md-description">
1998
+ <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
1999
+ </div>
2000
+ </td>
2001
+ </tr>
2002
+ <tr>
2003
+<td></td> <td>
2004
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2005
+ </td>
2006
+ <td>
2007
+ <div class="doc-md-description">
2008
+ <p>providing details about the operation. The "results" key, included when "success" is True, contains the</p>
2009
+ </div>
2010
+ </td>
2011
+ </tr>
2012
+ <tr>
2013
+<td></td> <td>
2014
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2015
+ </td>
2016
+ <td>
2017
+ <div class="doc-md-description">
2018
+ <p>fetched alerts data.</p>
2019
+ </div>
2020
+ </td>
2021
+ </tr>
2022
+ </tbody>
2023
+ </table>
2024
+
2025
+ <details class="quote">
2026
+ <summary>Source code in <code>app\services\DFIR_IRIS\alerts.py</code></summary>
2027
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-33">33</a></span>
2028
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2029
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2030
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2031
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2032
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2033
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2034
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2035
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2036
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2037
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2038
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2039
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2040
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2041
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2042
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2043
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2044
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2045
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2046
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2047
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2048
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2049
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2050
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2051
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2052
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2053
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2054
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2055
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2056
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2057
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2058
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2059
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2060
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2061
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2062
+<span class="normal"><a href="#__codelineno-0-68">68</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="nf">list_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2063
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">"""</span>
2064
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> List all alerts from DFIR-IRIS. If the iris_session attribute is None, this indicates that the session creation</span>
2065
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise, it attempts to fetch and</span>
2066
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> parse the alerts data.</span>
2067
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
2068
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Returns:</span>
2069
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched alerts. The</span>
2070
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
2071
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> providing details about the operation. The "results" key, included when "success" is True, contains the</span>
2072
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> fetched alerts data.</span>
2073
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> """</span>
2074
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2075
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="p">{</span>
2076
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2077
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2078
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="p">}</span>
2079
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
2080
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting cases from DFIR-IRIS"</span><span class="p">)</span>
2081
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">alert</span> <span class="o">=</span> <span class="n">Alert</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2082
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2083
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2084
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">alert</span><span class="o">.</span><span class="n">filter_alerts</span><span class="p">,</span>
2085
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="p">)</span>
2086
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
2087
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2088
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="p">{</span>
2089
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2090
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cases from DFIR-IRIS"</span><span class="p">,</span>
2091
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">}</span>
2092
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
2093
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2094
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2095
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cases from DFIR-IRIS"</span><span class="p">,</span>
2096
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">"results"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
2097
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
2098
+</code></pre></div></td></tr></table></div>
2099
+ </details>
2100
+ </div>
2101
+
2102
+</div>
2103
+
2104
+
2105
+
2106
+ </div>
2107
+
2108
+ </div>
2109
+
2110
+</div>
2111
+
2112
+
2113
+
2114
+
2115
+ </div>
2116
+
2117
+ </div>
2118
+
2119
+</div><p><br></p>
2120
+<h3 id="cases-services"><span style="color:red">Cases Services</span></h3>
2121
+
2122
+
2123
+<div class="doc doc-object doc-module">
2124
+
2125
+
2126
+<a id="app.services.DFIR_IRIS.cases"></a>
2127
+ <div class="doc doc-contents first">
2128
+
2129
+
2130
+
2131
+ <div class="doc doc-children">
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+<div class="doc doc-object doc-class">
2141
+
2142
+
2143
+
2144
+<h2 id="app.services.DFIR_IRIS.cases.CasesService" class="doc doc-heading">
2145
+ <code>CasesService</code>
2146
+
2147
+
2148
+</h2>
2149
+
2150
+
2151
+ <div class="doc doc-contents ">
2152
+
2153
+
2154
+ <p>A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</p>
2155
+
2156
+
2157
+ <details class="quote">
2158
+ <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2159
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
2160
+<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
2161
+<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
2162
+<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
2163
+<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
2164
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
2165
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
2166
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
2167
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
2168
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
2169
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
2170
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
2171
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
2172
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
2173
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
2174
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
2175
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
2176
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
2177
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
2178
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
2179
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
2180
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
2181
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
2182
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
2183
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
2184
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
2185
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
2186
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
2187
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
2188
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
2189
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
2190
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
2191
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
2192
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
2193
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
2194
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
2195
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
2196
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
2197
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
2198
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
2199
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
2200
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
2201
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
2202
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
2203
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
2204
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
2205
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
2206
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
2207
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
2208
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
2209
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2210
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2211
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2212
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2213
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2214
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2215
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2216
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2217
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2218
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2219
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2220
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2221
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2222
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2223
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2224
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2225
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2226
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2227
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2228
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2229
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2230
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2231
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2232
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2233
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2234
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2235
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2236
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2237
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2238
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2239
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2240
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2241
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2242
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2243
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2244
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2245
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2246
+<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">CasesService</span><span class="p">:</span>
2247
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">"""</span>
2248
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling cases from DFIR-IRIS.</span>
2249
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> """</span>
2250
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
2251
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2252
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
2253
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
2254
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a>
2255
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2256
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
2257
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
2258
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">else</span><span class="p">:</span>
2259
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
2260
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
2261
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2262
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">"""</span>
2263
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
2264
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2265
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
2266
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
2267
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
2268
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2269
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
2270
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2271
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2272
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
2273
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2274
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting cases from DFIR-IRIS"</span><span class="p">)</span>
2275
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2276
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2277
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2278
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
2279
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
2280
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2281
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2282
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2283
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2284
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cases from DFIR-IRIS"</span><span class="p">,</span>
2285
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2286
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2287
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
2288
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2289
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cases from DFIR-IRIS"</span><span class="p">,</span>
2290
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">"cases"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
2291
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
2292
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
2293
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
2294
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">"""</span>
2295
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
2296
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
2297
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
2298
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2299
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
2300
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2301
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2302
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2303
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2304
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
2305
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
2306
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
2307
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2308
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2309
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2310
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
2311
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
2312
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
2313
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
2314
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2315
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
2316
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2317
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
2318
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
2319
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2320
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
2321
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2322
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
2323
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">"case"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
2324
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
2325
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
2326
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
2327
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">"""</span>
2328
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
2329
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2330
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
2331
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2332
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> """</span>
2333
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
2334
+</code></pre></div></td></tr></table></div>
2335
+ </details>
2336
+
2337
+
2338
+
2339
+ <div class="doc doc-children">
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+<div class="doc doc-object doc-function">
2350
+
2351
+
2352
+
2353
+<h3 id="app.services.DFIR_IRIS.cases.CasesService.check_case_id" class="doc doc-heading">
2354
+<code class="highlight language-python"><span class="n">check_case_id</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
2355
+
2356
+</h3>
2357
+
2358
+
2359
+ <div class="doc doc-contents ">
2360
+
2361
+ <p>Checks if a case exists in DFIR-IRIS</p>
2362
+
2363
+ <p><strong>Returns:</strong></p>
2364
+ <table>
2365
+ <thead>
2366
+ <tr>
2367
+<th>Name</th> <th>Type</th>
2368
+ <th>Description</th>
2369
+ </tr>
2370
+ </thead>
2371
+ <tbody>
2372
+ <tr>
2373
+<td><code>dict</code></td> <td>
2374
+ <code>bool</code>
2375
+ </td>
2376
+ <td>
2377
+ <div class="doc-md-description">
2378
+ <p>A dictionary containing the success status, a message and potentially the case.</p>
2379
+ </div>
2380
+ </td>
2381
+ </tr>
2382
+ </tbody>
2383
+ </table>
2384
+
2385
+ <details class="quote">
2386
+ <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2387
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2388
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2389
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2390
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2391
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2392
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2393
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2394
+<span class="normal"><a href="#__codelineno-0-101">101</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="k">def</span> <span class="nf">check_case_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
2395
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="w"> </span><span class="sd">"""</span>
2396
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Checks if a case exists in DFIR-IRIS</span>
2397
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2398
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Returns:</span>
2399
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2400
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> """</span>
2401
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span>
2402
+</code></pre></div></td></tr></table></div>
2403
+ </details>
2404
+ </div>
2405
+
2406
+</div>
2407
+
2408
+<div class="doc doc-object doc-function">
2409
+
2410
+
2411
+
2412
+<h3 id="app.services.DFIR_IRIS.cases.CasesService.get_case" class="doc doc-heading">
2413
+<code class="highlight language-python"><span class="n">get_case</span><span class="p">(</span><span class="n">case_id</span><span class="p">)</span></code>
2414
+
2415
+</h3>
2416
+
2417
+
2418
+ <div class="doc doc-contents ">
2419
+
2420
+ <p>Gets a case from DFIR-IRIS and returns all the details</p>
2421
+
2422
+ <p><strong>Returns:</strong></p>
2423
+ <table>
2424
+ <thead>
2425
+ <tr>
2426
+<th>Name</th> <th>Type</th>
2427
+ <th>Description</th>
2428
+ </tr>
2429
+ </thead>
2430
+ <tbody>
2431
+ <tr>
2432
+<td><code>dict</code></td> <td>
2433
+ <code>bool</code>
2434
+ </td>
2435
+ <td>
2436
+ <div class="doc-md-description">
2437
+ <p>A dictionary containing the success status, a message and potentially the case.</p>
2438
+ </div>
2439
+ </td>
2440
+ </tr>
2441
+ </tbody>
2442
+ </table>
2443
+
2444
+ <details class="quote">
2445
+ <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2446
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-61">61</a></span>
2447
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2448
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2449
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2450
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2451
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2452
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2453
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2454
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2455
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
2456
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2457
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2458
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2459
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2460
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2461
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2462
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2463
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2464
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2465
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
2466
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
2467
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2468
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2469
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2470
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
2471
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
2472
+<span class="normal"><a href="#__codelineno-0-87">87</a></span>
2473
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
2474
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2475
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2476
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
2477
+<span class="normal"><a href="#__codelineno-0-92">92</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="k">def</span> <span class="nf">get_case</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">case_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
2478
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">"""</span>
2479
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Gets a case from DFIR-IRIS and returns all the details</span>
2480
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
2481
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
2482
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the case.</span>
2483
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
2484
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2485
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2486
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2487
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2488
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
2489
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
2490
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
2491
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2492
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2493
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2494
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_case</span><span class="p">,</span>
2495
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">case_id</span><span class="p">,</span>
2496
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">)</span>
2497
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
2498
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2499
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="p">{</span>
2500
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2501
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Failed to collect case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
2502
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">}</span>
2503
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2504
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="p">{</span>
2505
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2506
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully collected case </span><span class="si">{</span><span class="n">case_id</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">,</span>
2507
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">"case"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
2508
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">}</span>
2509
+</code></pre></div></td></tr></table></div>
2510
+ </details>
2511
+ </div>
2512
+
2513
+</div>
2514
+
2515
+<div class="doc doc-object doc-function">
2516
+
2517
+
2518
+
2519
+<h3 id="app.services.DFIR_IRIS.cases.CasesService.list_cases" class="doc doc-heading">
2520
+<code class="highlight language-python"><span class="n">list_cases</span><span class="p">()</span></code>
2521
+
2522
+</h3>
2523
+
2524
+
2525
+ <div class="doc doc-contents ">
2526
+
2527
+ <p>Lists all cases from DFIR-IRIS</p>
2528
+
2529
+ <p><strong>Returns:</strong></p>
2530
+ <table>
2531
+ <thead>
2532
+ <tr>
2533
+<th>Name</th> <th>Type</th>
2534
+ <th>Description</th>
2535
+ </tr>
2536
+ </thead>
2537
+ <tbody>
2538
+ <tr>
2539
+<td><code>dict</code></td> <td>
2540
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2541
+ </td>
2542
+ <td>
2543
+ <div class="doc-md-description">
2544
+ <p>A dictionary containing the success status, a message and potentially the cases.</p>
2545
+ </div>
2546
+ </td>
2547
+ </tr>
2548
+ </tbody>
2549
+ </table>
2550
+
2551
+ <details class="quote">
2552
+ <summary>Source code in <code>app\services\DFIR_IRIS\cases.py</code></summary>
2553
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
2554
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2555
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2556
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2557
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2558
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2559
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2560
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2561
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2562
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2563
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2564
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2565
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2566
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2567
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2568
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2569
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2570
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2571
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2572
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2573
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2574
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2575
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2576
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2577
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2578
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2579
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2580
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2581
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2582
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2583
+<span class="normal"><a href="#__codelineno-0-59">59</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">def</span> <span class="nf">list_cases</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2584
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">"""</span>
2585
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Lists all cases from DFIR-IRIS</span>
2586
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2587
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
2588
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> dict: A dictionary containing the success status, a message and potentially the cases.</span>
2589
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
2590
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2591
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="p">{</span>
2592
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2593
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2594
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">}</span>
2595
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2596
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting cases from DFIR-IRIS"</span><span class="p">)</span>
2597
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2598
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2599
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2600
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_cases</span><span class="p">,</span>
2601
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">)</span>
2602
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2603
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2604
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2605
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2606
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cases from DFIR-IRIS"</span><span class="p">,</span>
2607
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2608
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2609
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">{</span>
2610
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2611
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cases from DFIR-IRIS"</span><span class="p">,</span>
2612
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="s2">"cases"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
2613
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">}</span>
2614
+</code></pre></div></td></tr></table></div>
2615
+ </details>
2616
+ </div>
2617
+
2618
+</div>
2619
+
2620
+
2621
+
2622
+ </div>
2623
+
2624
+ </div>
2625
+
2626
+</div>
2627
+
2628
+
2629
+
2630
+
2631
+ </div>
2632
+
2633
+ </div>
2634
+
2635
+</div><p><br></p>
2636
+<h3 id="assets-services"><span style="color:red">Assets Services</span></h3>
2637
+
2638
+
2639
+<div class="doc doc-object doc-module">
2640
+
2641
+
2642
+<a id="app.services.DFIR_IRIS.assets"></a>
2643
+ <div class="doc doc-contents first">
2644
+
2645
+
2646
+
2647
+ <div class="doc doc-children">
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+<div class="doc doc-object doc-class">
2657
+
2658
+
2659
+
2660
+<h2 id="app.services.DFIR_IRIS.assets.AssetsService" class="doc doc-heading">
2661
+ <code>AssetsService</code>
2662
+
2663
+
2664
+</h2>
2665
+
2666
+
2667
+ <div class="doc doc-contents ">
2668
+
2669
+
2670
+ <p>A service class that encapsulates the logic for pulling case assets from DFIR-IRIS. It creates a DFIR-IRIS session upon
2671
+initialization and uses it to fetch case assets.</p>
2672
+
2673
+
2674
+ <details class="quote">
2675
+ <summary>Source code in <code>app\services\DFIR_IRIS\assets.py</code></summary>
2676
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14">14</a></span>
2677
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
2678
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2679
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2680
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2681
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2682
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
2683
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2684
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2685
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2686
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2687
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2688
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2689
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2690
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2691
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2692
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2693
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2694
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2695
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2696
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2697
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2698
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2699
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2700
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2701
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2702
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2703
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2704
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2705
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2706
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2707
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2708
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2709
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2710
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2711
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2712
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2713
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2714
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2715
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2716
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2717
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2718
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2719
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2720
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2721
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2722
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2723
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2724
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2725
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2726
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2727
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2728
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2729
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2730
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2731
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2732
+<span class="normal"><a href="#__codelineno-0-70">70</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">AssetsService</span><span class="p">:</span>
2733
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">"""</span>
2734
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling case assets from DFIR-IRIS. It creates a DFIR-IRIS session upon</span>
2735
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> initialization and uses it to fetch case assets.</span>
2736
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
2737
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
2738
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2739
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">"""</span>
2740
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes the AssetsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.</span>
2741
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
2742
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> """</span>
2743
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
2744
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
2745
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
2746
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2747
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
2748
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
2749
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">else</span><span class="p">:</span>
2750
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
2751
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a>
2752
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2753
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="w"> </span><span class="sd">"""</span>
2754
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Retrieves the assets of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
2755
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,</span>
2756
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> it attempts to fetch and parse the assets data for the case specified by the `cid` parameter.</span>
2757
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2758
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2759
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> cid (int): The ID of the case for which to retrieve assets.</span>
2760
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
2761
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
2762
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched assets. The</span>
2763
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
2764
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "data" key</span>
2765
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> with the fetched assets.</span>
2766
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> """</span>
2767
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2768
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
2769
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2770
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
2771
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
2772
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2773
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> assets from DFIR-IRIS"</span><span class="p">)</span>
2774
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
2775
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
2776
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
2777
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
2778
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_assets</span><span class="p">,</span>
2779
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">cid</span><span class="p">,</span>
2780
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">)</span>
2781
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
2782
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2783
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="p">{</span>
2784
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2785
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
2786
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
2787
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
2788
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="n">result</span>
2789
+</code></pre></div></td></tr></table></div>
2790
+ </details>
2791
+
2792
+
2793
+
2794
+ <div class="doc doc-children">
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+<div class="doc doc-object doc-function">
2805
+
2806
+
2807
+
2808
+<h3 id="app.services.DFIR_IRIS.assets.AssetsService.__init__" class="doc doc-heading">
2809
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
2810
+
2811
+</h3>
2812
+
2813
+
2814
+ <div class="doc doc-contents ">
2815
+
2816
+ <p>Initializes the AssetsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.
2817
+If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</p>
2818
+
2819
+ <details class="quote">
2820
+ <summary>Source code in <code>app\services\DFIR_IRIS\assets.py</code></summary>
2821
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20">20</a></span>
2822
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2823
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2824
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2825
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2826
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2827
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2828
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2829
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2830
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2831
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2832
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2833
+<span class="normal"><a href="#__codelineno-0-32">32</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2834
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">"""</span>
2835
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes the AssetsService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.</span>
2836
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
2837
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> """</span>
2838
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
2839
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
2840
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
2841
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2842
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
2843
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
2844
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">else</span><span class="p">:</span>
2845
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
2846
+</code></pre></div></td></tr></table></div>
2847
+ </details>
2848
+ </div>
2849
+
2850
+</div>
2851
+
2852
+<div class="doc doc-object doc-function">
2853
+
2854
+
2855
+
2856
+<h3 id="app.services.DFIR_IRIS.assets.AssetsService.get_case_assets" class="doc doc-heading">
2857
+<code class="highlight language-python"><span class="n">get_case_assets</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span></code>
2858
+
2859
+</h3>
2860
+
2861
+
2862
+ <div class="doc doc-contents ">
2863
+
2864
+ <p>Retrieves the assets of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates
2865
+that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,
2866
+it attempts to fetch and parse the assets data for the case specified by the <code>cid</code> parameter.</p>
2867
+
2868
+ <p><strong>Parameters:</strong></p>
2869
+ <table>
2870
+ <thead>
2871
+ <tr>
2872
+ <th>Name</th>
2873
+ <th>Type</th>
2874
+ <th>Description</th>
2875
+ <th>Default</th>
2876
+ </tr>
2877
+ </thead>
2878
+ <tbody>
2879
+ <tr>
2880
+ <td><code>cid</code></td>
2881
+ <td>
2882
+ <code>int</code>
2883
+ </td>
2884
+ <td>
2885
+ <div class="doc-md-description">
2886
+ <p>The ID of the case for which to retrieve assets.</p>
2887
+ </div>
2888
+ </td>
2889
+ <td>
2890
+ <em>required</em>
2891
+ </td>
2892
+ </tr>
2893
+ </tbody>
2894
+ </table>
2895
+
2896
+ <p><strong>Returns:</strong></p>
2897
+ <table>
2898
+ <thead>
2899
+ <tr>
2900
+<th>Name</th> <th>Type</th>
2901
+ <th>Description</th>
2902
+ </tr>
2903
+ </thead>
2904
+ <tbody>
2905
+ <tr>
2906
+<td><code>dict</code></td> <td>
2907
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2908
+ </td>
2909
+ <td>
2910
+ <div class="doc-md-description">
2911
+ <p>A dictionary containing the success status, a message, and potentially the fetched assets. The</p>
2912
+ </div>
2913
+ </td>
2914
+ </tr>
2915
+ <tr>
2916
+<td></td> <td>
2917
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2918
+ </td>
2919
+ <td>
2920
+ <div class="doc-md-description">
2921
+ <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
2922
+ </div>
2923
+ </td>
2924
+ </tr>
2925
+ <tr>
2926
+<td></td> <td>
2927
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2928
+ </td>
2929
+ <td>
2930
+ <div class="doc-md-description">
2931
+ <p>providing details about the operation. If "success" is True, the dictionary also contains the "data" key</p>
2932
+ </div>
2933
+ </td>
2934
+ </tr>
2935
+ <tr>
2936
+<td></td> <td>
2937
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2938
+ </td>
2939
+ <td>
2940
+ <div class="doc-md-description">
2941
+ <p>with the fetched assets.</p>
2942
+ </div>
2943
+ </td>
2944
+ </tr>
2945
+ </tbody>
2946
+ </table>
2947
+
2948
+ <details class="quote">
2949
+ <summary>Source code in <code>app\services\DFIR_IRIS\assets.py</code></summary>
2950
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-34">34</a></span>
2951
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2952
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2953
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2954
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2955
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2956
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2957
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2958
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2959
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2960
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2961
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2962
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2963
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2964
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2965
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2966
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2967
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2968
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2969
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2970
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2971
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2972
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2973
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2974
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2975
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2976
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2977
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2978
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2979
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2980
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2981
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2982
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2983
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2984
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2985
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2986
+<span class="normal"><a href="#__codelineno-0-70">70</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="k">def</span> <span class="nf">get_case_assets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2987
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="w"> </span><span class="sd">"""</span>
2988
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Retrieves the assets of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
2989
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,</span>
2990
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> it attempts to fetch and parse the assets data for the case specified by the `cid` parameter.</span>
2991
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2992
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2993
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> cid (int): The ID of the case for which to retrieve assets.</span>
2994
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
2995
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
2996
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched assets. The</span>
2997
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
2998
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "data" key</span>
2999
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> with the fetched assets.</span>
3000
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> """</span>
3001
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3002
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span>
3003
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3004
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
3005
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">}</span>
3006
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
3007
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> assets from DFIR-IRIS"</span><span class="p">)</span>
3008
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3009
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3010
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3011
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3012
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">case</span><span class="o">.</span><span class="n">list_assets</span><span class="p">,</span>
3013
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">cid</span><span class="p">,</span>
3014
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="p">)</span>
3015
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
3016
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3017
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="p">{</span>
3018
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3019
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
3020
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">}</span>
3021
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a>
3022
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="n">result</span>
3023
+</code></pre></div></td></tr></table></div>
3024
+ </details>
3025
+ </div>
3026
+
3027
+</div>
3028
+
3029
+
3030
+
3031
+ </div>
3032
+
3033
+ </div>
3034
+
3035
+</div>
3036
+
3037
+
3038
+
3039
+
3040
+ </div>
3041
+
3042
+ </div>
3043
+
3044
+</div><p><br></p>
3045
+<h3 id="notes-services"><span style="color:red">Notes Services</span></h3>
3046
+
3047
+
3048
+<div class="doc doc-object doc-module">
3049
+
3050
+
3051
+<a id="app.services.DFIR_IRIS.notes"></a>
3052
+ <div class="doc doc-contents first">
3053
+
3054
+
3055
+
3056
+ <div class="doc doc-children">
3057
+
3058
+
3059
+
3060
+
3061
+
3062
+
3063
+
3064
+
3065
+<div class="doc doc-object doc-class">
3066
+
3067
+
3068
+
3069
+<h2 id="app.services.DFIR_IRIS.notes.NotesService" class="doc doc-heading">
3070
+ <code>NotesService</code>
3071
+
3072
+
3073
+</h2>
3074
+
3075
+
3076
+ <div class="doc doc-contents ">
3077
+
3078
+
3079
+ <p>A service class that encapsulates the logic for pulling and managing case notes from DFIR-IRIS. This class handles
3080
+fetching and creating case notes. It creates a DFIR-IRIS session upon initialization and uses it to interact with
3081
+the DFIR-IRIS case notes.</p>
3082
+
3083
+
3084
+ <details class="quote">
3085
+ <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3086
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
3087
+<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
3088
+<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
3089
+<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
3090
+<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
3091
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
3092
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
3093
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
3094
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
3095
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
3096
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
3097
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
3098
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
3099
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
3100
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
3101
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
3102
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
3103
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
3104
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
3105
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
3106
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
3107
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
3108
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
3109
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
3110
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
3111
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
3112
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
3113
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
3114
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
3115
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
3116
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
3117
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
3118
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
3119
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
3120
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
3121
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
3122
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
3123
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
3124
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
3125
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
3126
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
3127
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
3128
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
3129
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
3130
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
3131
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
3132
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
3133
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
3134
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
3135
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
3136
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
3137
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
3138
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
3139
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
3140
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
3141
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
3142
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
3143
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
3144
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
3145
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
3146
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
3147
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
3148
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
3149
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
3150
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
3151
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
3152
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
3153
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
3154
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
3155
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
3156
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
3157
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
3158
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
3159
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
3160
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
3161
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
3162
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
3163
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
3164
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
3165
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
3166
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
3167
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
3168
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
3169
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
3170
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
3171
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
3172
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
3173
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
3174
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
3175
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
3176
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
3177
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
3178
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
3179
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
3180
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
3181
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
3182
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
3183
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
3184
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
3185
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
3186
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
3187
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
3188
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
3189
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
3190
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
3191
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
3192
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
3193
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
3194
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
3195
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3196
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3197
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3198
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3199
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3200
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3201
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3202
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3203
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3204
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3205
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3206
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3207
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3208
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3209
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3210
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3211
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3212
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3213
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3214
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3215
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3216
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3217
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3218
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3219
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3220
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3221
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3222
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3223
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3224
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3225
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3226
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3227
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3228
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3229
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3230
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3231
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3232
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3233
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3234
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3235
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3236
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3237
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3238
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3239
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3240
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3241
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3242
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3243
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3244
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3245
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3246
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3247
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
3248
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
3249
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
3250
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
3251
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
3252
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
3253
+<span class="normal"><a href="#__codelineno-0-181">181</a></span>
3254
+<span class="normal"><a href="#__codelineno-0-182">182</a></span>
3255
+<span class="normal"><a href="#__codelineno-0-183">183</a></span>
3256
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
3257
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
3258
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
3259
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3260
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3261
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3262
+<span class="normal"><a href="#__codelineno-0-190">190</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">NotesService</span><span class="p">:</span>
3263
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">"""</span>
3264
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling and managing case notes from DFIR-IRIS. This class handles</span>
3265
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> fetching and creating case notes. It creates a DFIR-IRIS session upon initialization and uses it to interact with</span>
3266
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> the DFIR-IRIS case notes.</span>
3267
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> """</span>
3268
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
3269
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3270
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">"""</span>
3271
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initializes the NotesService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.</span>
3272
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
3273
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> """</span>
3274
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
3275
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
3276
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
3277
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3278
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
3279
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
3280
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
3281
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
3282
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
3283
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">search_term</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3284
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="w"> </span><span class="sd">"""</span>
3285
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Retrieves the notes of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
3286
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,</span>
3287
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> it attempts to fetch and parse the notes data for the case specified by the `cid` parameter.</span>
3288
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3289
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
3290
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> search_term (str): The search term to use when fetching case notes.</span>
3291
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> cid (int): The ID of the case for which to retrieve notes.</span>
3292
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3293
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Returns:</span>
3294
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched notes. The</span>
3295
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
3296
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "data" key</span>
3297
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> with the fetched notes.</span>
3298
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
3299
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3300
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="p">{</span>
3301
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3302
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
3303
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="p">}</span>
3304
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
3305
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
3306
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3307
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3308
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3309
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3310
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">case</span><span class="o">.</span><span class="n">search_notes</span><span class="p">,</span>
3311
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">search_term</span><span class="p">,</span>
3312
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">cid</span><span class="p">,</span>
3313
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
3314
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3315
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3316
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">return</span> <span class="p">{</span>
3317
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3318
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
3319
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">}</span>
3320
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3321
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="c1"># Loop through the notes and get the details</span>
3322
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">for</span> <span class="n">note</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">]:</span>
3323
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">note_details</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_case_note_details</span><span class="p">(</span><span class="n">note</span><span class="p">[</span><span class="s2">"note_id"</span><span class="p">],</span> <span class="n">cid</span><span class="p">)</span>
3324
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3325
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span>
3326
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3327
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
3328
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">}</span>
3329
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">note</span><span class="p">[</span><span class="s2">"note_details"</span><span class="p">]</span> <span class="o">=</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">"notes"</span><span class="p">]</span>
3330
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
3331
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">result</span>
3332
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
3333
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">def</span> <span class="nf">_get_case_note_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">note_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3334
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="w"> </span><span class="sd">"""</span>
3335
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Retrieves the details of a specific note of a specific case from DFIR-IRIS. If the iris_session attribute is None,</span>
3336
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> this indicates that the session creation was unsuccessful, and a dictionary with "success" set to False is</span>
3337
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> returned. Otherwise, it attempts to fetch and parse the note data for the note specified by the `note_id`</span>
3338
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> parameter and the case specified by the `cid` parameter.</span>
3339
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
3340
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> Args:</span>
3341
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> note_id (int): The ID of the note for which to retrieve details.</span>
3342
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> cid (int): The ID of the case for which to retrieve the note details.</span>
3343
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
3344
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Returns:</span>
3345
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched note details. The</span>
3346
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
3347
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "notes" key</span>
3348
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> with the fetched note details.</span>
3349
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> """</span>
3350
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3351
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="k">return</span> <span class="p">{</span>
3352
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3353
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
3354
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="p">}</span>
3355
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
3356
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
3357
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3358
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3359
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3360
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">case</span><span class="o">.</span><span class="n">get_note</span><span class="p">,</span>
3361
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">note_id</span><span class="p">,</span>
3362
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">cid</span><span class="p">,</span>
3363
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="p">)</span>
3364
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a>
3365
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3366
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">return</span> <span class="p">{</span>
3367
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3368
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
3369
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="p">}</span>
3370
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
3371
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span>
3372
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3373
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected notes from DFIR-IRIS"</span><span class="p">,</span>
3374
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="s2">"notes"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
3375
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="p">}</span>
3376
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
3377
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span>
3378
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="p">,</span>
3379
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
3380
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">note_title</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3381
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="n">note_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3382
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3383
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">"""</span>
3384
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Creates a note for a specific case in DFIR-IRIS. If the iris_session attribute is None, this indicates that</span>
3385
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,</span>
3386
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> it attempts to create a note with the specified `note_title` and `note_content` for the case specified by the</span>
3387
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> `cid` parameter.</span>
3388
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a>
3389
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Args:</span>
3390
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="sd"> cid (int): The ID of the case for which to create a note.</span>
3391
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> note_title (str): The title of the note to create.</span>
3392
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> note_content (str): The content of the note to create.</span>
3393
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3394
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3395
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the created note. The</span>
3396
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
3397
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "notes" key</span>
3398
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> with the created note.</span>
3399
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> """</span>
3400
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3401
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="p">{</span>
3402
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3403
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
3404
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="p">}</span>
3405
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3406
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Creating case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> note in DFIR-IRIS"</span><span class="p">)</span>
3407
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3408
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3409
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="c1"># Creating Group for New Note</span>
3410
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">note_group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3411
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3412
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_notes_group</span><span class="p">,</span>
3413
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">note_title</span><span class="p">,</span>
3414
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">cid</span><span class="p">,</span>
3415
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">)</span>
3416
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
3417
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3418
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to create note in DFIR-IRIS"</span><span class="p">}</span>
3419
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">note_group_id</span> <span class="o">=</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"group_id"</span><span class="p">]</span>
3420
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">custom_attributes</span> <span class="o">=</span> <span class="p">{}</span>
3421
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3422
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3423
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_note</span><span class="p">,</span>
3424
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">note_title</span><span class="p">,</span>
3425
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="n">note_content</span><span class="p">,</span>
3426
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="n">note_group_id</span><span class="p">,</span>
3427
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="n">custom_attributes</span><span class="p">,</span>
3428
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">cid</span><span class="p">,</span>
3429
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">)</span>
3430
+<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
3431
+<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3432
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to create note in DFIR-IRIS"</span><span class="p">}</span>
3433
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
3434
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">return</span> <span class="p">{</span>
3435
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3436
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully created note in DFIR-IRIS"</span><span class="p">,</span>
3437
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="s2">"notes"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
3438
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">}</span>
3439
+</code></pre></div></td></tr></table></div>
3440
+ </details>
3441
+
3442
+
3443
+
3444
+ <div class="doc doc-children">
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+<div class="doc doc-object doc-function">
3455
+
3456
+
3457
+
3458
+<h3 id="app.services.DFIR_IRIS.notes.NotesService.__init__" class="doc doc-heading">
3459
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
3460
+
3461
+</h3>
3462
+
3463
+
3464
+ <div class="doc doc-contents ">
3465
+
3466
+ <p>Initializes the NotesService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.
3467
+If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</p>
3468
+
3469
+ <details class="quote">
3470
+ <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3471
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-21">21</a></span>
3472
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
3473
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
3474
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
3475
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
3476
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
3477
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
3478
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
3479
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
3480
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
3481
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
3482
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
3483
+<span class="normal"><a href="#__codelineno-0-33">33</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3484
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">"""</span>
3485
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> Initializes the NotesService by creating a UniversalService object for "DFIR-IRIS" and establishing a session.</span>
3486
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> If the session creation is unsuccessful, an error is logged and the iris_session attribute is set to None.</span>
3487
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> """</span>
3488
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">(</span><span class="s2">"DFIR-IRIS"</span><span class="p">)</span>
3489
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">session_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">create_session</span><span class="p">()</span>
3490
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
3491
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3492
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">session_result</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
3493
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="kc">None</span>
3494
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
3495
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="o">=</span> <span class="n">session_result</span><span class="p">[</span><span class="s2">"session"</span><span class="p">]</span>
3496
+</code></pre></div></td></tr></table></div>
3497
+ </details>
3498
+ </div>
3499
+
3500
+</div>
3501
+
3502
+<div class="doc doc-object doc-function">
3503
+
3504
+
3505
+
3506
+<h3 id="app.services.DFIR_IRIS.notes.NotesService.create_case_note" class="doc doc-heading">
3507
+<code class="highlight language-python"><span class="n">create_case_note</span><span class="p">(</span><span class="n">cid</span><span class="p">,</span> <span class="n">note_title</span><span class="p">,</span> <span class="n">note_content</span><span class="p">)</span></code>
3508
+
3509
+</h3>
3510
+
3511
+
3512
+ <div class="doc doc-contents ">
3513
+
3514
+ <p>Creates a note for a specific case in DFIR-IRIS. If the iris_session attribute is None, this indicates that
3515
+the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,
3516
+it attempts to create a note with the specified <code>note_title</code> and <code>note_content</code> for the case specified by the
3517
+<code>cid</code> parameter.</p>
3518
+
3519
+ <p><strong>Parameters:</strong></p>
3520
+ <table>
3521
+ <thead>
3522
+ <tr>
3523
+ <th>Name</th>
3524
+ <th>Type</th>
3525
+ <th>Description</th>
3526
+ <th>Default</th>
3527
+ </tr>
3528
+ </thead>
3529
+ <tbody>
3530
+ <tr>
3531
+ <td><code>cid</code></td>
3532
+ <td>
3533
+ <code>int</code>
3534
+ </td>
3535
+ <td>
3536
+ <div class="doc-md-description">
3537
+ <p>The ID of the case for which to create a note.</p>
3538
+ </div>
3539
+ </td>
3540
+ <td>
3541
+ <em>required</em>
3542
+ </td>
3543
+ </tr>
3544
+ <tr>
3545
+ <td><code>note_title</code></td>
3546
+ <td>
3547
+ <code>str</code>
3548
+ </td>
3549
+ <td>
3550
+ <div class="doc-md-description">
3551
+ <p>The title of the note to create.</p>
3552
+ </div>
3553
+ </td>
3554
+ <td>
3555
+ <em>required</em>
3556
+ </td>
3557
+ </tr>
3558
+ <tr>
3559
+ <td><code>note_content</code></td>
3560
+ <td>
3561
+ <code>str</code>
3562
+ </td>
3563
+ <td>
3564
+ <div class="doc-md-description">
3565
+ <p>The content of the note to create.</p>
3566
+ </div>
3567
+ </td>
3568
+ <td>
3569
+ <em>required</em>
3570
+ </td>
3571
+ </tr>
3572
+ </tbody>
3573
+ </table>
3574
+
3575
+ <p><strong>Returns:</strong></p>
3576
+ <table>
3577
+ <thead>
3578
+ <tr>
3579
+<th>Name</th> <th>Type</th>
3580
+ <th>Description</th>
3581
+ </tr>
3582
+ </thead>
3583
+ <tbody>
3584
+ <tr>
3585
+<td><code>dict</code></td> <td>
3586
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3587
+ </td>
3588
+ <td>
3589
+ <div class="doc-md-description">
3590
+ <p>A dictionary containing the success status, a message, and potentially the created note. The</p>
3591
+ </div>
3592
+ </td>
3593
+ </tr>
3594
+ <tr>
3595
+<td></td> <td>
3596
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3597
+ </td>
3598
+ <td>
3599
+ <div class="doc-md-description">
3600
+ <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
3601
+ </div>
3602
+ </td>
3603
+ </tr>
3604
+ <tr>
3605
+<td></td> <td>
3606
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3607
+ </td>
3608
+ <td>
3609
+ <div class="doc-md-description">
3610
+ <p>providing details about the operation. If "success" is True, the dictionary also contains the "notes" key</p>
3611
+ </div>
3612
+ </td>
3613
+ </tr>
3614
+ <tr>
3615
+<td></td> <td>
3616
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3617
+ </td>
3618
+ <td>
3619
+ <div class="doc-md-description">
3620
+ <p>with the created note.</p>
3621
+ </div>
3622
+ </td>
3623
+ </tr>
3624
+ </tbody>
3625
+ </table>
3626
+
3627
+ <details class="quote">
3628
+ <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3629
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-129">129</a></span>
3630
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3631
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3632
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3633
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3634
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3635
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3636
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3637
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3638
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3639
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3640
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3641
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3642
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3643
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3644
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3645
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3646
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3647
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3648
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3649
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3650
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3651
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3652
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3653
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3654
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3655
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3656
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3657
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3658
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3659
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3660
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3661
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3662
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3663
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3664
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3665
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3666
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3667
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3668
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3669
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3670
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3671
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3672
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3673
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3674
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3675
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
3676
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
3677
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
3678
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
3679
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
3680
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
3681
+<span class="normal"><a href="#__codelineno-0-181">181</a></span>
3682
+<span class="normal"><a href="#__codelineno-0-182">182</a></span>
3683
+<span class="normal"><a href="#__codelineno-0-183">183</a></span>
3684
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
3685
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
3686
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
3687
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3688
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3689
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3690
+<span class="normal"><a href="#__codelineno-0-190">190</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="k">def</span> <span class="nf">create_case_note</span><span class="p">(</span>
3691
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="p">,</span>
3692
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
3693
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">note_title</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3694
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="n">note_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3695
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3696
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">"""</span>
3697
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Creates a note for a specific case in DFIR-IRIS. If the iris_session attribute is None, this indicates that</span>
3698
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="sd"> the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,</span>
3699
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> it attempts to create a note with the specified `note_title` and `note_content` for the case specified by the</span>
3700
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> `cid` parameter.</span>
3701
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a>
3702
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Args:</span>
3703
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="sd"> cid (int): The ID of the case for which to create a note.</span>
3704
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> note_title (str): The title of the note to create.</span>
3705
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> note_content (str): The content of the note to create.</span>
3706
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3707
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3708
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the created note. The</span>
3709
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
3710
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "notes" key</span>
3711
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> with the created note.</span>
3712
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> """</span>
3713
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3714
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="p">{</span>
3715
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3716
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
3717
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="p">}</span>
3718
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3719
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Creating case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> note in DFIR-IRIS"</span><span class="p">)</span>
3720
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3721
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3722
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="c1"># Creating Group for New Note</span>
3723
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">note_group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3724
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3725
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_notes_group</span><span class="p">,</span>
3726
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">note_title</span><span class="p">,</span>
3727
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">cid</span><span class="p">,</span>
3728
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">)</span>
3729
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a>
3730
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3731
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to create note in DFIR-IRIS"</span><span class="p">}</span>
3732
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">note_group_id</span> <span class="o">=</span> <span class="n">note_group</span><span class="p">[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"group_id"</span><span class="p">]</span>
3733
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="n">custom_attributes</span> <span class="o">=</span> <span class="p">{}</span>
3734
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3735
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3736
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">case</span><span class="o">.</span><span class="n">add_note</span><span class="p">,</span>
3737
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">note_title</span><span class="p">,</span>
3738
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="n">note_content</span><span class="p">,</span>
3739
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="n">note_group_id</span><span class="p">,</span>
3740
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="n">custom_attributes</span><span class="p">,</span>
3741
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">cid</span><span class="p">,</span>
3742
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">)</span>
3743
+<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
3744
+<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3745
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to create note in DFIR-IRIS"</span><span class="p">}</span>
3746
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a>
3747
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">return</span> <span class="p">{</span>
3748
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3749
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully created note in DFIR-IRIS"</span><span class="p">,</span>
3750
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="s2">"notes"</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">],</span>
3751
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="p">}</span>
3752
+</code></pre></div></td></tr></table></div>
3753
+ </details>
3754
+ </div>
3755
+
3756
+</div>
3757
+
3758
+<div class="doc doc-object doc-function">
3759
+
3760
+
3761
+
3762
+<h3 id="app.services.DFIR_IRIS.notes.NotesService.get_case_notes" class="doc doc-heading">
3763
+<code class="highlight language-python"><span class="n">get_case_notes</span><span class="p">(</span><span class="n">search_term</span><span class="p">,</span> <span class="n">cid</span><span class="p">)</span></code>
3764
+
3765
+</h3>
3766
+
3767
+
3768
+ <div class="doc doc-contents ">
3769
+
3770
+ <p>Retrieves the notes of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates
3771
+that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,
3772
+it attempts to fetch and parse the notes data for the case specified by the <code>cid</code> parameter.</p>
3773
+
3774
+ <p><strong>Parameters:</strong></p>
3775
+ <table>
3776
+ <thead>
3777
+ <tr>
3778
+ <th>Name</th>
3779
+ <th>Type</th>
3780
+ <th>Description</th>
3781
+ <th>Default</th>
3782
+ </tr>
3783
+ </thead>
3784
+ <tbody>
3785
+ <tr>
3786
+ <td><code>search_term</code></td>
3787
+ <td>
3788
+ <code>str</code>
3789
+ </td>
3790
+ <td>
3791
+ <div class="doc-md-description">
3792
+ <p>The search term to use when fetching case notes.</p>
3793
+ </div>
3794
+ </td>
3795
+ <td>
3796
+ <em>required</em>
3797
+ </td>
3798
+ </tr>
3799
+ <tr>
3800
+ <td><code>cid</code></td>
3801
+ <td>
3802
+ <code>int</code>
3803
+ </td>
3804
+ <td>
3805
+ <div class="doc-md-description">
3806
+ <p>The ID of the case for which to retrieve notes.</p>
3807
+ </div>
3808
+ </td>
3809
+ <td>
3810
+ <em>required</em>
3811
+ </td>
3812
+ </tr>
3813
+ </tbody>
3814
+ </table>
3815
+
3816
+ <p><strong>Returns:</strong></p>
3817
+ <table>
3818
+ <thead>
3819
+ <tr>
3820
+<th>Name</th> <th>Type</th>
3821
+ <th>Description</th>
3822
+ </tr>
3823
+ </thead>
3824
+ <tbody>
3825
+ <tr>
3826
+<td><code>dict</code></td> <td>
3827
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3828
+ </td>
3829
+ <td>
3830
+ <div class="doc-md-description">
3831
+ <p>A dictionary containing the success status, a message, and potentially the fetched notes. The</p>
3832
+ </div>
3833
+ </td>
3834
+ </tr>
3835
+ <tr>
3836
+<td></td> <td>
3837
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3838
+ </td>
3839
+ <td>
3840
+ <div class="doc-md-description">
3841
+ <p>"success" key is a boolean indicating whether the operation was successful. The "message" key is a string</p>
3842
+ </div>
3843
+ </td>
3844
+ </tr>
3845
+ <tr>
3846
+<td></td> <td>
3847
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3848
+ </td>
3849
+ <td>
3850
+ <div class="doc-md-description">
3851
+ <p>providing details about the operation. If "success" is True, the dictionary also contains the "data" key</p>
3852
+ </div>
3853
+ </td>
3854
+ </tr>
3855
+ <tr>
3856
+<td></td> <td>
3857
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
3858
+ </td>
3859
+ <td>
3860
+ <div class="doc-md-description">
3861
+ <p>with the fetched notes.</p>
3862
+ </div>
3863
+ </td>
3864
+ </tr>
3865
+ </tbody>
3866
+ </table>
3867
+
3868
+ <details class="quote">
3869
+ <summary>Source code in <code>app\services\DFIR_IRIS\notes.py</code></summary>
3870
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-35">35</a></span>
3871
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
3872
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
3873
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
3874
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
3875
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
3876
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
3877
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3878
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3879
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3880
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3881
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
3882
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
3883
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
3884
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
3885
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
3886
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
3887
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
3888
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3889
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3890
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
3891
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3892
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3893
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3894
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3895
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3896
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
3897
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
3898
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
3899
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3900
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3901
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3902
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3903
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3904
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3905
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3906
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3907
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3908
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3909
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3910
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3911
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3912
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3913
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3914
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
3915
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
3916
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
3917
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
3918
+<span class="normal"><a href="#__codelineno-0-83">83</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="k">def</span> <span class="nf">get_case_notes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">search_term</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">cid</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3919
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="w"> </span><span class="sd">"""</span>
3920
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Retrieves the notes of a specific case from DFIR-IRIS. If the iris_session attribute is None, this indicates</span>
3921
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> that the session creation was unsuccessful, and a dictionary with "success" set to False is returned. Otherwise,</span>
3922
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> it attempts to fetch and parse the notes data for the case specified by the `cid` parameter.</span>
3923
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3924
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
3925
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> search_term (str): The search term to use when fetching case notes.</span>
3926
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> cid (int): The ID of the case for which to retrieve notes.</span>
3927
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3928
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Returns:</span>
3929
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the fetched notes. The</span>
3930
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> "success" key is a boolean indicating whether the operation was successful. The "message" key is a string</span>
3931
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> providing details about the operation. If "success" is True, the dictionary also contains the "data" key</span>
3932
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> with the fetched notes.</span>
3933
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
3934
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3935
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="p">{</span>
3936
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3937
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"DFIR-IRIS session was not successfully created."</span><span class="p">,</span>
3938
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="p">}</span>
3939
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
3940
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting case </span><span class="si">{</span><span class="n">cid</span><span class="si">}</span><span class="s2"> from DFIR-IRIS"</span><span class="p">)</span>
3941
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">case</span> <span class="o">=</span> <span class="n">Case</span><span class="p">(</span><span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">)</span>
3942
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">cid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">cid</span><span class="p">)</span>
3943
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">fetch_and_parse_data</span><span class="p">(</span>
3944
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="bp">self</span><span class="o">.</span><span class="n">iris_session</span><span class="p">,</span>
3945
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">case</span><span class="o">.</span><span class="n">search_notes</span><span class="p">,</span>
3946
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">search_term</span><span class="p">,</span>
3947
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">cid</span><span class="p">,</span>
3948
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
3949
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3950
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3951
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">return</span> <span class="p">{</span>
3952
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3953
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
3954
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">}</span>
3955
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3956
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="c1"># Loop through the notes and get the details</span>
3957
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">for</span> <span class="n">note</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"data"</span><span class="p">]:</span>
3958
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">note_details</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_case_note_details</span><span class="p">(</span><span class="n">note</span><span class="p">[</span><span class="s2">"note_id"</span><span class="p">],</span> <span class="n">cid</span><span class="p">)</span>
3959
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3960
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span>
3961
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3962
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect notes from DFIR-IRIS"</span><span class="p">,</span>
3963
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="p">}</span>
3964
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">note</span><span class="p">[</span><span class="s2">"note_details"</span><span class="p">]</span> <span class="o">=</span> <span class="n">note_details</span><span class="p">[</span><span class="s2">"notes"</span><span class="p">]</span>
3965
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
3966
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">result</span>
3967
+</code></pre></div></td></tr></table></div>
3968
+ </details>
3969
+ </div>
3970
+
3971
+</div>
3972
+
3973
+
3974
+
3975
+ </div>
3976
+
3977
+ </div>
3978
+
3979
+</div>
3980
+
3981
+
3982
+
3983
+
3984
+ </div>
3985
+
3986
+ </div>
3987
+
3988
+</div><p><br></p>
3989
+<h3 id="universal-services"><span style="color:red">Universal Services</span></h3>
3990
+
3991
+
3992
+<div class="doc doc-object doc-module">
3993
+
3994
+
3995
+<a id="app.services.DFIR_IRIS.universal"></a>
3996
+ <div class="doc doc-contents first">
3997
+
3998
+
3999
+
4000
+ <div class="doc doc-children">
4001
+
4002
+
4003
+
4004
+
4005
+
4006
+
4007
+
4008
+
4009
+<div class="doc doc-object doc-class">
4010
+
4011
+
4012
+
4013
+<h2 id="app.services.DFIR_IRIS.universal.UniversalService" class="doc doc-heading">
4014
+ <code>UniversalService</code>
4015
+
4016
+
4017
+</h2>
4018
+
4019
+
4020
+ <div class="doc doc-contents ">
4021
+
4022
+
4023
+ <p>A service class that encapsulates the logic for interfacing with DFIR-IRIS. This class handles tasks like creating a session,
4024
+fetching and parsing data, and retrieving connector details.</p>
4025
+
4026
+
4027
+ <details class="quote">
4028
+ <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4029
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
4030
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
4031
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
4032
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
4033
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
4034
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
4035
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
4036
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
4037
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
4038
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
4039
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
4040
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
4041
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
4042
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
4043
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
4044
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
4045
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
4046
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
4047
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
4048
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
4049
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
4050
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
4051
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
4052
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
4053
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
4054
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
4055
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
4056
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
4057
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
4058
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
4059
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
4060
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
4061
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
4062
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
4063
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
4064
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
4065
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
4066
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
4067
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
4068
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
4069
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
4070
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
4071
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
4072
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
4073
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
4074
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
4075
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
4076
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
4077
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
4078
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
4079
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
4080
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
4081
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
4082
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
4083
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
4084
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
4085
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
4086
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
4087
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
4088
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
4089
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
4090
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
4091
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
4092
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
4093
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
4094
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
4095
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
4096
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4097
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4098
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4099
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4100
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4101
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4102
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4103
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4104
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4105
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4106
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4107
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4108
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4109
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4110
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4111
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4112
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4113
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4114
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4115
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4116
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4117
+<span class="normal"><a href="#__codelineno-0-108">108</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
4118
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">"""</span>
4119
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> A service class that encapsulates the logic for interfacing with DFIR-IRIS. This class handles tasks like creating a session,</span>
4120
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> fetching and parsing data, and retrieving connector details.</span>
4121
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> """</span>
4122
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
4123
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
4124
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">"""</span>
4125
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Initializes the UniversalService by collecting DFIR-IRIS details associated with the specified connector name.</span>
4126
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
4127
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
4128
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4129
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> """</span>
4130
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_iris_details</span><span class="p">(</span>
4131
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">connector_name</span><span class="p">,</span>
4132
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">)</span>
4133
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
4134
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">def</span> <span class="nf">collect_iris_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
4135
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">"""</span>
4136
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Collects the details of the DFIR-IRIS connector.</span>
4137
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
4138
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
4139
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4140
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
4141
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
4142
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> tuple: A tuple containing the connection URL and API key. If the connection is not successful, both elements of the tuple are None.</span>
4143
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> """</span>
4144
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
4145
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
4146
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
4147
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
4148
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="p">(</span>
4149
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_url"</span><span class="p">),</span>
4150
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_api_key"</span><span class="p">),</span>
4151
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
4152
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">else</span><span class="p">:</span>
4153
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
4154
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
4155
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">def</span> <span class="nf">create_session</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ClientSession</span><span class="p">],</span> <span class="nb">str</span><span class="p">]]:</span>
4156
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
4157
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Creates a session with DFIR-IRIS.</span>
4158
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
4159
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> This method creates a session with DFIR-IRIS and returns a dictionary with a success status and the session object.</span>
4160
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> If a session cannot be established, an error is logged and a dictionary with "success" set to False and an error message is returned.</span>
4161
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
4162
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
4163
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status and either the session object or an error message.</span>
4164
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
4165
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">try</span><span class="p">:</span>
4166
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Creating session with DFIR-IRIS."</span><span class="p">)</span>
4167
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">session</span> <span class="o">=</span> <span class="n">ClientSession</span><span class="p">(</span>
4168
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">host</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
4169
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">apikey</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
4170
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">agent</span><span class="o">=</span><span class="s2">"iris-client"</span><span class="p">,</span>
4171
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">ssl_verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4172
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">120</span><span class="p">,</span>
4173
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">proxy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
4174
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">)</span>
4175
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Session created."</span><span class="p">)</span>
4176
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"session"</span><span class="p">:</span> <span class="n">session</span><span class="p">}</span>
4177
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4178
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating session with DFIR-IRIS: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4179
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">return</span> <span class="p">{</span>
4180
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4181
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Connection to DFIR-IRIS unsuccessful."</span><span class="p">,</span>
4182
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="p">}</span>
4183
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
4184
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">def</span> <span class="nf">fetch_and_parse_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">:</span> <span class="n">ClientSession</span><span class="p">,</span> <span class="n">action</span><span class="p">:</span> <span class="n">Callable</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]]]:</span>
4185
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">"""</span>
4186
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Fetches and parses data from DFIR-IRIS using a specified action.</span>
4187
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
4188
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Args:</span>
4189
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> session (ClientSession): The DFIR-IRIS session object.</span>
4190
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> action (Callable): The function to execute to fetch data from DFIR-IRIS. This function should accept *args.</span>
4191
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> args: The arguments to pass to the action function.</span>
4192
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
4193
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Returns:</span>
4194
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> dict: A dictionary containing the success status and either the fetched data or None if the operation was unsuccessful.</span>
4195
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> """</span>
4196
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">try</span><span class="p">:</span>
4197
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Executing </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">... on args: </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4198
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">status</span> <span class="o">=</span> <span class="n">action</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
4199
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">assert_api_resp</span><span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">soft_fail</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
4200
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">get_data_from_resp</span><span class="p">(</span><span class="n">status</span><span class="p">)</span>
4201
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully executed </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4202
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"data"</span><span class="p">:</span> <span class="n">data</span><span class="p">}</span>
4203
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
4204
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to execute </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4205
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4206
+</code></pre></div></td></tr></table></div>
4207
+ </details>
4208
+
4209
+
4210
+
4211
+ <div class="doc doc-children">
4212
+
4213
+
4214
+
4215
+
4216
+
4217
+
4218
+
4219
+
4220
+
4221
+<div class="doc doc-object doc-function">
4222
+
4223
+
4224
+
4225
+<h3 id="app.services.DFIR_IRIS.universal.UniversalService.__init__" class="doc doc-heading">
4226
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
4227
+
4228
+</h3>
4229
+
4230
+
4231
+ <div class="doc doc-contents ">
4232
+
4233
+ <p>Initializes the UniversalService by collecting DFIR-IRIS details associated with the specified connector name.</p>
4234
+
4235
+ <p><strong>Parameters:</strong></p>
4236
+ <table>
4237
+ <thead>
4238
+ <tr>
4239
+ <th>Name</th>
4240
+ <th>Type</th>
4241
+ <th>Description</th>
4242
+ <th>Default</th>
4243
+ </tr>
4244
+ </thead>
4245
+ <tbody>
4246
+ <tr>
4247
+ <td><code>connector_name</code></td>
4248
+ <td>
4249
+ <code>str</code>
4250
+ </td>
4251
+ <td>
4252
+ <div class="doc-md-description">
4253
+ <p>The name of the DFIR-IRIS connector.</p>
4254
+ </div>
4255
+ </td>
4256
+ <td>
4257
+ <em>required</em>
4258
+ </td>
4259
+ </tr>
4260
+ </tbody>
4261
+ </table>
4262
+
4263
+ <details class="quote">
4264
+ <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4265
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-26">26</a></span>
4266
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
4267
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
4268
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
4269
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
4270
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
4271
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
4272
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
4273
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
4274
+<span class="normal"><a href="#__codelineno-0-35">35</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
4275
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">"""</span>
4276
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Initializes the UniversalService by collecting DFIR-IRIS details associated with the specified connector name.</span>
4277
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
4278
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
4279
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4280
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> """</span>
4281
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_iris_details</span><span class="p">(</span>
4282
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">connector_name</span><span class="p">,</span>
4283
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">)</span>
4284
+</code></pre></div></td></tr></table></div>
4285
+ </details>
4286
+ </div>
4287
+
4288
+</div>
4289
+
4290
+<div class="doc doc-object doc-function">
4291
+
4292
+
4293
+
4294
+<h3 id="app.services.DFIR_IRIS.universal.UniversalService.collect_iris_details" class="doc doc-heading">
4295
+<code class="highlight language-python"><span class="n">collect_iris_details</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
4296
+
4297
+</h3>
4298
+
4299
+
4300
+ <div class="doc doc-contents ">
4301
+
4302
+ <p>Collects the details of the DFIR-IRIS connector.</p>
4303
+
4304
+ <p><strong>Parameters:</strong></p>
4305
+ <table>
4306
+ <thead>
4307
+ <tr>
4308
+ <th>Name</th>
4309
+ <th>Type</th>
4310
+ <th>Description</th>
4311
+ <th>Default</th>
4312
+ </tr>
4313
+ </thead>
4314
+ <tbody>
4315
+ <tr>
4316
+ <td><code>connector_name</code></td>
4317
+ <td>
4318
+ <code>str</code>
4319
+ </td>
4320
+ <td>
4321
+ <div class="doc-md-description">
4322
+ <p>The name of the DFIR-IRIS connector.</p>
4323
+ </div>
4324
+ </td>
4325
+ <td>
4326
+ <em>required</em>
4327
+ </td>
4328
+ </tr>
4329
+ </tbody>
4330
+ </table>
4331
+
4332
+ <p><strong>Returns:</strong></p>
4333
+ <table>
4334
+ <thead>
4335
+ <tr>
4336
+<th>Name</th> <th>Type</th>
4337
+ <th>Description</th>
4338
+ </tr>
4339
+ </thead>
4340
+ <tbody>
4341
+ <tr>
4342
+<td><code>tuple</code></td> <td>
4343
+ <code><span title="typing.Tuple">Tuple</span>[<span title="typing.Optional">Optional</span>[str], <span title="typing.Optional">Optional</span>[str]]</code>
4344
+ </td>
4345
+ <td>
4346
+ <div class="doc-md-description">
4347
+ <p>A tuple containing the connection URL and API key. If the connection is not successful, both elements of the tuple are None.</p>
4348
+ </div>
4349
+ </td>
4350
+ </tr>
4351
+ </tbody>
4352
+ </table>
4353
+
4354
+ <details class="quote">
4355
+ <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4356
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-37">37</a></span>
4357
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
4358
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
4359
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
4360
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
4361
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
4362
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
4363
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
4364
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
4365
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
4366
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
4367
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
4368
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
4369
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
4370
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
4371
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
4372
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
4373
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
4374
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
4375
+<span class="normal"><a href="#__codelineno-0-56">56</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="k">def</span> <span class="nf">collect_iris_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
4376
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">"""</span>
4377
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Collects the details of the DFIR-IRIS connector.</span>
4378
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
4379
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
4380
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> connector_name (str): The name of the DFIR-IRIS connector.</span>
4381
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
4382
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
4383
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> tuple: A tuple containing the connection URL and API key. If the connection is not successful, both elements of the tuple are None.</span>
4384
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> """</span>
4385
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
4386
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
4387
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
4388
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
4389
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="p">(</span>
4390
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_url"</span><span class="p">),</span>
4391
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_api_key"</span><span class="p">),</span>
4392
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
4393
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">else</span><span class="p">:</span>
4394
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
4395
+</code></pre></div></td></tr></table></div>
4396
+ </details>
4397
+ </div>
4398
+
4399
+</div>
4400
+
4401
+<div class="doc doc-object doc-function">
4402
+
4403
+
4404
+
4405
+<h3 id="app.services.DFIR_IRIS.universal.UniversalService.create_session" class="doc doc-heading">
4406
+<code class="highlight language-python"><span class="n">create_session</span><span class="p">()</span></code>
4407
+
4408
+</h3>
4409
+
4410
+
4411
+ <div class="doc doc-contents ">
4412
+
4413
+ <p>Creates a session with DFIR-IRIS.</p>
4414
+<p>This method creates a session with DFIR-IRIS and returns a dictionary with a success status and the session object.
4415
+If a session cannot be established, an error is logged and a dictionary with "success" set to False and an error message is returned.</p>
4416
+
4417
+ <p><strong>Returns:</strong></p>
4418
+ <table>
4419
+ <thead>
4420
+ <tr>
4421
+<th>Name</th> <th>Type</th>
4422
+ <th>Description</th>
4423
+ </tr>
4424
+ </thead>
4425
+ <tbody>
4426
+ <tr>
4427
+<td><code>dict</code></td> <td>
4428
+ <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[bool, <span title="typing.Optional">Optional</span>[<span title="dfir_iris_client.session.ClientSession">ClientSession</span>], str]]</code>
4429
+ </td>
4430
+ <td>
4431
+ <div class="doc-md-description">
4432
+ <p>A dictionary containing the success status and either the session object or an error message.</p>
4433
+ </div>
4434
+ </td>
4435
+ </tr>
4436
+ </tbody>
4437
+ </table>
4438
+
4439
+ <details class="quote">
4440
+ <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4441
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
4442
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
4443
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
4444
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
4445
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
4446
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
4447
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
4448
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
4449
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
4450
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
4451
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
4452
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
4453
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
4454
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
4455
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
4456
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
4457
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
4458
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
4459
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
4460
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
4461
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
4462
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
4463
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
4464
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
4465
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
4466
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
4467
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
4468
+<span class="normal"><a href="#__codelineno-0-85">85</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">create_session</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">ClientSession</span><span class="p">],</span> <span class="nb">str</span><span class="p">]]:</span>
4469
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
4470
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Creates a session with DFIR-IRIS.</span>
4471
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
4472
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> This method creates a session with DFIR-IRIS and returns a dictionary with a success status and the session object.</span>
4473
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> If a session cannot be established, an error is logged and a dictionary with "success" set to False and an error message is returned.</span>
4474
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
4475
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
4476
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> dict: A dictionary containing the success status and either the session object or an error message.</span>
4477
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> """</span>
4478
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">try</span><span class="p">:</span>
4479
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Creating session with DFIR-IRIS."</span><span class="p">)</span>
4480
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">session</span> <span class="o">=</span> <span class="n">ClientSession</span><span class="p">(</span>
4481
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">host</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
4482
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">apikey</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
4483
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">agent</span><span class="o">=</span><span class="s2">"iris-client"</span><span class="p">,</span>
4484
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">ssl_verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4485
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">120</span><span class="p">,</span>
4486
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">proxy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
4487
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">)</span>
4488
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Session created."</span><span class="p">)</span>
4489
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"session"</span><span class="p">:</span> <span class="n">session</span><span class="p">}</span>
4490
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4491
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating session with DFIR-IRIS: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4492
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">return</span> <span class="p">{</span>
4493
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4494
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Connection to DFIR-IRIS unsuccessful."</span><span class="p">,</span>
4495
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="p">}</span>
4496
+</code></pre></div></td></tr></table></div>
4497
+ </details>
4498
+ </div>
4499
+
4500
+</div>
4501
+
4502
+<div class="doc doc-object doc-function">
4503
+
4504
+
4505
+
4506
+<h3 id="app.services.DFIR_IRIS.universal.UniversalService.fetch_and_parse_data" class="doc doc-heading">
4507
+<code class="highlight language-python"><span class="n">fetch_and_parse_data</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></code>
4508
+
4509
+</h3>
4510
+
4511
+
4512
+ <div class="doc doc-contents ">
4513
+
4514
+ <p>Fetches and parses data from DFIR-IRIS using a specified action.</p>
4515
+
4516
+ <p><strong>Parameters:</strong></p>
4517
+ <table>
4518
+ <thead>
4519
+ <tr>
4520
+ <th>Name</th>
4521
+ <th>Type</th>
4522
+ <th>Description</th>
4523
+ <th>Default</th>
4524
+ </tr>
4525
+ </thead>
4526
+ <tbody>
4527
+ <tr>
4528
+ <td><code>session</code></td>
4529
+ <td>
4530
+ <code><span title="dfir_iris_client.session.ClientSession">ClientSession</span></code>
4531
+ </td>
4532
+ <td>
4533
+ <div class="doc-md-description">
4534
+ <p>The DFIR-IRIS session object.</p>
4535
+ </div>
4536
+ </td>
4537
+ <td>
4538
+ <em>required</em>
4539
+ </td>
4540
+ </tr>
4541
+ <tr>
4542
+ <td><code>action</code></td>
4543
+ <td>
4544
+ <code><span title="typing.Callable">Callable</span></code>
4545
+ </td>
4546
+ <td>
4547
+ <div class="doc-md-description">
4548
+ <p>The function to execute to fetch data from DFIR-IRIS. This function should accept *args.</p>
4549
+ </div>
4550
+ </td>
4551
+ <td>
4552
+ <em>required</em>
4553
+ </td>
4554
+ </tr>
4555
+ <tr>
4556
+ <td><code>args</code></td>
4557
+ <td>
4558
+ </td>
4559
+ <td>
4560
+ <div class="doc-md-description">
4561
+ <p>The arguments to pass to the action function.</p>
4562
+ </div>
4563
+ </td>
4564
+ <td>
4565
+ <code>()</code>
4566
+ </td>
4567
+ </tr>
4568
+ </tbody>
4569
+ </table>
4570
+
4571
+ <p><strong>Returns:</strong></p>
4572
+ <table>
4573
+ <thead>
4574
+ <tr>
4575
+<th>Name</th> <th>Type</th>
4576
+ <th>Description</th>
4577
+ </tr>
4578
+ </thead>
4579
+ <tbody>
4580
+ <tr>
4581
+<td><code>dict</code></td> <td>
4582
+ <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[bool, <span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>]]]</code>
4583
+ </td>
4584
+ <td>
4585
+ <div class="doc-md-description">
4586
+ <p>A dictionary containing the success status and either the fetched data or None if the operation was unsuccessful.</p>
4587
+ </div>
4588
+ </td>
4589
+ </tr>
4590
+ </tbody>
4591
+ </table>
4592
+
4593
+ <details class="quote">
4594
+ <summary>Source code in <code>app\services\DFIR_IRIS\universal.py</code></summary>
4595
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4596
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4597
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4598
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4599
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4600
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4601
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4602
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4603
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4604
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4605
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4606
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4607
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4608
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4609
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4610
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4611
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4612
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4613
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4614
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4615
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4616
+<span class="normal"><a href="#__codelineno-0-108">108</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="k">def</span> <span class="nf">fetch_and_parse_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">:</span> <span class="n">ClientSession</span><span class="p">,</span> <span class="n">action</span><span class="p">:</span> <span class="n">Callable</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]]]:</span>
4617
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">"""</span>
4618
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Fetches and parses data from DFIR-IRIS using a specified action.</span>
4619
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
4620
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Args:</span>
4621
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> session (ClientSession): The DFIR-IRIS session object.</span>
4622
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> action (Callable): The function to execute to fetch data from DFIR-IRIS. This function should accept *args.</span>
4623
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> args: The arguments to pass to the action function.</span>
4624
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
4625
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> Returns:</span>
4626
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> dict: A dictionary containing the success status and either the fetched data or None if the operation was unsuccessful.</span>
4627
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> """</span>
4628
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">try</span><span class="p">:</span>
4629
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Executing </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">... on args: </span><span class="si">{</span><span class="n">args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4630
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">status</span> <span class="o">=</span> <span class="n">action</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
4631
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">assert_api_resp</span><span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">soft_fail</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
4632
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">get_data_from_resp</span><span class="p">(</span><span class="n">status</span><span class="p">)</span>
4633
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully executed </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4634
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"data"</span><span class="p">:</span> <span class="n">data</span><span class="p">}</span>
4635
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
4636
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to execute </span><span class="si">{</span><span class="n">action</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4637
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4638
+</code></pre></div></td></tr></table></div>
4639
+ </details>
4640
+ </div>
4641
+
4642
+</div>
4643
+
4644
+
4645
+
4646
+ </div>
4647
+
4648
+ </div>
4649
+
4650
+</div>
4651
+
4652
+
4653
+
4654
+
4655
+ </div>
4656
+
4657
+ </div>
4658
+
4659
+</div><p><br></p>
4660
+
4661
+
4662
+
4663
+
4664
+
4665
+
4666
+ </article>
4667
+ </div>
4668
+
4669
+
4670
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
4671
+
4672
+ </div>
4673
+
4674
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
4675
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
4676
+ Back to top
4677
+ </button>
4678
+
4679
+ </main>
4680
+
4681
+ <footer class="md-footer">
4682
+
4683
+ <div class="md-footer-meta md-typeset">
4684
+ <div class="md-footer-meta__inner md-grid">
4685
+ <div class="md-copyright">
4686
+
4687
+ <div class="md-copyright__highlight">
4688
+ © 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
4689
+
4690
+ </div>
4691
+
4692
+
4693
+ Made with
4694
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
4695
+ Material for MkDocs
4696
+ </a>
4697
+
4698
+</div>
4699
+
4700
+ </div>
4701
+ </div>
4702
+</footer>
4703
+
4704
+ </div>
4705
+ <div class="md-dialog" data-md-component="dialog">
4706
+ <div class="md-dialog__inner md-typeset"></div>
4707
+ </div>
4708
+
4709
+ <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
4710
+
4711
+
4712
+ <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
4713
+
4714
+
4715
+ </body>
4716
+</html>
\ No newline at end of file
backend/site/graylog/index.html
+58
-31
@@ -9,7 +9,7 @@
9
10
11
12
- <link rel="prev" href="../cases/">
12
+ <link rel="prev" href="../dfiriris/">
13
14
15
<link rel="next" href="../wazuhmanager/">
@@ -198,8 +198,8 @@
198
199
200
<li class="md-tabs__item">
201
- <a href="../alerts/" class="md-tabs__link">
202
- Alerts
201
+ <a href="../wazuhindexer/" class="md-tabs__link">
202
+ Wazuh-Indexer
203
</a>
204
</li>
205
@@ -210,8 +210,8 @@
210
211
212
<li class="md-tabs__item">
213
- <a href="../artifacts/" class="md-tabs__link">
214
- Artifacts
213
+ <a href="../dfiriris/" class="md-tabs__link">
214
+ Dfir-Iris
215
</a>
216
</li>
217
@@ -219,11 +219,13 @@
219
220
221
222
+
223
+
224
225
226
<li class="md-tabs__item">
225
- <a href="../cases/" class="md-tabs__link">
226
- Cases
227
+ <a href="./" class="md-tabs__link md-tabs__link--active">
228
+ Graylog
229
</a>
230
</li>
231
@@ -231,13 +233,23 @@
233
234
235
234
-
236
+
237
+
238
+ <li class="md-tabs__item">
239
+ <a href="../wazuhmanager/" class="md-tabs__link">
240
+ Wazuh-Manager
241
+ </a>
242
+ </li>
243
+
244
+
245
+
246
+
247
248
249
250
<li class="md-tabs__item">
239
- <a href="./" class="md-tabs__link md-tabs__link--active">
240
- Graylog
251
+ <a href="../velociraptor/" class="md-tabs__link">
252
+ Velociraptor
253
</a>
254
</li>
255
@@ -248,8 +260,8 @@
260
261
262
<li class="md-tabs__item">
251
- <a href="../wazuhmanager/" class="md-tabs__link">
252
- Wazuh-Manager
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
</a>
266
</li>
267
@@ -341,8 +353,8 @@
353
354
355
<li class="md-nav__item">
344
- <a href="../alerts/" class="md-nav__link">
345
- Alerts
356
+ <a href="../wazuhindexer/" class="md-nav__link">
357
+ Wazuh-Indexer
358
</a>
359
</li>
360
@@ -356,23 +368,8 @@
368
369
370
<li class="md-nav__item">
359
- <a href="../artifacts/" class="md-nav__link">
360
- Artifacts
361
- </a>
362
- </li>
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
- <li class="md-nav__item">
374
- <a href="../cases/" class="md-nav__link">
375
- Cases
371
+ <a href="../dfiriris/" class="md-nav__link">
372
+ Dfir-Iris
373
</a>
374
</li>
375
@@ -751,6 +748,36 @@
748
749
750
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+ <li class="md-nav__item">
759
+ <a href="../velociraptor/" class="md-nav__link">
760
+ Velociraptor
761
+ </a>
762
+ </li>
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+ <li class="md-nav__item">
774
+ <a href="../shuffle/" class="md-nav__link">
775
+ Shuffle
776
+ </a>
777
+ </li>
778
+
779
+
780
+
781
</ul>
782
</nav>
783
</div>
backend/site/index.html
+47
-20
@@ -198,8 +198,8 @@
198
199
200
<li class="md-tabs__item">
201
- <a href="alerts/" class="md-tabs__link">
202
- Alerts
201
+ <a href="wazuhindexer/" class="md-tabs__link">
202
+ Wazuh-Indexer
203
</a>
204
</li>
205
@@ -210,8 +210,8 @@
210
211
212
<li class="md-tabs__item">
213
- <a href="artifacts/" class="md-tabs__link">
214
- Artifacts
213
+ <a href="dfiriris/" class="md-tabs__link">
214
+ Dfir-Iris
215
</a>
216
</li>
217
@@ -222,8 +222,8 @@
222
223
224
<li class="md-tabs__item">
225
- <a href="cases/" class="md-tabs__link">
226
- Cases
225
+ <a href="graylog/" class="md-tabs__link">
226
+ Graylog
227
</a>
228
</li>
229
@@ -234,8 +234,8 @@
234
235
236
<li class="md-tabs__item">
237
- <a href="graylog/" class="md-tabs__link">
238
- Graylog
237
+ <a href="wazuhmanager/" class="md-tabs__link">
238
+ Wazuh-Manager
239
</a>
240
</li>
241
@@ -246,8 +246,20 @@
246
247
248
<li class="md-tabs__item">
249
- <a href="wazuhmanager/" class="md-tabs__link">
250
- Wazuh-Manager
249
+ <a href="velociraptor/" class="md-tabs__link">
250
+ Velociraptor
251
+ </a>
252
+ </li>
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+ <li class="md-tabs__item">
261
+ <a href="shuffle/" class="md-tabs__link">
262
+ Shuffle
263
</a>
264
</li>
265
@@ -451,8 +463,8 @@
463
464
465
<li class="md-nav__item">
454
- <a href="alerts/" class="md-nav__link">
455
- Alerts
466
+ <a href="wazuhindexer/" class="md-nav__link">
467
+ Wazuh-Indexer
468
</a>
469
</li>
470
@@ -466,8 +478,8 @@
478
479
480
<li class="md-nav__item">
469
- <a href="artifacts/" class="md-nav__link">
470
- Artifacts
481
+ <a href="dfiriris/" class="md-nav__link">
482
+ Dfir-Iris
483
</a>
484
</li>
485
@@ -481,8 +493,8 @@
493
494
495
<li class="md-nav__item">
484
- <a href="cases/" class="md-nav__link">
485
- Cases
496
+ <a href="graylog/" class="md-nav__link">
497
+ Graylog
498
</a>
499
</li>
500
@@ -496,8 +508,8 @@
508
509
510
<li class="md-nav__item">
499
- <a href="graylog/" class="md-nav__link">
500
- Graylog
511
+ <a href="wazuhmanager/" class="md-nav__link">
512
+ Wazuh-Manager
513
</a>
514
</li>
515
@@ -511,8 +523,23 @@
523
524
525
<li class="md-nav__item">
514
- <a href="wazuhmanager/" class="md-nav__link">
515
- Wazuh-Manager
526
+ <a href="velociraptor/" class="md-nav__link">
527
+ Velociraptor
528
+ </a>
529
+ </li>
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+ <li class="md-nav__item">
541
+ <a href="shuffle/" class="md-nav__link">
542
+ Shuffle
543
</a>
544
</li>
545
backend/site/mkdocs.yml
deleted
-61
@@ -1,61 +0,0 @@
1
-site_name: SOCFortress CoPilot
2
-theme:
3
- name: material
4
- features:
5
- - navigation.tabs
6
- - navigation.sections
7
- - toc.integrate
8
- - navigation.top
9
- - search.suggest
10
- - search.highlight
11
- - content.tabs.link
12
- - content.code.annotation
13
- - content.code.copy
14
-
15
- language: en
16
- palette:
17
- - scheme: default
18
- toggle:
19
- icon: material/toggle-switch-off-outline
20
- name: Switch to dark mode
21
- primary: teal
22
- accent: purple
23
- - scheme: slate
24
- toggle:
25
- icon: material/toggle-switch
26
- name: Switch to light mode
27
- primary: teal
28
- accent: lime
29
-
30
-plugins:
31
- - mkdocstrings:
32
- - autorefs
33
-
34
-nav:
35
- - Home: index.md
36
- - Connectors: connectors.md
37
- - Agents: agents.md
38
- - Alerts: alerts.md
39
- - Artifacts: artifacts.md
40
- - Cases: cases.md
41
- - Graylog: graylog.md
42
-
43
-markdown_extensions:
44
- - pymdownx.highlight:
45
- anchor_linenums: true
46
- - pymdownx.inlinehilite
47
- - pymdownx.snippets
48
- - admonition
49
- - pymdownx.arithmatex:
50
- generic: true
51
- - footnotes
52
- - pymdownx.details
53
- - pymdownx.superfences
54
- - pymdownx.mark
55
- - attr_list
56
- - pymdownx.emoji:
57
- emoji_index: !!python/name:materialx.emoji.twemoji
58
- emoji_generator: !!python/name:materialx.emoji.to_svg
59
-
60
-copyright: |
61
- © 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
backend/site/objects.inv
Binary files a/backend/site/objects.inv and b/backend/site/objects.inv differ
backend/site/shuffle/index.html
new
+2047
@@ -0,0 +1,2047 @@
1
+
2
+<!doctype html>
3
+<html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+
10
+
11
+
12
+ <link rel="prev" href="../velociraptor/">
13
+
14
+
15
+ <link rel="icon" href="../assets/images/favicon.png">
16
+ <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
17
+
18
+
19
+
20
+ <title>Shuffle - SOCFortress CoPilot</title>
21
+
22
+
23
+
24
+ <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
25
+
26
+
27
+ <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
38
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
39
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
40
+
41
+
42
+
43
+ <link rel="stylesheet" href="../assets/_mkdocstrings.css">
44
+
45
+ <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
46
+
47
+
48
+
49
+
50
+
51
+
52
+ </head>
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
63
+
64
+
65
+
66
+ <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
67
+
68
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
69
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
70
+ <label class="md-overlay" for="__drawer"></label>
71
+ <div data-md-component="skip">
72
+
73
+
74
+ <a href="#shuffle-overview" class="md-skip">
75
+ Skip to content
76
+ </a>
77
+
78
+ </div>
79
+ <div data-md-component="announce">
80
+
81
+ </div>
82
+
83
+
84
+
85
+
86
+<header class="md-header" data-md-component="header">
87
+ <nav class="md-header__inner md-grid" aria-label="Header">
88
+ <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
89
+
90
+
91
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
92
+
93
+ </a>
94
+ <label class="md-header__button md-icon" for="__drawer">
95
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
96
+ </label>
97
+ <div class="md-header__title" data-md-component="header-title">
98
+ <div class="md-header__ellipsis">
99
+ <div class="md-header__topic">
100
+ <span class="md-ellipsis">
101
+ SOCFortress CoPilot
102
+ </span>
103
+ </div>
104
+ <div class="md-header__topic" data-md-component="header-topic">
105
+ <span class="md-ellipsis">
106
+
107
+ Shuffle
108
+
109
+ </span>
110
+ </div>
111
+ </div>
112
+ </div>
113
+
114
+
115
+ <form class="md-header__option" data-md-component="palette">
116
+
117
+
118
+
119
+
120
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
121
+
122
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
123
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
124
+ </label>
125
+
126
+
127
+
128
+
129
+
130
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
131
+
132
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
133
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
134
+ </label>
135
+
136
+
137
+ </form>
138
+
139
+
140
+
141
+
142
+
143
+ </nav>
144
+
145
+</header>
146
+
147
+ <div class="md-container" data-md-component="container">
148
+
149
+
150
+
151
+
152
+
153
+<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
154
+ <div class="md-grid">
155
+ <ul class="md-tabs__list">
156
+
157
+
158
+
159
+
160
+
161
+
162
+ <li class="md-tabs__item">
163
+ <a href=".." class="md-tabs__link">
164
+ Home
165
+ </a>
166
+ </li>
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+ <li class="md-tabs__item">
175
+ <a href="../connectors/" class="md-tabs__link">
176
+ Connectors
177
+ </a>
178
+ </li>
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+ <li class="md-tabs__item">
187
+ <a href="../agents/" class="md-tabs__link">
188
+ Agents
189
+ </a>
190
+ </li>
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+ <li class="md-tabs__item">
199
+ <a href="../wazuhindexer/" class="md-tabs__link">
200
+ Wazuh-Indexer
201
+ </a>
202
+ </li>
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+ <li class="md-tabs__item">
211
+ <a href="../dfiriris/" class="md-tabs__link">
212
+ Dfir-Iris
213
+ </a>
214
+ </li>
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+ <li class="md-tabs__item">
223
+ <a href="../graylog/" class="md-tabs__link">
224
+ Graylog
225
+ </a>
226
+ </li>
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+ <li class="md-tabs__item">
235
+ <a href="../wazuhmanager/" class="md-tabs__link">
236
+ Wazuh-Manager
237
+ </a>
238
+ </li>
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+ <li class="md-tabs__item">
247
+ <a href="../velociraptor/" class="md-tabs__link">
248
+ Velociraptor
249
+ </a>
250
+ </li>
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+ <li class="md-tabs__item">
261
+ <a href="./" class="md-tabs__link md-tabs__link--active">
262
+ Shuffle
263
+ </a>
264
+ </li>
265
+
266
+
267
+ </ul>
268
+ </div>
269
+</nav>
270
+
271
+
272
+
273
+ <main class="md-main" data-md-component="main">
274
+ <div class="md-main__inner md-grid">
275
+
276
+
277
+
278
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
279
+ <div class="md-sidebar__scrollwrap">
280
+ <div class="md-sidebar__inner">
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
289
+ <label class="md-nav__title" for="__drawer">
290
+ <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
291
+
292
+
293
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
294
+
295
+ </a>
296
+ SOCFortress CoPilot
297
+ </label>
298
+
299
+ <ul class="md-nav__list" data-md-scrollfix>
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+ <li class="md-nav__item">
309
+ <a href=".." class="md-nav__link">
310
+ Home
311
+ </a>
312
+ </li>
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+ <li class="md-nav__item">
324
+ <a href="../connectors/" class="md-nav__link">
325
+ Connectors
326
+ </a>
327
+ </li>
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+ <li class="md-nav__item">
339
+ <a href="../agents/" class="md-nav__link">
340
+ Agents
341
+ </a>
342
+ </li>
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+ <li class="md-nav__item">
354
+ <a href="../wazuhindexer/" class="md-nav__link">
355
+ Wazuh-Indexer
356
+ </a>
357
+ </li>
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+ <li class="md-nav__item">
369
+ <a href="../dfiriris/" class="md-nav__link">
370
+ Dfir-Iris
371
+ </a>
372
+ </li>
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+ <li class="md-nav__item">
384
+ <a href="../graylog/" class="md-nav__link">
385
+ Graylog
386
+ </a>
387
+ </li>
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+ <li class="md-nav__item">
399
+ <a href="../wazuhmanager/" class="md-nav__link">
400
+ Wazuh-Manager
401
+ </a>
402
+ </li>
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+ <li class="md-nav__item">
414
+ <a href="../velociraptor/" class="md-nav__link">
415
+ Velociraptor
416
+ </a>
417
+ </li>
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+ <li class="md-nav__item md-nav__item--active">
431
+
432
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
433
+
434
+
435
+
436
+ <label class="md-nav__link md-nav__link--active" for="__toc">
437
+ Shuffle
438
+ <span class="md-nav__icon md-icon"></span>
439
+ </label>
440
+
441
+ <a href="./" class="md-nav__link md-nav__link--active">
442
+ Shuffle
443
+ </a>
444
+
445
+
446
+
447
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
448
+
449
+
450
+
451
+
452
+ <label class="md-nav__title" for="__toc">
453
+ <span class="md-nav__icon md-icon"></span>
454
+ Table of contents
455
+ </label>
456
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
457
+
458
+ <li class="md-nav__item">
459
+ <a href="#shuffle-overview" class="md-nav__link">
460
+ Shuffle Overview
461
+ </a>
462
+
463
+ <nav class="md-nav" aria-label="Shuffle Overview">
464
+ <ul class="md-nav__list">
465
+
466
+ <li class="md-nav__item">
467
+ <a href="#shuffle-routes" class="md-nav__link">
468
+ Shuffle Routes
469
+ </a>
470
+
471
+</li>
472
+
473
+ </ul>
474
+ </nav>
475
+
476
+</li>
477
+
478
+ <li class="md-nav__item">
479
+ <a href="#app.routes.shuffle" class="md-nav__link">
480
+ app.routes.shuffle
481
+ </a>
482
+
483
+</li>
484
+
485
+ <li class="md-nav__item">
486
+ <a href="#app.routes.shuffle.get_workflow_executions" class="md-nav__link">
487
+ get_workflow_executions()
488
+ </a>
489
+
490
+</li>
491
+
492
+ <li class="md-nav__item">
493
+ <a href="#app.routes.shuffle.get_workflows" class="md-nav__link">
494
+ get_workflows()
495
+ </a>
496
+
497
+</li>
498
+
499
+ <li class="md-nav__item">
500
+ <a href="#app.routes.shuffle.get_workflows_executions" class="md-nav__link">
501
+ get_workflows_executions()
502
+ </a>
503
+
504
+ <nav class="md-nav" aria-label="get_workflows_executions()">
505
+ <ul class="md-nav__list">
506
+
507
+ <li class="md-nav__item">
508
+ <a href="#workflows-services" class="md-nav__link">
509
+ Workflows Services
510
+ </a>
511
+
512
+</li>
513
+
514
+ </ul>
515
+ </nav>
516
+
517
+</li>
518
+
519
+ <li class="md-nav__item">
520
+ <a href="#app.services.Shuffle.workflows" class="md-nav__link">
521
+ app.services.Shuffle.workflows
522
+ </a>
523
+
524
+</li>
525
+
526
+ <li class="md-nav__item">
527
+ <a href="#app.services.Shuffle.workflows.WorkflowsService" class="md-nav__link">
528
+ WorkflowsService
529
+ </a>
530
+
531
+ <nav class="md-nav" aria-label="WorkflowsService">
532
+ <ul class="md-nav__list">
533
+
534
+ <li class="md-nav__item">
535
+ <a href="#app.services.Shuffle.workflows.WorkflowsService.collect_workflow_details" class="md-nav__link">
536
+ collect_workflow_details()
537
+ </a>
538
+
539
+</li>
540
+
541
+ <li class="md-nav__item">
542
+ <a href="#app.services.Shuffle.workflows.WorkflowsService.collect_workflow_executions_status" class="md-nav__link">
543
+ collect_workflow_executions_status()
544
+ </a>
545
+
546
+</li>
547
+
548
+ <li class="md-nav__item">
549
+ <a href="#app.services.Shuffle.workflows.WorkflowsService.collect_workflows" class="md-nav__link">
550
+ collect_workflows()
551
+ </a>
552
+
553
+</li>
554
+
555
+ <li class="md-nav__item">
556
+ <a href="#universal-services" class="md-nav__link">
557
+ Universal Services
558
+ </a>
559
+
560
+</li>
561
+
562
+ </ul>
563
+ </nav>
564
+
565
+</li>
566
+
567
+ <li class="md-nav__item">
568
+ <a href="#app.services.Shuffle.universal" class="md-nav__link">
569
+ app.services.Shuffle.universal
570
+ </a>
571
+
572
+</li>
573
+
574
+ <li class="md-nav__item">
575
+ <a href="#app.services.Shuffle.universal.UniversalService" class="md-nav__link">
576
+ UniversalService
577
+ </a>
578
+
579
+ <nav class="md-nav" aria-label="UniversalService">
580
+ <ul class="md-nav__list">
581
+
582
+ <li class="md-nav__item">
583
+ <a href="#app.services.Shuffle.universal.UniversalService.collect_shuffle_details" class="md-nav__link">
584
+ collect_shuffle_details()
585
+ </a>
586
+
587
+</li>
588
+
589
+ </ul>
590
+ </nav>
591
+
592
+</li>
593
+
594
+ </ul>
595
+
596
+</nav>
597
+
598
+ </li>
599
+
600
+
601
+
602
+ </ul>
603
+</nav>
604
+ </div>
605
+ </div>
606
+ </div>
607
+
608
+
609
+
610
+
611
+ <div class="md-content" data-md-component="content">
612
+ <article class="md-content__inner md-typeset">
613
+
614
+
615
+
616
+
617
+ <h1>Shuffle</h1>
618
+
619
+<h2 id="shuffle-overview">Shuffle Overview</h2>
620
+<h3 id="shuffle-routes"><span style="color:green">Shuffle Routes</span></h3>
621
+
622
+
623
+<div class="doc doc-object doc-module">
624
+
625
+
626
+<a id="app.routes.shuffle"></a>
627
+ <div class="doc doc-contents first">
628
+
629
+
630
+
631
+ <div class="doc doc-children">
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+<div class="doc doc-object doc-function">
642
+
643
+
644
+
645
+<h2 id="app.routes.shuffle.get_workflow_executions" class="doc doc-heading">
646
+<code class="highlight language-python"><span class="n">get_workflow_executions</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span></code>
647
+
648
+</h2>
649
+
650
+
651
+ <div class="doc doc-contents ">
652
+
653
+ <p>Endpoint to list execution status of a specified Shuffle workflow.</p>
654
+<p>This endpoint retrieves the status of the most recent execution for a specific workflow in Shuffle.</p>
655
+
656
+ <p><strong>Parameters:</strong></p>
657
+ <table>
658
+ <thead>
659
+ <tr>
660
+ <th>Name</th>
661
+ <th>Type</th>
662
+ <th>Description</th>
663
+ <th>Default</th>
664
+ </tr>
665
+ </thead>
666
+ <tbody>
667
+ <tr>
668
+ <td><code>workflow_id</code></td>
669
+ <td>
670
+ <code>str</code>
671
+ </td>
672
+ <td>
673
+ <div class="doc-md-description">
674
+ <p>The ID of the workflow to retrieve the execution status for.</p>
675
+ </div>
676
+ </td>
677
+ <td>
678
+ <em>required</em>
679
+ </td>
680
+ </tr>
681
+ </tbody>
682
+ </table>
683
+
684
+ <p><strong>Returns:</strong></p>
685
+ <table>
686
+ <thead>
687
+ <tr>
688
+<th>Name</th> <th>Type</th>
689
+ <th>Description</th>
690
+ </tr>
691
+ </thead>
692
+ <tbody>
693
+ <tr>
694
+<td><code>jsonify</code></td> <td>
695
+ <code><span title="flask.jsonify">jsonify</span></code>
696
+ </td>
697
+ <td>
698
+ <div class="doc-md-description">
699
+ <p>A JSON response containing the last execution status of the specified workflow.</p>
700
+ </div>
701
+ </td>
702
+ </tr>
703
+ </tbody>
704
+ </table>
705
+
706
+ <details class="quote">
707
+ <summary>Source code in <code>app\routes\shuffle.py</code></summary>
708
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-52">52</a></span>
709
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
710
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
711
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
712
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
713
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
714
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
715
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
716
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
717
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
718
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
719
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
720
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
721
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
722
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
723
+<span class="normal"><a href="#__codelineno-0-67">67</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/shuffle/workflows/executions/<workflow_id>"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
724
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="k">def</span> <span class="nf">get_workflow_executions</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">jsonify</span><span class="p">:</span>
725
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="w"> </span><span class="sd">"""</span>
726
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> Endpoint to list execution status of a specified Shuffle workflow.</span>
727
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
728
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> This endpoint retrieves the status of the most recent execution for a specific workflow in Shuffle.</span>
729
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
730
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Args:</span>
731
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> workflow_id (str): The ID of the workflow to retrieve the execution status for.</span>
732
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
733
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns:</span>
734
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> jsonify: A JSON response containing the last execution status of the specified workflow.</span>
735
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> """</span>
736
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">WorkflowsService</span><span class="p">()</span>
737
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">workflow_details</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span>
738
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="n">workflow_details</span>
739
+</code></pre></div></td></tr></table></div>
740
+ </details>
741
+ </div>
742
+
743
+</div>
744
+
745
+<div class="doc doc-object doc-function">
746
+
747
+
748
+
749
+<h2 id="app.routes.shuffle.get_workflows" class="doc doc-heading">
750
+<code class="highlight language-python"><span class="n">get_workflows</span><span class="p">()</span></code>
751
+
752
+</h2>
753
+
754
+
755
+ <div class="doc doc-contents ">
756
+
757
+ <p>Endpoint to list all available Shuffle workflows.</p>
758
+
759
+ <p><strong>Returns:</strong></p>
760
+ <table>
761
+ <thead>
762
+ <tr>
763
+<th>Name</th> <th>Type</th>
764
+ <th>Description</th>
765
+ </tr>
766
+ </thead>
767
+ <tbody>
768
+ <tr>
769
+<td><code>jsonify</code></td> <td>
770
+ <code><span title="flask.jsonify">jsonify</span></code>
771
+ </td>
772
+ <td>
773
+ <div class="doc-md-description">
774
+ <p>A JSON response containing the list of all configured Workflows in Shuffle.</p>
775
+ </div>
776
+ </td>
777
+ </tr>
778
+ </tbody>
779
+ </table>
780
+
781
+ <details class="quote">
782
+ <summary>Source code in <code>app\routes\shuffle.py</code></summary>
783
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-17">17</a></span>
784
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
785
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
786
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
787
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
788
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
789
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
790
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
791
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
792
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
793
+<span class="normal"><a href="#__codelineno-0-27">27</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/shuffle/workflows"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
794
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="k">def</span> <span class="nf">get_workflows</span><span class="p">()</span> <span class="o">-></span> <span class="n">jsonify</span><span class="p">:</span>
795
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="w"> </span><span class="sd">"""</span>
796
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Endpoint to list all available Shuffle workflows.</span>
797
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
798
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Returns:</span>
799
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> jsonify: A JSON response containing the list of all configured Workflows in Shuffle.</span>
800
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> """</span>
801
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">WorkflowsService</span><span class="p">()</span>
802
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflows</span><span class="p">()</span>
803
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">return</span> <span class="n">workflows</span>
804
+</code></pre></div></td></tr></table></div>
805
+ </details>
806
+ </div>
807
+
808
+</div>
809
+
810
+<div class="doc doc-object doc-function">
811
+
812
+
813
+
814
+<h2 id="app.routes.shuffle.get_workflows_executions" class="doc doc-heading">
815
+<code class="highlight language-python"><span class="n">get_workflows_executions</span><span class="p">()</span></code>
816
+
817
+</h2>
818
+
819
+
820
+ <div class="doc doc-contents ">
821
+
822
+ <p>Endpoint to list all available Shuffle workflow execution status.</p>
823
+<p>This endpoint retrieves the status of the most recent execution for each workflow in Shuffle.</p>
824
+
825
+ <p><strong>Returns:</strong></p>
826
+ <table>
827
+ <thead>
828
+ <tr>
829
+<th>Name</th> <th>Type</th>
830
+ <th>Description</th>
831
+ </tr>
832
+ </thead>
833
+ <tbody>
834
+ <tr>
835
+<td><code>jsonify</code></td> <td>
836
+ <code><span title="flask.jsonify">jsonify</span></code>
837
+ </td>
838
+ <td>
839
+ <div class="doc-md-description">
840
+ <p>A JSON response containing the list of all configured workflows and their last execution status.</p>
841
+ </div>
842
+ </td>
843
+ </tr>
844
+ </tbody>
845
+ </table>
846
+
847
+ <details class="quote">
848
+ <summary>Source code in <code>app\routes\shuffle.py</code></summary>
849
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-30">30</a></span>
850
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
851
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
852
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
853
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
854
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
855
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
856
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
857
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
858
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
859
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
860
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
861
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
862
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
863
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
864
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
865
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
866
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
867
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
868
+<span class="normal"><a href="#__codelineno-0-49">49</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/shuffle/workflows/executions"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
869
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="k">def</span> <span class="nf">get_workflows_executions</span><span class="p">()</span> <span class="o">-></span> <span class="n">jsonify</span><span class="p">:</span>
870
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="w"> </span><span class="sd">"""</span>
871
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Endpoint to list all available Shuffle workflow execution status.</span>
872
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
873
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> This endpoint retrieves the status of the most recent execution for each workflow in Shuffle.</span>
874
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
875
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Returns:</span>
876
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> jsonify: A JSON response containing the list of all configured workflows and their last execution status.</span>
877
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> """</span>
878
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">WorkflowsService</span><span class="p">()</span>
879
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">workflow_details</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflow_details</span><span class="p">()</span>
880
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="k">if</span> <span class="s2">"workflows"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">workflow_details</span><span class="p">:</span>
881
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">message</span> <span class="o">=</span> <span class="s2">"No workflows found"</span>
882
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">({</span><span class="s2">"message"</span><span class="p">:</span> <span class="n">message</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}),</span> <span class="mi">500</span>
883
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">for</span> <span class="n">workflow</span> <span class="ow">in</span> <span class="n">workflow_details</span><span class="p">[</span><span class="s2">"workflows"</span><span class="p">]:</span>
884
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">workflow</span><span class="p">[</span><span class="s2">"status"</span><span class="p">]</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_workflow_executions_status</span><span class="p">(</span>
885
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">workflow</span><span class="p">[</span><span class="s2">"workflow_id"</span><span class="p">],</span>
886
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="p">)</span>
887
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">return</span> <span class="n">workflow_details</span>
888
+</code></pre></div></td></tr></table></div>
889
+ </details>
890
+ </div>
891
+
892
+</div>
893
+
894
+
895
+
896
+ </div>
897
+
898
+ </div>
899
+
900
+</div><p><br></p>
901
+<h3 id="workflows-services"><span style="color:red">Workflows Services</span></h3>
902
+
903
+
904
+<div class="doc doc-object doc-module">
905
+
906
+
907
+<a id="app.services.Shuffle.workflows"></a>
908
+ <div class="doc doc-contents first">
909
+
910
+
911
+
912
+ <div class="doc doc-children">
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+<div class="doc doc-object doc-class">
922
+
923
+
924
+
925
+<h2 id="app.services.Shuffle.workflows.WorkflowsService" class="doc doc-heading">
926
+ <code>WorkflowsService</code>
927
+
928
+
929
+</h2>
930
+
931
+
932
+ <div class="doc doc-contents ">
933
+
934
+
935
+ <p>A service class that encapsulates the logic for retrieving workflow information from Shuffle.</p>
936
+
937
+ <p><strong>Attributes:</strong></p>
938
+ <table>
939
+ <thead>
940
+ <tr>
941
+ <th>Name</th>
942
+ <th>Type</th>
943
+ <th>Description</th>
944
+ </tr>
945
+ </thead>
946
+ <tbody>
947
+ <tr>
948
+ <td><code>connector_url</code></td>
949
+ <td>
950
+ <code>str</code>
951
+ </td>
952
+ <td>
953
+ <div class="doc-md-description">
954
+ <p>The URL of the Shuffle instance.</p>
955
+ </div>
956
+ </td>
957
+ </tr>
958
+ <tr>
959
+ <td><code>connector_api_key</code></td>
960
+ <td>
961
+ <code>str</code>
962
+ </td>
963
+ <td>
964
+ <div class="doc-md-description">
965
+ <p>The API key used for the Shuffle instance.</p>
966
+ </div>
967
+ </td>
968
+ </tr>
969
+ <tr>
970
+ <td><code>session</code></td>
971
+ <td>
972
+ <code>requests.<span title="requests.Session">Session</span></code>
973
+ </td>
974
+ <td>
975
+ <div class="doc-md-description">
976
+ <p>A requests session for making HTTP requests.</p>
977
+ </div>
978
+ </td>
979
+ </tr>
980
+ </tbody>
981
+ </table>
982
+
983
+<details class="methods" open>
984
+ <summary>Methods</summary>
985
+ <p>_collect_shuffle_details: Collects the details of the Shuffle connector.
986
+_are_details_collected: Checks whether the details for the Shuffle connector were successfully collected.
987
+_send_request: Sends a GET request to a provided URL.
988
+collect_workflows: Collects the workflows from Shuffle.
989
+_handle_request_error: Handles any errors that occur during a request.
990
+_collect_workflows: Collects the workflows from Shuffle.
991
+collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.
992
+_collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.
993
+collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.
994
+_collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.</p>
995
+</details>
996
+
997
+ <details class="quote">
998
+ <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
999
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
1000
+<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
1001
+<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
1002
+<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
1003
+<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
1004
+<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1005
+<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1006
+<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1007
+<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1008
+<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1009
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1010
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1011
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1012
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1013
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1014
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1015
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1016
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1017
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1018
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1019
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1020
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1021
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1022
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1023
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1024
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1025
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1026
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1027
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1028
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1029
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1030
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1031
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1032
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1033
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1034
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1035
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1036
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1037
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1038
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1039
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1040
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1041
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1042
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1043
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1044
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1045
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1046
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1047
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1048
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1049
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1050
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1051
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1052
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1053
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1054
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1055
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1056
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1057
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1058
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1059
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1060
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1061
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1062
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1063
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1064
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1065
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1066
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1067
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1068
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1069
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1070
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1071
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1072
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1073
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1074
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1075
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1076
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1077
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1078
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1079
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1080
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1081
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1082
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1083
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1084
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1085
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1086
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1087
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1088
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1089
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1090
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1091
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1092
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1093
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1094
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1095
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
1096
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
1097
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
1098
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
1099
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
1100
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
1101
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
1102
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
1103
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
1104
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
1105
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
1106
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
1107
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
1108
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
1109
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
1110
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
1111
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
1112
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
1113
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
1114
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
1115
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
1116
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
1117
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
1118
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
1119
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
1120
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
1121
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
1122
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
1123
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
1124
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
1125
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
1126
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1127
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1128
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
1129
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
1130
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
1131
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
1132
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
1133
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
1134
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
1135
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
1136
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
1137
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
1138
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
1139
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
1140
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
1141
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
1142
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
1143
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
1144
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
1145
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
1146
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
1147
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
1148
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
1149
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
1150
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
1151
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
1152
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
1153
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
1154
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
1155
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
1156
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
1157
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
1158
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
1159
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
1160
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
1161
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
1162
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
1163
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
1164
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
1165
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
1166
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
1167
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
1168
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
1169
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
1170
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
1171
+<span class="normal"><a href="#__codelineno-0-181">181</a></span>
1172
+<span class="normal"><a href="#__codelineno-0-182">182</a></span>
1173
+<span class="normal"><a href="#__codelineno-0-183">183</a></span>
1174
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
1175
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
1176
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
1177
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
1178
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
1179
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
1180
+<span class="normal"><a href="#__codelineno-0-190">190</a></span>
1181
+<span class="normal"><a href="#__codelineno-0-191">191</a></span>
1182
+<span class="normal"><a href="#__codelineno-0-192">192</a></span>
1183
+<span class="normal"><a href="#__codelineno-0-193">193</a></span>
1184
+<span class="normal"><a href="#__codelineno-0-194">194</a></span>
1185
+<span class="normal"><a href="#__codelineno-0-195">195</a></span>
1186
+<span class="normal"><a href="#__codelineno-0-196">196</a></span>
1187
+<span class="normal"><a href="#__codelineno-0-197">197</a></span>
1188
+<span class="normal"><a href="#__codelineno-0-198">198</a></span>
1189
+<span class="normal"><a href="#__codelineno-0-199">199</a></span>
1190
+<span class="normal"><a href="#__codelineno-0-200">200</a></span>
1191
+<span class="normal"><a href="#__codelineno-0-201">201</a></span>
1192
+<span class="normal"><a href="#__codelineno-0-202">202</a></span>
1193
+<span class="normal"><a href="#__codelineno-0-203">203</a></span>
1194
+<span class="normal"><a href="#__codelineno-0-204">204</a></span>
1195
+<span class="normal"><a href="#__codelineno-0-205">205</a></span>
1196
+<span class="normal"><a href="#__codelineno-0-206">206</a></span>
1197
+<span class="normal"><a href="#__codelineno-0-207">207</a></span>
1198
+<span class="normal"><a href="#__codelineno-0-208">208</a></span>
1199
+<span class="normal"><a href="#__codelineno-0-209">209</a></span>
1200
+<span class="normal"><a href="#__codelineno-0-210">210</a></span>
1201
+<span class="normal"><a href="#__codelineno-0-211">211</a></span>
1202
+<span class="normal"><a href="#__codelineno-0-212">212</a></span>
1203
+<span class="normal"><a href="#__codelineno-0-213">213</a></span>
1204
+<span class="normal"><a href="#__codelineno-0-214">214</a></span>
1205
+<span class="normal"><a href="#__codelineno-0-215">215</a></span>
1206
+<span class="normal"><a href="#__codelineno-0-216">216</a></span>
1207
+<span class="normal"><a href="#__codelineno-0-217">217</a></span>
1208
+<span class="normal"><a href="#__codelineno-0-218">218</a></span>
1209
+<span class="normal"><a href="#__codelineno-0-219">219</a></span>
1210
+<span class="normal"><a href="#__codelineno-0-220">220</a></span>
1211
+<span class="normal"><a href="#__codelineno-0-221">221</a></span>
1212
+<span class="normal"><a href="#__codelineno-0-222">222</a></span>
1213
+<span class="normal"><a href="#__codelineno-0-223">223</a></span>
1214
+<span class="normal"><a href="#__codelineno-0-224">224</a></span>
1215
+<span class="normal"><a href="#__codelineno-0-225">225</a></span>
1216
+<span class="normal"><a href="#__codelineno-0-226">226</a></span>
1217
+<span class="normal"><a href="#__codelineno-0-227">227</a></span>
1218
+<span class="normal"><a href="#__codelineno-0-228">228</a></span>
1219
+<span class="normal"><a href="#__codelineno-0-229">229</a></span>
1220
+<span class="normal"><a href="#__codelineno-0-230">230</a></span>
1221
+<span class="normal"><a href="#__codelineno-0-231">231</a></span>
1222
+<span class="normal"><a href="#__codelineno-0-232">232</a></span>
1223
+<span class="normal"><a href="#__codelineno-0-233">233</a></span>
1224
+<span class="normal"><a href="#__codelineno-0-234">234</a></span>
1225
+<span class="normal"><a href="#__codelineno-0-235">235</a></span>
1226
+<span class="normal"><a href="#__codelineno-0-236">236</a></span>
1227
+<span class="normal"><a href="#__codelineno-0-237">237</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span> <span class="nc">WorkflowsService</span><span class="p">:</span>
1228
+<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">"""</span>
1229
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> A service class that encapsulates the logic for retrieving workflow information from Shuffle.</span>
1230
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
1231
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
1232
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The URL of the Shuffle instance.</span>
1233
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_api_key (str): The API key used for the Shuffle instance.</span>
1234
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> session (requests.Session): A requests session for making HTTP requests.</span>
1235
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
1236
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Methods:</span>
1237
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> _collect_shuffle_details: Collects the details of the Shuffle connector.</span>
1238
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> _are_details_collected: Checks whether the details for the Shuffle connector were successfully collected.</span>
1239
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> _send_request: Sends a GET request to a provided URL.</span>
1240
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> collect_workflows: Collects the workflows from Shuffle.</span>
1241
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> _handle_request_error: Handles any errors that occur during a request.</span>
1242
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> _collect_workflows: Collects the workflows from Shuffle.</span>
1243
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.</span>
1244
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> _collect_workflow_details: Collects the workflow ID and workflow name from Shuffle.</span>
1245
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.</span>
1246
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> _collect_workflow_executions_status: Collects the execution status of a Shuffle Workflow by its ID.</span>
1247
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> """</span>
1248
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a>
1249
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1250
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_shuffle_details</span><span class="p">()</span>
1251
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span>
1252
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
1253
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">{</span><span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="si">}</span><span class="s2">"</span><span class="p">},</span>
1254
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span>
1255
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a>
1256
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">def</span> <span class="nf">_collect_shuffle_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1257
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="w"> </span><span class="sd">"""</span>
1258
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Collects the details of the Shuffle connector.</span>
1259
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
1260
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> The details are collected from a universal service which pulls connector details from a database.</span>
1261
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
1262
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
1263
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> tuple: A tuple containing the connection URL and API key of the Shuffle connector.</span>
1264
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> """</span>
1265
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="p">(</span>
1266
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1267
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
1268
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="s2">"Shuffle"</span><span class="p">)</span>
1269
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
1270
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">def</span> <span class="nf">_are_details_collected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1271
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="w"> </span><span class="sd">"""</span>
1272
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Checks whether the details for the Shuffle connector were successfully collected.</span>
1273
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
1274
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
1275
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> bool: True if all details were collected, False otherwise.</span>
1276
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> """</span>
1277
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="nb">all</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">])</span>
1278
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1279
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">def</span> <span class="nf">_send_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1280
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="w"> </span><span class="sd">"""</span>
1281
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Sends a GET request to a provided URL.</span>
1282
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1283
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Args:</span>
1284
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> url (str): The URL to send the GET request to.</span>
1285
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
1286
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> Returns:</span>
1287
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> requests.Response: The response from the GET request.</span>
1288
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> """</span>
1289
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
1290
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">url</span><span class="p">,</span>
1291
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1292
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">)</span>
1293
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
1294
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">def</span> <span class="nf">collect_workflows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1295
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">"""</span>
1296
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Collects the workflows from Shuffle.</span>
1297
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
1298
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
1299
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflows.</span>
1300
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> """</span>
1301
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1302
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">return</span> <span class="p">{</span>
1303
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Shuffle details"</span><span class="p">,</span>
1304
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1305
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">}</span>
1306
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1307
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflows</span><span class="p">()</span>
1308
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1309
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="n">workflows</span>
1310
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1311
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="p">{</span>
1312
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflows"</span><span class="p">,</span>
1313
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1314
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"workflows"</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"workflows"</span><span class="p">],</span>
1315
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">}</span>
1316
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a>
1317
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">def</span> <span class="nf">_handle_request_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1318
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="w"> </span><span class="sd">"""</span>
1319
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Handles any errors that occur during a request.</span>
1320
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a>
1321
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> Args:</span>
1322
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> err (Exception): The exception that occurred.</span>
1323
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
1324
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
1325
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> dict: A dictionary containing the success status and an error message.</span>
1326
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> """</span>
1327
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect workflows from Shuffle: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
1328
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="k">return</span> <span class="p">{</span>
1329
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect workflows from Shuffle"</span><span class="p">,</span>
1330
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1331
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="p">}</span>
1332
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a>
1333
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">def</span> <span class="nf">_collect_workflows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1334
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="w"> </span><span class="sd">"""</span>
1335
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> Collects the workflows from Shuffle.</span>
1336
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
1337
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> Returns:</span>
1338
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflows.</span>
1339
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> """</span>
1340
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">try</span><span class="p">:</span>
1341
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/v1/workflows"</span><span class="p">)</span>
1342
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
1343
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
1344
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_request_error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
1345
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a>
1346
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="k">return</span> <span class="p">{</span>
1347
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflows from Shuffle"</span><span class="p">,</span>
1348
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1349
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="s2">"workflows"</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span>
1350
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="p">}</span>
1351
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a>
1352
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">def</span> <span class="nf">collect_workflow_details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1353
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">"""</span>
1354
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Collects the workflow ID and workflow name from Shuffle.</span>
1355
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a>
1356
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> Returns:</span>
1357
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow IDs.</span>
1358
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="sd"> """</span>
1359
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1360
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">return</span> <span class="p">{</span>
1361
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Shuffle details"</span><span class="p">,</span>
1362
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1363
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="p">}</span>
1364
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
1365
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_details</span><span class="p">()</span>
1366
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1367
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">return</span> <span class="n">workflows</span>
1368
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
1369
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">return</span> <span class="p">{</span>
1370
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflow details"</span><span class="p">,</span>
1371
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1372
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">"workflows"</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"workflows"</span><span class="p">],</span>
1373
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="p">}</span>
1374
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a>
1375
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">def</span> <span class="nf">_collect_workflow_details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1376
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="w"> </span><span class="sd">"""</span>
1377
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> Collects the workflow ID and workflow name from Shuffle.</span>
1378
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a>
1379
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> Returns:</span>
1380
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow IDs.</span>
1381
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a><span class="sd"> """</span>
1382
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">try</span><span class="p">:</span>
1383
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/v1/workflows"</span><span class="p">)</span>
1384
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
1385
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
1386
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_request_error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
1387
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a>
1388
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
1389
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="n">workflow_details</span> <span class="o">=</span> <span class="p">[]</span>
1390
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">for</span> <span class="n">workflow</span> <span class="ow">in</span> <span class="n">workflows</span><span class="p">:</span>
1391
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">workflow_details</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1392
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="p">{</span><span class="s2">"workflow_id"</span><span class="p">:</span> <span class="n">workflow</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> <span class="s2">"workflow_name"</span><span class="p">:</span> <span class="n">workflow</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]},</span>
1393
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="p">)</span>
1394
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
1395
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="p">{</span>
1396
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflow details from Shuffle"</span><span class="p">,</span>
1397
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1398
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="s2">"workflows"</span><span class="p">:</span> <span class="n">workflow_details</span><span class="p">,</span>
1399
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">}</span>
1400
+<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
1401
+<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">def</span> <span class="nf">collect_workflow_executions_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1402
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="w"> </span><span class="sd">"""</span>
1403
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> Collects the execution status of a Shuffle Workflow by its ID.</span>
1404
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
1405
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> Returns:</span>
1406
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow execution status.</span>
1407
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> """</span>
1408
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1409
+<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">return</span> <span class="p">{</span>
1410
+<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Shuffle details"</span><span class="p">,</span>
1411
+<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1412
+<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="p">}</span>
1413
+<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
1414
+<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">executions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span>
1415
+<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">executions</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1416
+<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">return</span> <span class="n">executions</span>
1417
+<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
1418
+<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">return</span> <span class="p">{</span>
1419
+<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflow executions"</span><span class="p">,</span>
1420
+<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1421
+<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="s2">"executions"</span><span class="p">:</span> <span class="n">executions</span><span class="p">[</span><span class="s2">"executions"</span><span class="p">],</span>
1422
+<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">}</span>
1423
+<a id="__codelineno-0-205" name="__codelineno-0-205"></a>
1424
+<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="k">def</span> <span class="nf">_collect_workflow_executions_status</span><span class="p">(</span>
1425
+<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="bp">self</span><span class="p">,</span>
1426
+<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1427
+<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1428
+<a id="__codelineno-0-210" name="__codelineno-0-210"></a><span class="w"> </span><span class="sd">"""</span>
1429
+<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd"> Collects the execution status of a Shuffle Workflow by its ID.</span>
1430
+<a id="__codelineno-0-212" name="__codelineno-0-212"></a>
1431
+<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> Returns:</span>
1432
+<a id="__codelineno-0-214" name="__codelineno-0-214"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow execution status.</span>
1433
+<a id="__codelineno-0-215" name="__codelineno-0-215"></a><span class="sd"> """</span>
1434
+<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">try</span><span class="p">:</span>
1435
+<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_send_request</span><span class="p">(</span>
1436
+<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/v1/workflows/</span><span class="si">{</span><span class="n">workflow_id</span><span class="si">}</span><span class="s2">/executions"</span><span class="p">,</span>
1437
+<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="p">)</span>
1438
+<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
1439
+<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
1440
+<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_request_error</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
1441
+<a id="__codelineno-0-223" name="__codelineno-0-223"></a>
1442
+<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="n">executions</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
1443
+<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="k">if</span> <span class="n">executions</span><span class="p">:</span>
1444
+<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="n">status</span> <span class="o">=</span> <span class="n">executions</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"status"</span><span class="p">]</span>
1445
+<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1446
+<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="n">status</span> <span class="o">=</span> <span class="s2">"Never Ran"</span>
1447
+<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="k">else</span><span class="p">:</span>
1448
+<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No Workflow Executions found from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
1449
+<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="n">status</span> <span class="o">=</span> <span class="kc">None</span>
1450
+<a id="__codelineno-0-232" name="__codelineno-0-232"></a>
1451
+<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">return</span> <span class="p">{</span>
1452
+<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflow executions from Shuffle"</span><span class="p">,</span>
1453
+<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1454
+<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="s2">"executions"</span><span class="p">:</span> <span class="n">status</span><span class="p">,</span>
1455
+<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="p">}</span>
1456
+</code></pre></div></td></tr></table></div>
1457
+ </details>
1458
+
1459
+
1460
+
1461
+ <div class="doc doc-children">
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+<div class="doc doc-object doc-function">
1472
+
1473
+
1474
+
1475
+<h3 id="app.services.Shuffle.workflows.WorkflowsService.collect_workflow_details" class="doc doc-heading">
1476
+<code class="highlight language-python"><span class="n">collect_workflow_details</span><span class="p">()</span></code>
1477
+
1478
+</h3>
1479
+
1480
+
1481
+ <div class="doc doc-contents ">
1482
+
1483
+ <p>Collects the workflow ID and workflow name from Shuffle.</p>
1484
+
1485
+ <p><strong>Returns:</strong></p>
1486
+ <table>
1487
+ <thead>
1488
+ <tr>
1489
+<th>Name</th> <th>Type</th>
1490
+ <th>Description</th>
1491
+ </tr>
1492
+ </thead>
1493
+ <tbody>
1494
+ <tr>
1495
+<td><code>dict</code></td> <td>
1496
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
1497
+ </td>
1498
+ <td>
1499
+ <div class="doc-md-description">
1500
+ <p>A dictionary containing the success status, a message, and potentially the workflow IDs.</p>
1501
+ </div>
1502
+ </td>
1503
+ </tr>
1504
+ </tbody>
1505
+ </table>
1506
+
1507
+ <details class="quote">
1508
+ <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
1509
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-134">134</a></span>
1510
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
1511
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1512
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1513
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
1514
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
1515
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
1516
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
1517
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
1518
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
1519
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
1520
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
1521
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
1522
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
1523
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
1524
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
1525
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
1526
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
1527
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
1528
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
1529
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
1530
+<span class="normal"><a href="#__codelineno-0-155">155</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="k">def</span> <span class="nf">collect_workflow_details</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1531
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a><span class="w"> </span><span class="sd">"""</span>
1532
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="sd"> Collects the workflow ID and workflow name from Shuffle.</span>
1533
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a>
1534
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="sd"> Returns:</span>
1535
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow IDs.</span>
1536
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="sd"> """</span>
1537
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1538
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">return</span> <span class="p">{</span>
1539
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Shuffle details"</span><span class="p">,</span>
1540
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1541
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="p">}</span>
1542
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
1543
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_details</span><span class="p">()</span>
1544
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1545
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">return</span> <span class="n">workflows</span>
1546
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
1547
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">return</span> <span class="p">{</span>
1548
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflow details"</span><span class="p">,</span>
1549
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1550
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">"workflows"</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"workflows"</span><span class="p">],</span>
1551
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="p">}</span>
1552
+</code></pre></div></td></tr></table></div>
1553
+ </details>
1554
+ </div>
1555
+
1556
+</div>
1557
+
1558
+<div class="doc doc-object doc-function">
1559
+
1560
+
1561
+
1562
+<h3 id="app.services.Shuffle.workflows.WorkflowsService.collect_workflow_executions_status" class="doc doc-heading">
1563
+<code class="highlight language-python"><span class="n">collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span></code>
1564
+
1565
+</h3>
1566
+
1567
+
1568
+ <div class="doc doc-contents ">
1569
+
1570
+ <p>Collects the execution status of a Shuffle Workflow by its ID.</p>
1571
+
1572
+ <p><strong>Returns:</strong></p>
1573
+ <table>
1574
+ <thead>
1575
+ <tr>
1576
+<th>Name</th> <th>Type</th>
1577
+ <th>Description</th>
1578
+ </tr>
1579
+ </thead>
1580
+ <tbody>
1581
+ <tr>
1582
+<td><code>dict</code></td> <td>
1583
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
1584
+ </td>
1585
+ <td>
1586
+ <div class="doc-md-description">
1587
+ <p>A dictionary containing the success status, a message, and potentially the workflow execution status.</p>
1588
+ </div>
1589
+ </td>
1590
+ </tr>
1591
+ </tbody>
1592
+ </table>
1593
+
1594
+ <details class="quote">
1595
+ <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
1596
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-183">183</a></span>
1597
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
1598
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
1599
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
1600
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
1601
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
1602
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
1603
+<span class="normal"><a href="#__codelineno-0-190">190</a></span>
1604
+<span class="normal"><a href="#__codelineno-0-191">191</a></span>
1605
+<span class="normal"><a href="#__codelineno-0-192">192</a></span>
1606
+<span class="normal"><a href="#__codelineno-0-193">193</a></span>
1607
+<span class="normal"><a href="#__codelineno-0-194">194</a></span>
1608
+<span class="normal"><a href="#__codelineno-0-195">195</a></span>
1609
+<span class="normal"><a href="#__codelineno-0-196">196</a></span>
1610
+<span class="normal"><a href="#__codelineno-0-197">197</a></span>
1611
+<span class="normal"><a href="#__codelineno-0-198">198</a></span>
1612
+<span class="normal"><a href="#__codelineno-0-199">199</a></span>
1613
+<span class="normal"><a href="#__codelineno-0-200">200</a></span>
1614
+<span class="normal"><a href="#__codelineno-0-201">201</a></span>
1615
+<span class="normal"><a href="#__codelineno-0-202">202</a></span>
1616
+<span class="normal"><a href="#__codelineno-0-203">203</a></span>
1617
+<span class="normal"><a href="#__codelineno-0-204">204</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="k">def</span> <span class="nf">collect_workflow_executions_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">workflow_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1618
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="w"> </span><span class="sd">"""</span>
1619
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> Collects the execution status of a Shuffle Workflow by its ID.</span>
1620
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
1621
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> Returns:</span>
1622
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflow execution status.</span>
1623
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> """</span>
1624
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1625
+<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">return</span> <span class="p">{</span>
1626
+<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Shuffle details"</span><span class="p">,</span>
1627
+<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1628
+<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="p">}</span>
1629
+<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
1630
+<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">executions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflow_executions_status</span><span class="p">(</span><span class="n">workflow_id</span><span class="p">)</span>
1631
+<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">executions</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1632
+<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">return</span> <span class="n">executions</span>
1633
+<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
1634
+<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">return</span> <span class="p">{</span>
1635
+<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflow executions"</span><span class="p">,</span>
1636
+<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1637
+<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="s2">"executions"</span><span class="p">:</span> <span class="n">executions</span><span class="p">[</span><span class="s2">"executions"</span><span class="p">],</span>
1638
+<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">}</span>
1639
+</code></pre></div></td></tr></table></div>
1640
+ </details>
1641
+ </div>
1642
+
1643
+</div>
1644
+
1645
+<div class="doc doc-object doc-function">
1646
+
1647
+
1648
+
1649
+<h3 id="app.services.Shuffle.workflows.WorkflowsService.collect_workflows" class="doc doc-heading">
1650
+<code class="highlight language-python"><span class="n">collect_workflows</span><span class="p">()</span></code>
1651
+
1652
+</h3>
1653
+
1654
+
1655
+ <div class="doc doc-contents ">
1656
+
1657
+ <p>Collects the workflows from Shuffle.</p>
1658
+
1659
+ <p><strong>Returns:</strong></p>
1660
+ <table>
1661
+ <thead>
1662
+ <tr>
1663
+<th>Name</th> <th>Type</th>
1664
+ <th>Description</th>
1665
+ </tr>
1666
+ </thead>
1667
+ <tbody>
1668
+ <tr>
1669
+<td><code>dict</code></td> <td>
1670
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
1671
+ </td>
1672
+ <td>
1673
+ <div class="doc-md-description">
1674
+ <p>A dictionary containing the success status, a message, and potentially the workflows.</p>
1675
+ </div>
1676
+ </td>
1677
+ </tr>
1678
+ </tbody>
1679
+ </table>
1680
+
1681
+ <details class="quote">
1682
+ <summary>Source code in <code>app\services\Shuffle\workflows.py</code></summary>
1683
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-76">76</a></span>
1684
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1685
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1686
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1687
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1688
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1689
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1690
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1691
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1692
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1693
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1694
+<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1695
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1696
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1697
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1698
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1699
+<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1700
+<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1701
+<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1702
+<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1703
+<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1704
+<span class="normal"><a href="#__codelineno-0-97">97</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="k">def</span> <span class="nf">collect_workflows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1705
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">"""</span>
1706
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Collects the workflows from Shuffle.</span>
1707
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
1708
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
1709
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially the workflows.</span>
1710
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> """</span>
1711
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
1712
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">return</span> <span class="p">{</span>
1713
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Shuffle details"</span><span class="p">,</span>
1714
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1715
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">}</span>
1716
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1717
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">workflows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_workflows</span><span class="p">()</span>
1718
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1719
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="n">workflows</span>
1720
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1721
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="p">{</span>
1722
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected workflows"</span><span class="p">,</span>
1723
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1724
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"workflows"</span><span class="p">:</span> <span class="n">workflows</span><span class="p">[</span><span class="s2">"workflows"</span><span class="p">],</span>
1725
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">}</span>
1726
+</code></pre></div></td></tr></table></div>
1727
+ </details>
1728
+ </div>
1729
+
1730
+</div>
1731
+
1732
+
1733
+
1734
+ </div>
1735
+
1736
+ </div>
1737
+
1738
+</div>
1739
+
1740
+
1741
+
1742
+
1743
+ </div>
1744
+
1745
+ </div>
1746
+
1747
+</div><p><br></p>
1748
+<h3 id="universal-services"><span style="color:red">Universal Services</span></h3>
1749
+
1750
+
1751
+<div class="doc doc-object doc-module">
1752
+
1753
+
1754
+<a id="app.services.Shuffle.universal"></a>
1755
+ <div class="doc doc-contents first">
1756
+
1757
+
1758
+
1759
+ <div class="doc doc-children">
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+<div class="doc doc-object doc-class">
1769
+
1770
+
1771
+
1772
+<h2 id="app.services.Shuffle.universal.UniversalService" class="doc doc-heading">
1773
+ <code>UniversalService</code>
1774
+
1775
+
1776
+</h2>
1777
+
1778
+
1779
+ <div class="doc doc-contents ">
1780
+
1781
+
1782
+ <p>A service class that encapsulates the logic for polling messages from Shuffle.</p>
1783
+
1784
+
1785
+ <details class="quote">
1786
+ <summary>Source code in <code>app\services\Shuffle\universal.py</code></summary>
1787
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-17">17</a></span>
1788
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1789
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1790
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1791
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1792
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1793
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1794
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1795
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1796
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1797
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1798
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1799
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1800
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1801
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1802
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1803
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1804
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1805
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1806
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1807
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1808
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1809
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1810
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1811
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1812
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1813
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1814
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1815
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1816
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1817
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1818
+<span class="normal"><a href="#__codelineno-0-48">48</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
1819
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="w"> </span><span class="sd">"""</span>
1820
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> A service class that encapsulates the logic for polling messages from Shuffle.</span>
1821
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> """</span>
1822
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
1823
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
1824
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="bp">self</span><span class="o">.</span><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="s2">"Shuffle"</span><span class="p">)</span>
1825
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="p">(</span>
1826
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1827
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_api_key</span><span class="p">,</span>
1828
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="s2">"Shuffle"</span><span class="p">)</span>
1829
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a>
1830
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">def</span> <span class="nf">collect_shuffle_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1831
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">"""</span>
1832
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Collects the details of the Shuffle connector.</span>
1833
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1834
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Args:</span>
1835
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> connector_name (str): The name of the Shuffle connector.</span>
1836
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
1837
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Returns:</span>
1838
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> tuple: A tuple containing the connection URL, and api key.</span>
1839
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> """</span>
1840
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
1841
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
1842
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
1843
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
1844
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="p">(</span>
1845
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_url"</span><span class="p">),</span>
1846
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_api_key"</span><span class="p">),</span>
1847
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="p">)</span>
1848
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">else</span><span class="p">:</span>
1849
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
1850
+</code></pre></div></td></tr></table></div>
1851
+ </details>
1852
+
1853
+
1854
+
1855
+ <div class="doc doc-children">
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+<div class="doc doc-object doc-function">
1866
+
1867
+
1868
+
1869
+<h3 id="app.services.Shuffle.universal.UniversalService.collect_shuffle_details" class="doc doc-heading">
1870
+<code class="highlight language-python"><span class="n">collect_shuffle_details</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
1871
+
1872
+</h3>
1873
+
1874
+
1875
+ <div class="doc doc-contents ">
1876
+
1877
+ <p>Collects the details of the Shuffle connector.</p>
1878
+
1879
+ <p><strong>Parameters:</strong></p>
1880
+ <table>
1881
+ <thead>
1882
+ <tr>
1883
+ <th>Name</th>
1884
+ <th>Type</th>
1885
+ <th>Description</th>
1886
+ <th>Default</th>
1887
+ </tr>
1888
+ </thead>
1889
+ <tbody>
1890
+ <tr>
1891
+ <td><code>connector_name</code></td>
1892
+ <td>
1893
+ <code>str</code>
1894
+ </td>
1895
+ <td>
1896
+ <div class="doc-md-description">
1897
+ <p>The name of the Shuffle connector.</p>
1898
+ </div>
1899
+ </td>
1900
+ <td>
1901
+ <em>required</em>
1902
+ </td>
1903
+ </tr>
1904
+ </tbody>
1905
+ </table>
1906
+
1907
+ <p><strong>Returns:</strong></p>
1908
+ <table>
1909
+ <thead>
1910
+ <tr>
1911
+<th>Name</th> <th>Type</th>
1912
+ <th>Description</th>
1913
+ </tr>
1914
+ </thead>
1915
+ <tbody>
1916
+ <tr>
1917
+<td><code>tuple</code></td> <td>
1918
+ </td>
1919
+ <td>
1920
+ <div class="doc-md-description">
1921
+ <p>A tuple containing the connection URL, and api key.</p>
1922
+ </div>
1923
+ </td>
1924
+ </tr>
1925
+ </tbody>
1926
+ </table>
1927
+
1928
+ <details class="quote">
1929
+ <summary>Source code in <code>app\services\Shuffle\universal.py</code></summary>
1930
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
1931
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1932
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1933
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1934
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1935
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1936
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1937
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1938
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1939
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1940
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1941
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1942
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1943
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1944
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1945
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1946
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1947
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1948
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1949
+<span class="normal"><a href="#__codelineno-0-48">48</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="k">def</span> <span class="nf">collect_shuffle_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1950
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="w"> </span><span class="sd">"""</span>
1951
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Collects the details of the Shuffle connector.</span>
1952
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1953
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Args:</span>
1954
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> connector_name (str): The name of the Shuffle connector.</span>
1955
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
1956
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Returns:</span>
1957
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> tuple: A tuple containing the connection URL, and api key.</span>
1958
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> """</span>
1959
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
1960
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
1961
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
1962
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
1963
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="p">(</span>
1964
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_url"</span><span class="p">),</span>
1965
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_api_key"</span><span class="p">),</span>
1966
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="p">)</span>
1967
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">else</span><span class="p">:</span>
1968
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
1969
+</code></pre></div></td></tr></table></div>
1970
+ </details>
1971
+ </div>
1972
+
1973
+</div>
1974
+
1975
+
1976
+
1977
+ </div>
1978
+
1979
+ </div>
1980
+
1981
+</div>
1982
+
1983
+
1984
+
1985
+
1986
+ </div>
1987
+
1988
+ </div>
1989
+
1990
+</div>
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+ </article>
1998
+ </div>
1999
+
2000
+
2001
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
2002
+
2003
+ </div>
2004
+
2005
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
2006
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
2007
+ Back to top
2008
+ </button>
2009
+
2010
+ </main>
2011
+
2012
+ <footer class="md-footer">
2013
+
2014
+ <div class="md-footer-meta md-typeset">
2015
+ <div class="md-footer-meta__inner md-grid">
2016
+ <div class="md-copyright">
2017
+
2018
+ <div class="md-copyright__highlight">
2019
+ © 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
2020
+
2021
+ </div>
2022
+
2023
+
2024
+ Made with
2025
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2026
+ Material for MkDocs
2027
+ </a>
2028
+
2029
+</div>
2030
+
2031
+ </div>
2032
+ </div>
2033
+</footer>
2034
+
2035
+ </div>
2036
+ <div class="md-dialog" data-md-component="dialog">
2037
+ <div class="md-dialog__inner md-typeset"></div>
2038
+ </div>
2039
+
2040
+ <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
2041
+
2042
+
2043
+ <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
2044
+
2045
+
2046
+ </body>
2047
+</html>
\ No newline at end of file
backend/site/sitemap.xml.gz
Binary files a/backend/site/sitemap.xml.gz and b/backend/site/sitemap.xml.gz differ
backend/site/velociraptor/index.html
renamed
+84
-57
@@ -9,17 +9,17 @@
9
10
11
12
- <link rel="prev" href="../alerts/">
12
+ <link rel="prev" href="../wazuhmanager/">
13
14
15
- <link rel="next" href="../cases/">
15
+ <link rel="next" href="../shuffle/">
16
17
<link rel="icon" href="../assets/images/favicon.png">
18
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
20
21
22
- <title>Artifacts - SOCFortress CoPilot</title>
22
+ <title>Velociraptor - SOCFortress CoPilot</title>
23
24
25
@@ -73,7 +73,7 @@
73
<div data-md-component="skip">
74
75
76
- <a href="#artifacts-overview" class="md-skip">
76
+ <a href="#velociraptor-overview" class="md-skip">
77
Skip to content
78
</a>
79
@@ -106,7 +106,7 @@
106
<div class="md-header__topic" data-md-component="header-topic">
107
<span class="md-ellipsis">
108
109
- Artifacts
109
+ Velociraptor
110
111
</span>
112
</div>
@@ -198,8 +198,8 @@
198
199
200
<li class="md-tabs__item">
201
- <a href="../alerts/" class="md-tabs__link">
202
- Alerts
201
+ <a href="../wazuhindexer/" class="md-tabs__link">
202
+ Wazuh-Indexer
203
</a>
204
</li>
205
@@ -207,13 +207,23 @@
207
208
209
210
-
210
+
211
+
212
+ <li class="md-tabs__item">
213
+ <a href="../dfiriris/" class="md-tabs__link">
214
+ Dfir-Iris
215
+ </a>
216
+ </li>
217
+
218
+
219
+
220
+
221
222
223
224
<li class="md-tabs__item">
215
- <a href="./" class="md-tabs__link md-tabs__link--active">
216
- Artifacts
225
+ <a href="../graylog/" class="md-tabs__link">
226
+ Graylog
227
</a>
228
</li>
229
@@ -224,8 +234,8 @@
234
235
236
<li class="md-tabs__item">
227
- <a href="../cases/" class="md-tabs__link">
228
- Cases
237
+ <a href="../wazuhmanager/" class="md-tabs__link">
238
+ Wazuh-Manager
239
</a>
240
</li>
241
@@ -233,11 +243,13 @@
243
244
245
246
+
247
+
248
249
250
<li class="md-tabs__item">
239
- <a href="../graylog/" class="md-tabs__link">
240
- Graylog
251
+ <a href="./" class="md-tabs__link md-tabs__link--active">
252
+ Velociraptor
253
</a>
254
</li>
255
@@ -248,8 +260,8 @@
260
261
262
<li class="md-tabs__item">
251
- <a href="../wazuhmanager/" class="md-tabs__link">
252
- Wazuh-Manager
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
</a>
266
</li>
267
@@ -341,8 +353,53 @@
353
354
355
<li class="md-nav__item">
344
- <a href="../alerts/" class="md-nav__link">
345
- Alerts
356
+ <a href="../wazuhindexer/" class="md-nav__link">
357
+ Wazuh-Indexer
358
+ </a>
359
+ </li>
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+ <li class="md-nav__item">
371
+ <a href="../dfiriris/" class="md-nav__link">
372
+ Dfir-Iris
373
+ </a>
374
+ </li>
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+ <li class="md-nav__item">
386
+ <a href="../graylog/" class="md-nav__link">
387
+ Graylog
388
+ </a>
389
+ </li>
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+ <li class="md-nav__item">
401
+ <a href="../wazuhmanager/" class="md-nav__link">
402
+ Wazuh-Manager
403
</a>
404
</li>
405
@@ -364,12 +421,12 @@
421
422
423
<label class="md-nav__link md-nav__link--active" for="__toc">
367
- Artifacts
424
+ Velociraptor
425
<span class="md-nav__icon md-icon"></span>
426
</label>
427
428
<a href="./" class="md-nav__link md-nav__link--active">
372
- Artifacts
429
+ Velociraptor
430
</a>
431
432
@@ -386,11 +443,11 @@
443
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
444
445
<li class="md-nav__item">
389
- <a href="#artifacts-overview" class="md-nav__link">
390
- Artifacts Overview
446
+ <a href="#velociraptor-overview" class="md-nav__link">
447
+ Velociraptor Overview
448
</a>
449
393
- <nav class="md-nav" aria-label="Artifacts Overview">
450
+ <nav class="md-nav" aria-label="Velociraptor Overview">
451
<ul class="md-nav__list">
452
453
<li class="md-nav__item">
@@ -599,38 +656,8 @@
656
657
658
<li class="md-nav__item">
602
- <a href="../cases/" class="md-nav__link">
603
- Cases
604
- </a>
605
- </li>
606
-
607
-
608
-
609
-
610
-
611
-
612
-
613
-
614
-
615
-
616
- <li class="md-nav__item">
617
- <a href="../graylog/" class="md-nav__link">
618
- Graylog
619
- </a>
620
- </li>
621
-
622
-
623
-
624
-
625
-
626
-
627
-
628
-
629
-
630
-
631
- <li class="md-nav__item">
632
- <a href="../wazuhmanager/" class="md-nav__link">
633
- Wazuh-Manager
659
+ <a href="../shuffle/" class="md-nav__link">
660
+ Shuffle
661
</a>
662
</li>
663
@@ -651,9 +678,9 @@
678
679
680
654
- <h1>Artifacts</h1>
681
+ <h1>Velociraptor</h1>
682
656
-<h2 id="artifacts-overview">Artifacts Overview</h2>
683
+<h2 id="velociraptor-overview">Velociraptor Overview</h2>
684
<h3 id="artifacts-model"><span style="color:blue">Artifacts Model</span></h3>
685
686
backend/site/wazuhindexer/index.html
new
+3568
@@ -0,0 +1,3568 @@
1
+
2
+<!doctype html>
3
+<html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+
10
+
11
+
12
+ <link rel="prev" href="../agents/">
13
+
14
+
15
+ <link rel="next" href="../dfiriris/">
16
+
17
+ <link rel="icon" href="../assets/images/favicon.png">
18
+ <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
+
20
+
21
+
22
+ <title>Wazuh-Indexer - SOCFortress CoPilot</title>
23
+
24
+
25
+
26
+ <link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
27
+
28
+
29
+ <link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
40
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
41
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
42
+
43
+
44
+
45
+ <link rel="stylesheet" href="../assets/_mkdocstrings.css">
46
+
47
+ <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
48
+
49
+
50
+
51
+
52
+
53
+
54
+ </head>
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple">
65
+
66
+
67
+
68
+ <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
69
+
70
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
71
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
72
+ <label class="md-overlay" for="__drawer"></label>
73
+ <div data-md-component="skip">
74
+
75
+
76
+ <a href="#wazuh-indexer-overview" class="md-skip">
77
+ Skip to content
78
+ </a>
79
+
80
+ </div>
81
+ <div data-md-component="announce">
82
+
83
+ </div>
84
+
85
+
86
+
87
+
88
+<header class="md-header" data-md-component="header">
89
+ <nav class="md-header__inner md-grid" aria-label="Header">
90
+ <a href=".." title="SOCFortress CoPilot" class="md-header__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
91
+
92
+
93
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
94
+
95
+ </a>
96
+ <label class="md-header__button md-icon" for="__drawer">
97
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
98
+ </label>
99
+ <div class="md-header__title" data-md-component="header-title">
100
+ <div class="md-header__ellipsis">
101
+ <div class="md-header__topic">
102
+ <span class="md-ellipsis">
103
+ SOCFortress CoPilot
104
+ </span>
105
+ </div>
106
+ <div class="md-header__topic" data-md-component="header-topic">
107
+ <span class="md-ellipsis">
108
+
109
+ Wazuh-Indexer
110
+
111
+ </span>
112
+ </div>
113
+ </div>
114
+ </div>
115
+
116
+
117
+ <form class="md-header__option" data-md-component="palette">
118
+
119
+
120
+
121
+
122
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
123
+
124
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
125
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
126
+ </label>
127
+
128
+
129
+
130
+
131
+
132
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="lime" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
133
+
134
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
135
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
136
+ </label>
137
+
138
+
139
+ </form>
140
+
141
+
142
+
143
+
144
+
145
+ </nav>
146
+
147
+</header>
148
+
149
+ <div class="md-container" data-md-component="container">
150
+
151
+
152
+
153
+
154
+
155
+<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
156
+ <div class="md-grid">
157
+ <ul class="md-tabs__list">
158
+
159
+
160
+
161
+
162
+
163
+
164
+ <li class="md-tabs__item">
165
+ <a href=".." class="md-tabs__link">
166
+ Home
167
+ </a>
168
+ </li>
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ <li class="md-tabs__item">
177
+ <a href="../connectors/" class="md-tabs__link">
178
+ Connectors
179
+ </a>
180
+ </li>
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+ <li class="md-tabs__item">
189
+ <a href="../agents/" class="md-tabs__link">
190
+ Agents
191
+ </a>
192
+ </li>
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+ <li class="md-tabs__item">
203
+ <a href="./" class="md-tabs__link md-tabs__link--active">
204
+ Wazuh-Indexer
205
+ </a>
206
+ </li>
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+ <li class="md-tabs__item">
215
+ <a href="../dfiriris/" class="md-tabs__link">
216
+ Dfir-Iris
217
+ </a>
218
+ </li>
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+ <li class="md-tabs__item">
227
+ <a href="../graylog/" class="md-tabs__link">
228
+ Graylog
229
+ </a>
230
+ </li>
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+ <li class="md-tabs__item">
239
+ <a href="../wazuhmanager/" class="md-tabs__link">
240
+ Wazuh-Manager
241
+ </a>
242
+ </li>
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+ <li class="md-tabs__item">
251
+ <a href="../velociraptor/" class="md-tabs__link">
252
+ Velociraptor
253
+ </a>
254
+ </li>
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <li class="md-tabs__item">
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
+ </a>
266
+ </li>
267
+
268
+
269
+ </ul>
270
+ </div>
271
+</nav>
272
+
273
+
274
+
275
+ <main class="md-main" data-md-component="main">
276
+ <div class="md-main__inner md-grid">
277
+
278
+
279
+
280
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
281
+ <div class="md-sidebar__scrollwrap">
282
+ <div class="md-sidebar__inner">
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
291
+ <label class="md-nav__title" for="__drawer">
292
+ <a href=".." title="SOCFortress CoPilot" class="md-nav__button md-logo" aria-label="SOCFortress CoPilot" data-md-component="logo">
293
+
294
+
295
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
296
+
297
+ </a>
298
+ SOCFortress CoPilot
299
+ </label>
300
+
301
+ <ul class="md-nav__list" data-md-scrollfix>
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+ <li class="md-nav__item">
311
+ <a href=".." class="md-nav__link">
312
+ Home
313
+ </a>
314
+ </li>
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+ <li class="md-nav__item">
326
+ <a href="../connectors/" class="md-nav__link">
327
+ Connectors
328
+ </a>
329
+ </li>
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+ <li class="md-nav__item">
341
+ <a href="../agents/" class="md-nav__link">
342
+ Agents
343
+ </a>
344
+ </li>
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+ <li class="md-nav__item md-nav__item--active">
358
+
359
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
360
+
361
+
362
+
363
+ <label class="md-nav__link md-nav__link--active" for="__toc">
364
+ Wazuh-Indexer
365
+ <span class="md-nav__icon md-icon"></span>
366
+ </label>
367
+
368
+ <a href="./" class="md-nav__link md-nav__link--active">
369
+ Wazuh-Indexer
370
+ </a>
371
+
372
+
373
+
374
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
375
+
376
+
377
+
378
+
379
+ <label class="md-nav__title" for="__toc">
380
+ <span class="md-nav__icon md-icon"></span>
381
+ Table of contents
382
+ </label>
383
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
384
+
385
+ <li class="md-nav__item">
386
+ <a href="#wazuh-indexer-overview" class="md-nav__link">
387
+ Wazuh-Indexer Overview
388
+ </a>
389
+
390
+ <nav class="md-nav" aria-label="Wazuh-Indexer Overview">
391
+ <ul class="md-nav__list">
392
+
393
+ <li class="md-nav__item">
394
+ <a href="#alert-routes" class="md-nav__link">
395
+ Alert Routes
396
+ </a>
397
+
398
+</li>
399
+
400
+ </ul>
401
+ </nav>
402
+
403
+</li>
404
+
405
+ <li class="md-nav__item">
406
+ <a href="#app.routes.alerts" class="md-nav__link">
407
+ app.routes.alerts
408
+ </a>
409
+
410
+</li>
411
+
412
+ <li class="md-nav__item">
413
+ <a href="#app.routes.alerts.get_alerts" class="md-nav__link">
414
+ get_alerts()
415
+ </a>
416
+
417
+ <nav class="md-nav" aria-label="get_alerts()">
418
+ <ul class="md-nav__list">
419
+
420
+ <li class="md-nav__item">
421
+ <a href="#wazuh-indexer-routes" class="md-nav__link">
422
+ Wazuh-Indexer Routes
423
+ </a>
424
+
425
+</li>
426
+
427
+ </ul>
428
+ </nav>
429
+
430
+</li>
431
+
432
+ <li class="md-nav__item">
433
+ <a href="#app.routes.wazuhindexer" class="md-nav__link">
434
+ app.routes.wazuhindexer
435
+ </a>
436
+
437
+</li>
438
+
439
+ <li class="md-nav__item">
440
+ <a href="#app.routes.wazuhindexer.get_cluster_health" class="md-nav__link">
441
+ get_cluster_health()
442
+ </a>
443
+
444
+</li>
445
+
446
+ <li class="md-nav__item">
447
+ <a href="#app.routes.wazuhindexer.get_indices_summary" class="md-nav__link">
448
+ get_indices_summary()
449
+ </a>
450
+
451
+</li>
452
+
453
+ <li class="md-nav__item">
454
+ <a href="#app.routes.wazuhindexer.get_node_allocation" class="md-nav__link">
455
+ get_node_allocation()
456
+ </a>
457
+
458
+</li>
459
+
460
+ <li class="md-nav__item">
461
+ <a href="#app.routes.wazuhindexer.get_shards" class="md-nav__link">
462
+ get_shards()
463
+ </a>
464
+
465
+ <nav class="md-nav" aria-label="get_shards()">
466
+ <ul class="md-nav__list">
467
+
468
+ <li class="md-nav__item">
469
+ <a href="#alert-services" class="md-nav__link">
470
+ Alert Services
471
+ </a>
472
+
473
+</li>
474
+
475
+ </ul>
476
+ </nav>
477
+
478
+</li>
479
+
480
+ <li class="md-nav__item">
481
+ <a href="#app.services.WazuhIndexer.alerts" class="md-nav__link">
482
+ app.services.WazuhIndexer.alerts
483
+ </a>
484
+
485
+</li>
486
+
487
+ <li class="md-nav__item">
488
+ <a href="#app.services.WazuhIndexer.alerts.AlertsService" class="md-nav__link">
489
+ AlertsService
490
+ </a>
491
+
492
+ <nav class="md-nav" aria-label="AlertsService">
493
+ <ul class="md-nav__list">
494
+
495
+ <li class="md-nav__item">
496
+ <a href="#app.services.WazuhIndexer.alerts.AlertsService.__init__" class="md-nav__link">
497
+ __init__()
498
+ </a>
499
+
500
+</li>
501
+
502
+ <li class="md-nav__item">
503
+ <a href="#app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="md-nav__link">
504
+ collect_alerts()
505
+ </a>
506
+
507
+</li>
508
+
509
+ <li class="md-nav__item">
510
+ <a href="#app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="md-nav__link">
511
+ is_index_skipped()
512
+ </a>
513
+
514
+</li>
515
+
516
+ <li class="md-nav__item">
517
+ <a href="#cluster-services" class="md-nav__link">
518
+ Cluster Services
519
+ </a>
520
+
521
+</li>
522
+
523
+ </ul>
524
+ </nav>
525
+
526
+</li>
527
+
528
+ <li class="md-nav__item">
529
+ <a href="#app.services.WazuhIndexer.cluster" class="md-nav__link">
530
+ app.services.WazuhIndexer.cluster
531
+ </a>
532
+
533
+</li>
534
+
535
+ <li class="md-nav__item">
536
+ <a href="#app.services.WazuhIndexer.cluster.ClusterService" class="md-nav__link">
537
+ ClusterService
538
+ </a>
539
+
540
+ <nav class="md-nav" aria-label="ClusterService">
541
+ <ul class="md-nav__list">
542
+
543
+ <li class="md-nav__item">
544
+ <a href="#app.services.WazuhIndexer.cluster.ClusterService.__init__" class="md-nav__link">
545
+ __init__()
546
+ </a>
547
+
548
+</li>
549
+
550
+ <li class="md-nav__item">
551
+ <a href="#app.services.WazuhIndexer.cluster.ClusterService.collect_cluster_health" class="md-nav__link">
552
+ collect_cluster_health()
553
+ </a>
554
+
555
+</li>
556
+
557
+ <li class="md-nav__item">
558
+ <a href="#app.services.WazuhIndexer.cluster.ClusterService.collect_node_allocation" class="md-nav__link">
559
+ collect_node_allocation()
560
+ </a>
561
+
562
+</li>
563
+
564
+ <li class="md-nav__item">
565
+ <a href="#app.services.WazuhIndexer.cluster.ClusterService.collect_shards" class="md-nav__link">
566
+ collect_shards()
567
+ </a>
568
+
569
+</li>
570
+
571
+ <li class="md-nav__item">
572
+ <a href="#index-services" class="md-nav__link">
573
+ Index Services
574
+ </a>
575
+
576
+</li>
577
+
578
+ </ul>
579
+ </nav>
580
+
581
+</li>
582
+
583
+ <li class="md-nav__item">
584
+ <a href="#app.services.WazuhIndexer.index" class="md-nav__link">
585
+ app.services.WazuhIndexer.index
586
+ </a>
587
+
588
+</li>
589
+
590
+ <li class="md-nav__item">
591
+ <a href="#app.services.WazuhIndexer.index.IndexService" class="md-nav__link">
592
+ IndexService
593
+ </a>
594
+
595
+ <nav class="md-nav" aria-label="IndexService">
596
+ <ul class="md-nav__list">
597
+
598
+ <li class="md-nav__item">
599
+ <a href="#app.services.WazuhIndexer.index.IndexService.__init__" class="md-nav__link">
600
+ __init__()
601
+ </a>
602
+
603
+</li>
604
+
605
+ <li class="md-nav__item">
606
+ <a href="#app.services.WazuhIndexer.index.IndexService.collect_indices_summary" class="md-nav__link">
607
+ collect_indices_summary()
608
+ </a>
609
+
610
+</li>
611
+
612
+ <li class="md-nav__item">
613
+ <a href="#universal-services" class="md-nav__link">
614
+ Universal Services
615
+ </a>
616
+
617
+</li>
618
+
619
+ </ul>
620
+ </nav>
621
+
622
+</li>
623
+
624
+ <li class="md-nav__item">
625
+ <a href="#app.services.WazuhIndexer.universal" class="md-nav__link">
626
+ app.services.WazuhIndexer.universal
627
+ </a>
628
+
629
+</li>
630
+
631
+ <li class="md-nav__item">
632
+ <a href="#app.services.WazuhIndexer.universal.UniversalService" class="md-nav__link">
633
+ UniversalService
634
+ </a>
635
+
636
+ <nav class="md-nav" aria-label="UniversalService">
637
+ <ul class="md-nav__list">
638
+
639
+ <li class="md-nav__item">
640
+ <a href="#app.services.WazuhIndexer.universal.UniversalService.collect_indices" class="md-nav__link">
641
+ collect_indices()
642
+ </a>
643
+
644
+</li>
645
+
646
+ <li class="md-nav__item">
647
+ <a href="#app.services.WazuhIndexer.universal.UniversalService.collect_wazuhindexer_details" class="md-nav__link">
648
+ collect_wazuhindexer_details()
649
+ </a>
650
+
651
+</li>
652
+
653
+ </ul>
654
+ </nav>
655
+
656
+</li>
657
+
658
+ </ul>
659
+
660
+</nav>
661
+
662
+ </li>
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+ <li class="md-nav__item">
674
+ <a href="../dfiriris/" class="md-nav__link">
675
+ Dfir-Iris
676
+ </a>
677
+ </li>
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+ <li class="md-nav__item">
689
+ <a href="../graylog/" class="md-nav__link">
690
+ Graylog
691
+ </a>
692
+ </li>
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+ <li class="md-nav__item">
704
+ <a href="../wazuhmanager/" class="md-nav__link">
705
+ Wazuh-Manager
706
+ </a>
707
+ </li>
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+ <li class="md-nav__item">
719
+ <a href="../velociraptor/" class="md-nav__link">
720
+ Velociraptor
721
+ </a>
722
+ </li>
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+ <li class="md-nav__item">
734
+ <a href="../shuffle/" class="md-nav__link">
735
+ Shuffle
736
+ </a>
737
+ </li>
738
+
739
+
740
+
741
+ </ul>
742
+</nav>
743
+ </div>
744
+ </div>
745
+ </div>
746
+
747
+
748
+
749
+
750
+ <div class="md-content" data-md-component="content">
751
+ <article class="md-content__inner md-typeset">
752
+
753
+
754
+
755
+
756
+ <h1>Wazuh-Indexer</h1>
757
+
758
+<h2 id="wazuh-indexer-overview">Wazuh-Indexer Overview</h2>
759
+<h3 id="alert-routes"><span style="color:green">Alert Routes</span></h3>
760
+
761
+
762
+<div class="doc doc-object doc-module">
763
+
764
+
765
+<a id="app.routes.alerts"></a>
766
+ <div class="doc doc-contents first">
767
+
768
+
769
+
770
+ <div class="doc doc-children">
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+<div class="doc doc-object doc-function">
781
+
782
+
783
+
784
+<h2 id="app.routes.alerts.get_alerts" class="doc doc-heading">
785
+<code class="highlight language-python"><span class="n">get_alerts</span><span class="p">()</span></code>
786
+
787
+</h2>
788
+
789
+
790
+ <div class="doc doc-contents ">
791
+
792
+ <p>Retrieves all alerts from the AlertsService.</p>
793
+<p>This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of
794
+the AlertsService class and calling its <code>collect_alerts</code> method. The result is a list of all alerts currently
795
+available.</p>
796
+
797
+ <p><strong>Returns:</strong></p>
798
+ <table>
799
+ <thead>
800
+ <tr>
801
+<th>Name</th> <th>Type</th>
802
+ <th>Description</th>
803
+ </tr>
804
+ </thead>
805
+ <tbody>
806
+ <tr>
807
+<td><code>jsonify</code></td> <td>
808
+ <code><span title="flask.jsonify">jsonify</span></code>
809
+ </td>
810
+ <td>
811
+ <div class="doc-md-description">
812
+ <p>A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</p>
813
+ </div>
814
+ </td>
815
+ </tr>
816
+ <tr>
817
+<td></td> <td>
818
+ <code><span title="flask.jsonify">jsonify</span></code>
819
+ </td>
820
+ <td>
821
+ <div class="doc-md-description">
822
+ <p>containing all its associated data.</p>
823
+ </div>
824
+ </td>
825
+ </tr>
826
+ </tbody>
827
+ </table>
828
+
829
+ <details class="quote">
830
+ <summary>Source code in <code>app\routes\alerts.py</code></summary>
831
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
832
+<span class="normal"><a href="#__codelineno-0-10">10</a></span>
833
+<span class="normal"><a href="#__codelineno-0-11">11</a></span>
834
+<span class="normal"><a href="#__codelineno-0-12">12</a></span>
835
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
836
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
837
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
838
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
839
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
840
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
841
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
842
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
843
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
844
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
845
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
846
+<span class="normal"><a href="#__codelineno-0-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/alerts"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
847
+<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">()</span> <span class="o">-></span> <span class="n">jsonify</span><span class="p">:</span>
848
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
849
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Retrieves all alerts from the AlertsService.</span>
850
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
851
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of</span>
852
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> the AlertsService class and calling its `collect_alerts` method. The result is a list of all alerts currently</span>
853
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> available.</span>
854
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
855
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Returns:</span>
856
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> jsonify: A JSON response containing a list of alerts. Each item in the list is a dictionary representing an alert,</span>
857
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> containing all its associated data.</span>
858
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> """</span>
859
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
860
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_alerts</span><span class="p">()</span>
861
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">alerts</span><span class="p">)</span>
862
+</code></pre></div></td></tr></table></div>
863
+ </details>
864
+ </div>
865
+
866
+</div>
867
+
868
+
869
+
870
+ </div>
871
+
872
+ </div>
873
+
874
+</div><p><br></p>
875
+<h3 id="wazuh-indexer-routes"><span style="color:green">Wazuh-Indexer Routes</span></h3>
876
+
877
+
878
+<div class="doc doc-object doc-module">
879
+
880
+
881
+<a id="app.routes.wazuhindexer"></a>
882
+ <div class="doc doc-contents first">
883
+
884
+
885
+
886
+ <div class="doc doc-children">
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+<div class="doc doc-object doc-function">
897
+
898
+
899
+
900
+<h2 id="app.routes.wazuhindexer.get_cluster_health" class="doc doc-heading">
901
+<code class="highlight language-python"><span class="n">get_cluster_health</span><span class="p">()</span></code>
902
+
903
+</h2>
904
+
905
+
906
+ <div class="doc doc-contents ">
907
+
908
+ <p>HTTP GET endpoint to collect Wazuh-Indexer cluster health information.</p>
909
+
910
+ <p><strong>Returns:</strong></p>
911
+ <table>
912
+ <thead>
913
+ <tr>
914
+<th>Name</th> <th>Type</th>
915
+ <th>Description</th>
916
+ </tr>
917
+ </thead>
918
+ <tbody>
919
+ <tr>
920
+<td><code>json</code></td> <td>
921
+ </td>
922
+ <td>
923
+ <div class="doc-md-description">
924
+ <p>A JSON response containing health information for the Wazuh-Indexer cluster.</p>
925
+ </div>
926
+ </td>
927
+ </tr>
928
+ </tbody>
929
+ </table>
930
+
931
+ <details class="quote">
932
+ <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
933
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-49">49</a></span>
934
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
935
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
936
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
937
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
938
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
939
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
940
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
941
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
942
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
943
+<span class="normal"><a href="#__codelineno-0-59">59</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/wazuh_indexer/health"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
944
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="k">def</span> <span class="nf">get_cluster_health</span><span class="p">():</span>
945
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="w"> </span><span class="sd">"""</span>
946
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> HTTP GET endpoint to collect Wazuh-Indexer cluster health information.</span>
947
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
948
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Returns:</span>
949
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> json: A JSON response containing health information for the Wazuh-Indexer cluster.</span>
950
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> """</span>
951
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ClusterService</span><span class="p">()</span>
952
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_cluster_health</span><span class="p">()</span>
953
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="n">indices</span>
954
+</code></pre></div></td></tr></table></div>
955
+ </details>
956
+ </div>
957
+
958
+</div>
959
+
960
+<div class="doc doc-object doc-function">
961
+
962
+
963
+
964
+<h2 id="app.routes.wazuhindexer.get_indices_summary" class="doc doc-heading">
965
+<code class="highlight language-python"><span class="n">get_indices_summary</span><span class="p">()</span></code>
966
+
967
+</h2>
968
+
969
+
970
+ <div class="doc doc-contents ">
971
+
972
+ <p>HTTP GET endpoint to list all available indices and collect relevant information for each.</p>
973
+<p>This includes:
974
+- Index name
975
+- Index health status
976
+- Document count in the index
977
+- Size of the index
978
+- Number of replicas for the index</p>
979
+
980
+ <p><strong>Returns:</strong></p>
981
+ <table>
982
+ <thead>
983
+ <tr>
984
+<th>Name</th> <th>Type</th>
985
+ <th>Description</th>
986
+ </tr>
987
+ </thead>
988
+ <tbody>
989
+ <tr>
990
+<td><code>json</code></td> <td>
991
+ </td>
992
+ <td>
993
+ <div class="doc-md-description">
994
+ <p>A JSON response containing a list of all available indices along with their respective details.</p>
995
+ </div>
996
+ </td>
997
+ </tr>
998
+ </tbody>
999
+ </table>
1000
+
1001
+ <details class="quote">
1002
+ <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
1003
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
1004
+<span class="normal"><a href="#__codelineno-0-10">10</a></span>
1005
+<span class="normal"><a href="#__codelineno-0-11">11</a></span>
1006
+<span class="normal"><a href="#__codelineno-0-12">12</a></span>
1007
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1008
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1009
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1010
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1011
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1012
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1013
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1014
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1015
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1016
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1017
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1018
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1019
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1020
+<span class="normal"><a href="#__codelineno-0-26">26</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/wazuh_indexer/indices"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1021
+<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">def</span> <span class="nf">get_indices_summary</span><span class="p">():</span>
1022
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
1023
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> HTTP GET endpoint to list all available indices and collect relevant information for each.</span>
1024
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
1025
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> This includes:</span>
1026
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> - Index name</span>
1027
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> - Index health status</span>
1028
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> - Document count in the index</span>
1029
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> - Size of the index</span>
1030
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> - Number of replicas for the index</span>
1031
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
1032
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Returns:</span>
1033
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> json: A JSON response containing a list of all available indices along with their respective details.</span>
1034
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> """</span>
1035
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">IndexService</span><span class="p">()</span>
1036
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_indices_summary</span><span class="p">()</span>
1037
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">return</span> <span class="n">indices</span>
1038
+</code></pre></div></td></tr></table></div>
1039
+ </details>
1040
+ </div>
1041
+
1042
+</div>
1043
+
1044
+<div class="doc doc-object doc-function">
1045
+
1046
+
1047
+
1048
+<h2 id="app.routes.wazuhindexer.get_node_allocation" class="doc doc-heading">
1049
+<code class="highlight language-python"><span class="n">get_node_allocation</span><span class="p">()</span></code>
1050
+
1051
+</h2>
1052
+
1053
+
1054
+ <div class="doc doc-contents ">
1055
+
1056
+ <p>HTTP GET endpoint to list all available indices allocation.</p>
1057
+<p>This includes:
1058
+- Disk space used by the index
1059
+- Available disk space
1060
+- Total disk space
1061
+- Disk usage percentage
1062
+- Node on which the index resides</p>
1063
+
1064
+ <p><strong>Returns:</strong></p>
1065
+ <table>
1066
+ <thead>
1067
+ <tr>
1068
+<th>Name</th> <th>Type</th>
1069
+ <th>Description</th>
1070
+ </tr>
1071
+ </thead>
1072
+ <tbody>
1073
+ <tr>
1074
+<td><code>json</code></td> <td>
1075
+ </td>
1076
+ <td>
1077
+ <div class="doc-md-description">
1078
+ <p>A JSON response containing a list of all available indices along with their respective allocation details.</p>
1079
+ </div>
1080
+ </td>
1081
+ </tr>
1082
+ </tbody>
1083
+ </table>
1084
+
1085
+ <details class="quote">
1086
+ <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
1087
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-29">29</a></span>
1088
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1089
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1090
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1091
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1092
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1093
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1094
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1095
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1096
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1097
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1098
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1099
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1100
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1101
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1102
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1103
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1104
+<span class="normal"><a href="#__codelineno-0-46">46</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/wazuh_indexer/allocation"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1105
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="k">def</span> <span class="nf">get_node_allocation</span><span class="p">():</span>
1106
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="w"> </span><span class="sd">"""</span>
1107
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> HTTP GET endpoint to list all available indices allocation.</span>
1108
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a>
1109
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> This includes:</span>
1110
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> - Disk space used by the index</span>
1111
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> - Available disk space</span>
1112
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> - Total disk space</span>
1113
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> - Disk usage percentage</span>
1114
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> - Node on which the index resides</span>
1115
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
1116
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Returns:</span>
1117
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> json: A JSON response containing a list of all available indices along with their respective allocation details.</span>
1118
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> """</span>
1119
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ClusterService</span><span class="p">()</span>
1120
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_node_allocation</span><span class="p">()</span>
1121
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="n">indices</span>
1122
+</code></pre></div></td></tr></table></div>
1123
+ </details>
1124
+ </div>
1125
+
1126
+</div>
1127
+
1128
+<div class="doc doc-object doc-function">
1129
+
1130
+
1131
+
1132
+<h2 id="app.routes.wazuhindexer.get_shards" class="doc doc-heading">
1133
+<code class="highlight language-python"><span class="n">get_shards</span><span class="p">()</span></code>
1134
+
1135
+</h2>
1136
+
1137
+
1138
+ <div class="doc doc-contents ">
1139
+
1140
+ <p>HTTP GET endpoint to collect information about Wazuh-Indexer shards.</p>
1141
+
1142
+ <p><strong>Returns:</strong></p>
1143
+ <table>
1144
+ <thead>
1145
+ <tr>
1146
+<th>Name</th> <th>Type</th>
1147
+ <th>Description</th>
1148
+ </tr>
1149
+ </thead>
1150
+ <tbody>
1151
+ <tr>
1152
+<td><code>json</code></td> <td>
1153
+ </td>
1154
+ <td>
1155
+ <div class="doc-md-description">
1156
+ <p>A JSON response containing information about the shards in the Wazuh-Indexer.</p>
1157
+ </div>
1158
+ </td>
1159
+ </tr>
1160
+ </tbody>
1161
+ </table>
1162
+
1163
+ <details class="quote">
1164
+ <summary>Source code in <code>app\routes\wazuhindexer.py</code></summary>
1165
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-62">62</a></span>
1166
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1167
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1168
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1169
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1170
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1171
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1172
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1173
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1174
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1175
+<span class="normal"><a href="#__codelineno-0-72">72</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/wazuh_indexer/shards"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
1176
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="k">def</span> <span class="nf">get_shards</span><span class="p">():</span>
1177
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">"""</span>
1178
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> HTTP GET endpoint to collect information about Wazuh-Indexer shards.</span>
1179
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
1180
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> Returns:</span>
1181
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> json: A JSON response containing information about the shards in the Wazuh-Indexer.</span>
1182
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> """</span>
1183
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ClusterService</span><span class="p">()</span>
1184
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">indices</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_shards</span><span class="p">()</span>
1185
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">return</span> <span class="n">indices</span>
1186
+</code></pre></div></td></tr></table></div>
1187
+ </details>
1188
+ </div>
1189
+
1190
+</div>
1191
+
1192
+
1193
+
1194
+ </div>
1195
+
1196
+ </div>
1197
+
1198
+</div><p><br></p>
1199
+<h3 id="alert-services"><span style="color:red">Alert Services</span></h3>
1200
+
1201
+
1202
+<div class="doc doc-object doc-module">
1203
+
1204
+
1205
+<a id="app.services.WazuhIndexer.alerts"></a>
1206
+ <div class="doc doc-contents first">
1207
+
1208
+
1209
+
1210
+ <div class="doc doc-children">
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+<div class="doc doc-object doc-class">
1220
+
1221
+
1222
+
1223
+<h2 id="app.services.WazuhIndexer.alerts.AlertsService" class="doc doc-heading">
1224
+ <code>AlertsService</code>
1225
+
1226
+
1227
+</h2>
1228
+
1229
+
1230
+ <div class="doc doc-contents ">
1231
+
1232
+
1233
+ <p>A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</p>
1234
+
1235
+ <p><strong>Attributes:</strong></p>
1236
+ <table>
1237
+ <thead>
1238
+ <tr>
1239
+ <th>Name</th>
1240
+ <th>Type</th>
1241
+ <th>Description</th>
1242
+ </tr>
1243
+ </thead>
1244
+ <tbody>
1245
+ <tr>
1246
+ <td><code>connector_url</code></td>
1247
+ <td>
1248
+ <code>str</code>
1249
+ </td>
1250
+ <td>
1251
+ <div class="doc-md-description">
1252
+ <p>The url to the Wazuh-Indexer.</p>
1253
+ </div>
1254
+ </td>
1255
+ </tr>
1256
+ <tr>
1257
+ <td><code>connector_username</code></td>
1258
+ <td>
1259
+ <code>str</code>
1260
+ </td>
1261
+ <td>
1262
+ <div class="doc-md-description">
1263
+ <p>The username for the Wazuh-Indexer.</p>
1264
+ </div>
1265
+ </td>
1266
+ </tr>
1267
+ <tr>
1268
+ <td><code>connector_password</code></td>
1269
+ <td>
1270
+ <code>str</code>
1271
+ </td>
1272
+ <td>
1273
+ <div class="doc-md-description">
1274
+ <p>The password for the Wazuh-Indexer.</p>
1275
+ </div>
1276
+ </td>
1277
+ </tr>
1278
+ <tr>
1279
+ <td><code>es</code></td>
1280
+ <td>
1281
+ <code><span title="elasticsearch7.Elasticsearch">Elasticsearch</span></code>
1282
+ </td>
1283
+ <td>
1284
+ <div class="doc-md-description">
1285
+ <p>The Elasticsearch client.</p>
1286
+ </div>
1287
+ </td>
1288
+ </tr>
1289
+ </tbody>
1290
+ </table>
1291
+
1292
+
1293
+ <details class="quote">
1294
+ <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1295
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
1296
+<span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
1297
+<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
1298
+<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
1299
+<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
1300
+<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1301
+<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1302
+<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1303
+<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1304
+<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1305
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1306
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1307
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1308
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1309
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1310
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1311
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1312
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1313
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1314
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1315
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1316
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1317
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1318
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1319
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1320
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1321
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1322
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1323
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1324
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1325
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1326
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1327
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1328
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1329
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1330
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1331
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1332
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1333
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1334
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1335
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1336
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1337
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1338
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1339
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1340
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1341
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1342
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1343
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1344
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1345
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1346
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1347
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1348
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1349
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1350
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1351
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1352
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1353
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1354
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1355
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1356
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1357
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1358
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1359
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1360
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1361
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1362
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1363
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1364
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1365
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1366
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1367
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1368
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1369
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1370
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1371
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1372
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1373
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1374
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1375
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1376
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1377
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1378
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1379
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1380
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1381
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1382
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1383
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1384
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1385
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1386
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1387
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1388
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1389
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1390
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1391
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
1392
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
1393
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
1394
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
1395
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
1396
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
1397
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
1398
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
1399
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
1400
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
1401
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
1402
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
1403
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
1404
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
1405
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
1406
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
1407
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
1408
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
1409
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
1410
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
1411
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
1412
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
1413
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
1414
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
1415
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
1416
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
1417
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
1418
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
1419
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
1420
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
1421
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
1422
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1423
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1424
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
1425
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
1426
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
1427
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
1428
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
1429
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
1430
+<span class="normal"><a href="#__codelineno-0-144">144</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
1431
+<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">"""</span>
1432
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</span>
1433
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
1434
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
1435
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The url to the Wazuh-Indexer.</span>
1436
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_username (str): The username for the Wazuh-Indexer.</span>
1437
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> connector_password (str): The password for the Wazuh-Indexer.</span>
1438
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> es (Elasticsearch): The Elasticsearch client.</span>
1439
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
1440
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
1441
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
1442
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="s2">"wazuh-statistics"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1443
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="s2">"wazuh-monitoring"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1444
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="p">}</span>
1445
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
1446
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1447
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">"""</span>
1448
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1449
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
1450
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1451
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1452
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1453
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1454
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
1455
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
1456
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1457
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
1458
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1459
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1460
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1461
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1462
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1463
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
1464
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1465
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
1466
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1467
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1468
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1469
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1470
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1471
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1472
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1473
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
1474
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
1475
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
1476
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1477
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1478
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1479
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1480
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
1481
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"</span>
1482
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1483
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1484
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1485
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1486
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1487
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> """</span>
1488
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1489
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
1490
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1491
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1492
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
1493
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1494
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1495
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1496
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
1497
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1498
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1499
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1500
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1501
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"indices_list"</span><span class="p">]:</span>
1502
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"wazuh_"</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
1503
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1504
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1505
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
1506
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">])</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
1507
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1508
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1509
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">"index_name"</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1510
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"total_alerts"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">]),</span>
1511
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"last_10_alerts"</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">],</span>
1512
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1513
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1514
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1515
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1516
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected alerts"</span><span class="p">,</span>
1517
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1518
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"alerts_summary"</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1519
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1520
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1521
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">def</span> <span class="nf">_collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1522
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">"""</span>
1523
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or the</span>
1524
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> `syslog_level` field is `ALERT` and return the results in descending order by the `timestamp_utc` field.</span>
1525
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
1526
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Args:</span>
1527
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> index_name (str): The name of the index to query.</span>
1528
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
1529
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
1530
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1531
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> """</span>
1532
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collecting alerts from </span><span class="si">{</span><span class="n">index_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
1533
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_query</span><span class="p">()</span>
1534
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
1535
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">query</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
1536
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">alerts_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">alert</span> <span class="k">for</span> <span class="n">alert</span> <span class="ow">in</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"hits"</span><span class="p">][</span><span class="s2">"hits"</span><span class="p">]]</span>
1537
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">{</span>
1538
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected alerts"</span><span class="p">,</span>
1539
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1540
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">"alerts"</span><span class="p">:</span> <span class="n">alerts_list</span><span class="p">,</span>
1541
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">}</span>
1542
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
1543
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect alerts: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
1544
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect alerts"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1545
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
1546
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="nd">@staticmethod</span>
1547
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">def</span> <span class="nf">_build_query</span><span class="p">()</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1548
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="w"> </span><span class="sd">"""</span>
1549
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> Builds the Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or</span>
1550
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> the `syslog_level` field is `ALERT`.</span>
1551
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
1552
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> Returns:</span>
1553
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Dict[str, object]: A dictionary representing the Elasticsearch query.</span>
1554
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> """</span>
1555
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="p">{</span>
1556
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">"query"</span><span class="p">:</span> <span class="p">{</span>
1557
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">"bool"</span><span class="p">:</span> <span class="p">{</span>
1558
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">"should"</span><span class="p">:</span> <span class="p">[</span>
1559
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">{</span><span class="s2">"range"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"rule_level"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"gte"</span><span class="p">:</span> <span class="mi">12</span><span class="p">}}},</span>
1560
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">{</span><span class="s2">"match"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"syslog_level"</span><span class="p">:</span> <span class="s2">"ALERT"</span><span class="p">}},</span>
1561
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">],</span>
1562
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">},</span>
1563
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="p">},</span>
1564
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">"sort"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"timestamp_utc"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="s2">"desc"</span><span class="p">}}],</span>
1565
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="p">}</span>
1566
+</code></pre></div></td></tr></table></div>
1567
+ </details>
1568
+
1569
+
1570
+
1571
+ <div class="doc doc-children">
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+<div class="doc doc-object doc-function">
1582
+
1583
+
1584
+
1585
+<h3 id="app.services.WazuhIndexer.alerts.AlertsService.__init__" class="doc doc-heading">
1586
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
1587
+
1588
+</h3>
1589
+
1590
+
1591
+ <div class="doc doc-contents ">
1592
+
1593
+ <p>Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</p>
1594
+
1595
+ <details class="quote">
1596
+ <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1597
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-25">25</a></span>
1598
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1599
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1600
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1601
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1602
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1603
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1604
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1605
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1606
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1607
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1608
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1609
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1610
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1611
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1612
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1613
+<span class="normal"><a href="#__codelineno-0-41">41</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1614
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">"""</span>
1615
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1616
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> """</span>
1617
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1618
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1619
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1620
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1621
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
1622
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
1623
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1624
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
1625
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1626
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1627
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1628
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1629
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1630
+</code></pre></div></td></tr></table></div>
1631
+ </details>
1632
+ </div>
1633
+
1634
+</div>
1635
+
1636
+<div class="doc doc-object doc-function">
1637
+
1638
+
1639
+
1640
+<h3 id="app.services.WazuhIndexer.alerts.AlertsService.collect_alerts" class="doc doc-heading">
1641
+<code class="highlight language-python"><span class="n">collect_alerts</span><span class="p">()</span></code>
1642
+
1643
+</h3>
1644
+
1645
+
1646
+ <div class="doc doc-contents ">
1647
+
1648
+ <p>Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"
1649
+and is not in the SKIP_INDEX_NAMES list.
1650
+Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p>
1651
+
1652
+ <p><strong>Returns:</strong></p>
1653
+ <table>
1654
+ <thead>
1655
+ <tr>
1656
+ <th>Type</th>
1657
+ <th>Description</th>
1658
+ </tr>
1659
+ </thead>
1660
+ <tbody>
1661
+ <tr>
1662
+ <td>
1663
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
1664
+ </td>
1665
+ <td>
1666
+ <div class="doc-md-description">
1667
+ <p>Dict[str, object]: A dictionary containing success status and alerts or an error message.</p>
1668
+ </div>
1669
+ </td>
1670
+ </tr>
1671
+ </tbody>
1672
+ </table>
1673
+
1674
+ <details class="quote">
1675
+ <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1676
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-58">58</a></span>
1677
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1678
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1679
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1680
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1681
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1682
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1683
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1684
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1685
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1686
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1687
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1688
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1689
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1690
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1691
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1692
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1693
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1694
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1695
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1696
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1697
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1698
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1699
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1700
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1701
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1702
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1703
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1704
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1705
+<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1706
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1707
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1708
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1709
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1710
+<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1711
+<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1712
+<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1713
+<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1714
+<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1715
+<span class="normal"><a href="#__codelineno-0-97">97</a></span>
1716
+<span class="normal"><a href="#__codelineno-0-98">98</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="k">def</span> <span class="nf">collect_alerts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
1717
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">"""</span>
1718
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with "wazuh_"</span>
1719
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1720
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1721
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1722
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1723
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1724
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> """</span>
1725
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1726
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
1727
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1728
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1729
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
1730
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1731
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1732
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1733
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_indices</span><span class="p">()</span>
1734
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
1735
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1736
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1737
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1738
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">for</span> <span class="n">index_name</span> <span class="ow">in</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">"indices_list"</span><span class="p">]:</span>
1739
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"wazuh_"</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">):</span>
1740
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1741
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1742
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">alerts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_alerts</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span>
1743
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">])</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
1744
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1745
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1746
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">"index_name"</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1747
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">"total_alerts"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">]),</span>
1748
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"last_10_alerts"</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">"alerts"</span><span class="p">],</span>
1749
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1750
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1751
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1752
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1753
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected alerts"</span><span class="p">,</span>
1754
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1755
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"alerts_summary"</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1756
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1757
+</code></pre></div></td></tr></table></div>
1758
+ </details>
1759
+ </div>
1760
+
1761
+</div>
1762
+
1763
+<div class="doc doc-object doc-function">
1764
+
1765
+
1766
+
1767
+<h3 id="app.services.WazuhIndexer.alerts.AlertsService.is_index_skipped" class="doc doc-heading">
1768
+<code class="highlight language-python"><span class="n">is_index_skipped</span><span class="p">(</span><span class="n">index_name</span><span class="p">)</span></code>
1769
+
1770
+</h3>
1771
+
1772
+
1773
+ <div class="doc doc-contents ">
1774
+
1775
+ <p>Checks whether the given index name should be skipped.</p>
1776
+
1777
+ <p><strong>Parameters:</strong></p>
1778
+ <table>
1779
+ <thead>
1780
+ <tr>
1781
+ <th>Name</th>
1782
+ <th>Type</th>
1783
+ <th>Description</th>
1784
+ <th>Default</th>
1785
+ </tr>
1786
+ </thead>
1787
+ <tbody>
1788
+ <tr>
1789
+ <td><code>index_name</code></td>
1790
+ <td>
1791
+ <code>str</code>
1792
+ </td>
1793
+ <td>
1794
+ <div class="doc-md-description">
1795
+ <p>The name of the index.</p>
1796
+ </div>
1797
+ </td>
1798
+ <td>
1799
+ <em>required</em>
1800
+ </td>
1801
+ </tr>
1802
+ </tbody>
1803
+ </table>
1804
+
1805
+ <p><strong>Returns:</strong></p>
1806
+ <table>
1807
+ <thead>
1808
+ <tr>
1809
+<th>Name</th> <th>Type</th>
1810
+ <th>Description</th>
1811
+ </tr>
1812
+ </thead>
1813
+ <tbody>
1814
+ <tr>
1815
+<td><code>bool</code></td> <td>
1816
+ <code>bool</code>
1817
+ </td>
1818
+ <td>
1819
+ <div class="doc-md-description">
1820
+ <p>True if the index should be skipped, False otherwise.</p>
1821
+ </div>
1822
+ </td>
1823
+ </tr>
1824
+ </tbody>
1825
+ </table>
1826
+
1827
+ <details class="quote">
1828
+ <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1829
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-43">43</a></span>
1830
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1831
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1832
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1833
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1834
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1835
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1836
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1837
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1838
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1839
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1840
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1841
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1842
+<span class="normal"><a href="#__codelineno-0-56">56</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="k">def</span> <span class="nf">is_index_skipped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
1843
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
1844
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1845
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1846
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1847
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1848
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1849
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1850
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1851
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
1852
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">for</span> <span class="n">skipped</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SKIP_INDEX_NAMES</span><span class="p">:</span>
1853
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">if</span> <span class="n">index_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skipped</span><span class="p">):</span>
1854
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1855
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1856
+</code></pre></div></td></tr></table></div>
1857
+ </details>
1858
+ </div>
1859
+
1860
+</div>
1861
+
1862
+
1863
+
1864
+ </div>
1865
+
1866
+ </div>
1867
+
1868
+</div>
1869
+
1870
+
1871
+
1872
+
1873
+ </div>
1874
+
1875
+ </div>
1876
+
1877
+</div><h3 id="cluster-services"><span style="color:red">Cluster Services</span></h3>
1878
+
1879
+
1880
+<div class="doc doc-object doc-module">
1881
+
1882
+
1883
+<a id="app.services.WazuhIndexer.cluster"></a>
1884
+ <div class="doc doc-contents first">
1885
+
1886
+
1887
+
1888
+ <div class="doc doc-children">
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+
1897
+<div class="doc doc-object doc-class">
1898
+
1899
+
1900
+
1901
+<h2 id="app.services.WazuhIndexer.cluster.ClusterService" class="doc doc-heading">
1902
+ <code>ClusterService</code>
1903
+
1904
+
1905
+</h2>
1906
+
1907
+
1908
+ <div class="doc doc-contents ">
1909
+
1910
+
1911
+ <p>A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</p>
1912
+
1913
+
1914
+ <details class="quote">
1915
+ <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
1916
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
1917
+<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
1918
+<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
1919
+<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
1920
+<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
1921
+<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
1922
+<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
1923
+<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
1924
+<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1925
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1926
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1927
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1928
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1929
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1930
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
1931
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
1932
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
1933
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
1934
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
1935
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
1936
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
1937
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
1938
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
1939
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
1940
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
1941
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
1942
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
1943
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
1944
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
1945
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
1946
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
1947
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
1948
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
1949
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
1950
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
1951
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
1952
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
1953
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
1954
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
1955
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
1956
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
1957
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
1958
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
1959
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
1960
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
1961
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
1962
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
1963
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
1964
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
1965
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
1966
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
1967
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
1968
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
1969
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
1970
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
1971
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
1972
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
1973
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
1974
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
1975
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
1976
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1977
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1978
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1979
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1980
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1981
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1982
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1983
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
1984
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
1985
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
1986
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
1987
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
1988
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
1989
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
1990
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1991
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1992
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1993
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1994
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1995
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1996
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1997
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1998
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1999
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2000
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2001
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2002
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2003
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2004
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2005
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2006
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2007
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2008
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2009
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2010
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2011
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2012
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2013
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2014
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2015
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2016
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2017
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2018
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2019
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2020
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2021
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2022
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2023
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2024
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
2025
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
2026
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2027
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2028
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2029
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2030
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2031
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2032
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2033
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2034
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2035
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2036
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2037
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2038
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2039
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2040
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2041
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2042
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2043
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2044
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2045
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2046
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
2047
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2048
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
2049
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
2050
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
2051
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
2052
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
2053
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
2054
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
2055
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
2056
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
2057
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
2058
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
2059
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
2060
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
2061
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
2062
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
2063
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
2064
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
2065
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
2066
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
2067
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
2068
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
2069
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2070
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2071
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2072
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2073
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2074
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
2075
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
2076
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
2077
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
2078
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
2079
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
2080
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
2081
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
2082
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
2083
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
2084
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
2085
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
2086
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
2087
+<span class="normal"><a href="#__codelineno-0-181">181</a></span>
2088
+<span class="normal"><a href="#__codelineno-0-182">182</a></span>
2089
+<span class="normal"><a href="#__codelineno-0-183">183</a></span>
2090
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
2091
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
2092
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
2093
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
2094
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
2095
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
2096
+<span class="normal"><a href="#__codelineno-0-190">190</a></span>
2097
+<span class="normal"><a href="#__codelineno-0-191">191</a></span>
2098
+<span class="normal"><a href="#__codelineno-0-192">192</a></span>
2099
+<span class="normal"><a href="#__codelineno-0-193">193</a></span>
2100
+<span class="normal"><a href="#__codelineno-0-194">194</a></span>
2101
+<span class="normal"><a href="#__codelineno-0-195">195</a></span>
2102
+<span class="normal"><a href="#__codelineno-0-196">196</a></span>
2103
+<span class="normal"><a href="#__codelineno-0-197">197</a></span>
2104
+<span class="normal"><a href="#__codelineno-0-198">198</a></span>
2105
+<span class="normal"><a href="#__codelineno-0-199">199</a></span>
2106
+<span class="normal"><a href="#__codelineno-0-200">200</a></span>
2107
+<span class="normal"><a href="#__codelineno-0-201">201</a></span>
2108
+<span class="normal"><a href="#__codelineno-0-202">202</a></span>
2109
+<span class="normal"><a href="#__codelineno-0-203">203</a></span>
2110
+<span class="normal"><a href="#__codelineno-0-204">204</a></span>
2111
+<span class="normal"><a href="#__codelineno-0-205">205</a></span>
2112
+<span class="normal"><a href="#__codelineno-0-206">206</a></span>
2113
+<span class="normal"><a href="#__codelineno-0-207">207</a></span>
2114
+<span class="normal"><a href="#__codelineno-0-208">208</a></span>
2115
+<span class="normal"><a href="#__codelineno-0-209">209</a></span>
2116
+<span class="normal"><a href="#__codelineno-0-210">210</a></span>
2117
+<span class="normal"><a href="#__codelineno-0-211">211</a></span>
2118
+<span class="normal"><a href="#__codelineno-0-212">212</a></span>
2119
+<span class="normal"><a href="#__codelineno-0-213">213</a></span>
2120
+<span class="normal"><a href="#__codelineno-0-214">214</a></span>
2121
+<span class="normal"><a href="#__codelineno-0-215">215</a></span>
2122
+<span class="normal"><a href="#__codelineno-0-216">216</a></span>
2123
+<span class="normal"><a href="#__codelineno-0-217">217</a></span>
2124
+<span class="normal"><a href="#__codelineno-0-218">218</a></span>
2125
+<span class="normal"><a href="#__codelineno-0-219">219</a></span>
2126
+<span class="normal"><a href="#__codelineno-0-220">220</a></span>
2127
+<span class="normal"><a href="#__codelineno-0-221">221</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">ClusterService</span><span class="p">:</span>
2128
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
2129
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</span>
2130
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> """</span>
2131
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
2132
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2133
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">"""</span>
2134
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the ClusterService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2135
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
2136
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2137
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2138
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
2139
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="nf">_collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2140
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">"""</span>
2141
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Collect details of the Wazuh-Indexer. These details include the connector URL, username, and password.</span>
2142
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> """</span>
2143
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="p">(</span>
2144
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2145
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
2146
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2147
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
2148
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2149
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">_initialize_es_client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2150
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">"""</span>
2151
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize the Elasticsearch client with the details of the Wazuh-Indexer.</span>
2152
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
2153
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
2154
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
2155
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
2156
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2157
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
2158
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
2159
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2160
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">)</span>
2161
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
2162
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">def</span> <span class="nf">_are_details_collected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
2163
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="w"> </span><span class="sd">"""</span>
2164
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Check whether the details of the Wazuh-Indexer have been collected.</span>
2165
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2166
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
2167
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> bool: True if all details have been collected, False otherwise.</span>
2168
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> """</span>
2169
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="nb">all</span><span class="p">(</span>
2170
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
2171
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2172
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2173
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">def</span> <span class="nf">collect_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2174
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">"""</span>
2175
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect node allocation details from the Wazuh-Indexer's Elasticsearch cluster.</span>
2176
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
2177
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
2178
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the node allocation details.</span>
2179
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> """</span>
2180
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2181
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2182
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2183
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2184
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
2185
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2186
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_node_allocation</span><span class="p">()</span>
2187
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2188
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
2189
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2190
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="p">{</span>
2191
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected node allocation"</span><span class="p">,</span>
2192
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2193
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"node_allocation"</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"node_allocation"</span><span class="p">],</span>
2194
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">}</span>
2195
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
2196
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">def</span> <span class="nf">_collect_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2197
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="w"> </span><span class="sd">"""</span>
2198
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> Collect node allocation details from the Wazuh-Indexer's Elasticsearch cluster.</span>
2199
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
2200
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Returns:</span>
2201
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the node allocation details.</span>
2202
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> """</span>
2203
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">try</span><span class="p">:</span>
2204
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">node_allocation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cat</span><span class="o">.</span><span class="n">allocation</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s2">"json"</span><span class="p">)</span>
2205
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="n">node_allocation_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_node_allocation</span><span class="p">(</span><span class="n">node_allocation</span><span class="p">)</span>
2206
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">return</span> <span class="p">{</span>
2207
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected node allocation"</span><span class="p">,</span>
2208
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2209
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="s2">"node_allocation"</span><span class="p">:</span> <span class="n">node_allocation_list</span><span class="p">,</span>
2210
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">}</span>
2211
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2212
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect node allocation: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2213
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect node allocation"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2214
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2215
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">def</span> <span class="nf">_format_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_allocation</span><span class="p">):</span>
2216
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="w"> </span><span class="sd">"""</span>
2217
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Format the node allocation details into a list of dictionaries. Each dictionary contains disk used, disk available, total disk, disk usage percentage, and node name.</span>
2218
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2219
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Args:</span>
2220
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> node_allocation: Node allocation details from Elasticsearch.</span>
2221
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
2222
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Returns:</span>
2223
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> list: A list of dictionaries containing formatted node allocation details.</span>
2224
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> """</span>
2225
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">return</span> <span class="p">[</span>
2226
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="p">{</span>
2227
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="s2">"disk_used"</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">"disk.used"</span><span class="p">],</span>
2228
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="s2">"disk_available"</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">"disk.avail"</span><span class="p">],</span>
2229
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="s2">"disk_total"</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">"disk.total"</span><span class="p">],</span>
2230
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="s2">"disk_percent"</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">"disk.percent"</span><span class="p">],</span>
2231
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="s2">"node"</span><span class="p">:</span> <span class="n">node</span><span class="p">[</span><span class="s2">"node"</span><span class="p">],</span>
2232
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="p">}</span>
2233
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node_allocation</span>
2234
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="p">]</span>
2235
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
2236
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="k">def</span> <span class="nf">collect_cluster_health</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2237
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="w"> </span><span class="sd">"""</span>
2238
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</span>
2239
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
2240
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> Returns:</span>
2241
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the cluster health details.</span>
2242
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> """</span>
2243
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2244
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="k">return</span> <span class="p">{</span>
2245
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2246
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2247
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="p">}</span>
2248
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2249
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_cluster_health</span><span class="p">()</span>
2250
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2251
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="n">index_summary</span>
2252
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
2253
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">return</span> <span class="p">{</span>
2254
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cluster health"</span><span class="p">,</span>
2255
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2256
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="s2">"cluster_health"</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"cluster_health"</span><span class="p">],</span>
2257
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">}</span>
2258
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a>
2259
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">def</span> <span class="nf">_collect_cluster_health</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2260
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="w"> </span><span class="sd">"""</span>
2261
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</span>
2262
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
2263
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
2264
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the cluster health details.</span>
2265
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> """</span>
2266
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
2267
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="n">cluster_health</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cluster</span><span class="o">.</span><span class="n">health</span><span class="p">()</span>
2268
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">return</span> <span class="p">{</span>
2269
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cluster health"</span><span class="p">,</span>
2270
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2271
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="s2">"cluster_health"</span><span class="p">:</span> <span class="n">cluster_health</span><span class="p">,</span>
2272
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="p">}</span>
2273
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2274
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect cluster health: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2275
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect cluster health"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2276
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a>
2277
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="k">def</span> <span class="nf">collect_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2278
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="w"> </span><span class="sd">"""</span>
2279
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> Collect shard details from the Wazuh-Indexer's Elasticsearch cluster.</span>
2280
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
2281
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a><span class="sd"> Returns:</span>
2282
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the shard details.</span>
2283
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="sd"> """</span>
2284
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2285
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="p">{</span>
2286
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2287
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2288
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="p">}</span>
2289
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a>
2290
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_shards</span><span class="p">()</span>
2291
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2292
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">return</span> <span class="n">index_summary</span>
2293
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
2294
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="p">{</span>
2295
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected shards"</span><span class="p">,</span>
2296
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2297
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="s2">"shards"</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"shards"</span><span class="p">],</span>
2298
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">}</span>
2299
+<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
2300
+<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="k">def</span> <span class="nf">_collect_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2301
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="w"> </span><span class="sd">"""</span>
2302
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> Collect shard details from the Wazuh-Indexer's Elasticsearch cluster.</span>
2303
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a>
2304
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="sd"> Returns:</span>
2305
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the shard details.</span>
2306
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> """</span>
2307
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">try</span><span class="p">:</span>
2308
+<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">shards</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cat</span><span class="o">.</span><span class="n">shards</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s2">"json"</span><span class="p">)</span>
2309
+<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="n">shards_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_shards</span><span class="p">(</span><span class="n">shards</span><span class="p">)</span>
2310
+<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="k">return</span> <span class="p">{</span>
2311
+<a id="__codelineno-0-194" name="__codelineno-0-194"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected shards"</span><span class="p">,</span>
2312
+<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2313
+<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="s2">"shards"</span><span class="p">:</span> <span class="n">shards_list</span><span class="p">,</span>
2314
+<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="p">}</span>
2315
+<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2316
+<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect shards: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2317
+<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect shards"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2318
+<a id="__codelineno-0-201" name="__codelineno-0-201"></a>
2319
+<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="k">def</span> <span class="nf">_format_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shards</span><span class="p">):</span>
2320
+<a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="w"> </span><span class="sd">"""</span>
2321
+<a id="__codelineno-0-204" name="__codelineno-0-204"></a><span class="sd"> Format the shard details into a list of dictionaries. Each dictionary contains index name, shard number, shard state, shard size, and node name.</span>
2322
+<a id="__codelineno-0-205" name="__codelineno-0-205"></a>
2323
+<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> Args:</span>
2324
+<a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="sd"> shards: Shard details from Elasticsearch.</span>
2325
+<a id="__codelineno-0-208" name="__codelineno-0-208"></a>
2326
+<a id="__codelineno-0-209" name="__codelineno-0-209"></a><span class="sd"> Returns:</span>
2327
+<a id="__codelineno-0-210" name="__codelineno-0-210"></a><span class="sd"> list: A list of dictionaries containing formatted shard details.</span>
2328
+<a id="__codelineno-0-211" name="__codelineno-0-211"></a><span class="sd"> """</span>
2329
+<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">return</span> <span class="p">[</span>
2330
+<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="p">{</span>
2331
+<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="s2">"index"</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">"index"</span><span class="p">],</span>
2332
+<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="s2">"shard"</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">"shard"</span><span class="p">],</span>
2333
+<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="s2">"state"</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">"state"</span><span class="p">],</span>
2334
+<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="s2">"size"</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">"store"</span><span class="p">],</span>
2335
+<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="s2">"node"</span><span class="p">:</span> <span class="n">shard</span><span class="p">[</span><span class="s2">"node"</span><span class="p">],</span>
2336
+<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="p">}</span>
2337
+<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="k">for</span> <span class="n">shard</span> <span class="ow">in</span> <span class="n">shards</span>
2338
+<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="p">]</span>
2339
+</code></pre></div></td></tr></table></div>
2340
+ </details>
2341
+
2342
+
2343
+
2344
+ <div class="doc doc-children">
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+<div class="doc doc-object doc-function">
2355
+
2356
+
2357
+
2358
+<h3 id="app.services.WazuhIndexer.cluster.ClusterService.__init__" class="doc doc-heading">
2359
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
2360
+
2361
+</h3>
2362
+
2363
+
2364
+ <div class="doc doc-contents ">
2365
+
2366
+ <p>Initialize the ClusterService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</p>
2367
+
2368
+ <details class="quote">
2369
+ <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2370
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-15">15</a></span>
2371
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2372
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2373
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2374
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2375
+<span class="normal"><a href="#__codelineno-0-20">20</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2376
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">"""</span>
2377
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the ClusterService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2378
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
2379
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2380
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2381
+</code></pre></div></td></tr></table></div>
2382
+ </details>
2383
+ </div>
2384
+
2385
+</div>
2386
+
2387
+<div class="doc doc-object doc-function">
2388
+
2389
+
2390
+
2391
+<h3 id="app.services.WazuhIndexer.cluster.ClusterService.collect_cluster_health" class="doc doc-heading">
2392
+<code class="highlight language-python"><span class="n">collect_cluster_health</span><span class="p">()</span></code>
2393
+
2394
+</h3>
2395
+
2396
+
2397
+ <div class="doc doc-contents ">
2398
+
2399
+ <p>Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</p>
2400
+
2401
+ <p><strong>Returns:</strong></p>
2402
+ <table>
2403
+ <thead>
2404
+ <tr>
2405
+<th>Name</th> <th>Type</th>
2406
+ <th>Description</th>
2407
+ </tr>
2408
+ </thead>
2409
+ <tbody>
2410
+ <tr>
2411
+<td><code>dict</code></td> <td>
2412
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2413
+ </td>
2414
+ <td>
2415
+ <div class="doc-md-description">
2416
+ <p>A dictionary containing success status, a message, and potentially the cluster health details.</p>
2417
+ </div>
2418
+ </td>
2419
+ </tr>
2420
+ </tbody>
2421
+ </table>
2422
+
2423
+ <details class="quote">
2424
+ <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2425
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-119">119</a></span>
2426
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2427
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2428
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2429
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2430
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2431
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2432
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2433
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2434
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2435
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2436
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2437
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2438
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2439
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2440
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2441
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2442
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2443
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2444
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2445
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2446
+<span class="normal"><a href="#__codelineno-0-140">140</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="k">def</span> <span class="nf">collect_cluster_health</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2447
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="w"> </span><span class="sd">"""</span>
2448
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> Collect health details of the Elasticsearch cluster from the Wazuh-Indexer.</span>
2449
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a>
2450
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> Returns:</span>
2451
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the cluster health details.</span>
2452
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="sd"> """</span>
2453
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2454
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="k">return</span> <span class="p">{</span>
2455
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2456
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2457
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="p">}</span>
2458
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2459
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_cluster_health</span><span class="p">()</span>
2460
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2461
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="n">index_summary</span>
2462
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
2463
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">return</span> <span class="p">{</span>
2464
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected cluster health"</span><span class="p">,</span>
2465
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2466
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="s2">"cluster_health"</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"cluster_health"</span><span class="p">],</span>
2467
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">}</span>
2468
+</code></pre></div></td></tr></table></div>
2469
+ </details>
2470
+ </div>
2471
+
2472
+</div>
2473
+
2474
+<div class="doc doc-object doc-function">
2475
+
2476
+
2477
+
2478
+<h3 id="app.services.WazuhIndexer.cluster.ClusterService.collect_node_allocation" class="doc doc-heading">
2479
+<code class="highlight language-python"><span class="n">collect_node_allocation</span><span class="p">()</span></code>
2480
+
2481
+</h3>
2482
+
2483
+
2484
+ <div class="doc doc-contents ">
2485
+
2486
+ <p>Collect node allocation details from the Wazuh-Indexer's Elasticsearch cluster.</p>
2487
+
2488
+ <p><strong>Returns:</strong></p>
2489
+ <table>
2490
+ <thead>
2491
+ <tr>
2492
+<th>Name</th> <th>Type</th>
2493
+ <th>Description</th>
2494
+ </tr>
2495
+ </thead>
2496
+ <tbody>
2497
+ <tr>
2498
+<td><code>dict</code></td> <td>
2499
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2500
+ </td>
2501
+ <td>
2502
+ <div class="doc-md-description">
2503
+ <p>A dictionary containing success status, a message, and potentially the node allocation details.</p>
2504
+ </div>
2505
+ </td>
2506
+ </tr>
2507
+ </tbody>
2508
+ </table>
2509
+
2510
+ <details class="quote">
2511
+ <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2512
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-56">56</a></span>
2513
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2514
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2515
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2516
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2517
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
2518
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
2519
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
2520
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
2521
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
2522
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
2523
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
2524
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
2525
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
2526
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
2527
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2528
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2529
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2530
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2531
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2532
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2533
+<span class="normal"><a href="#__codelineno-0-77">77</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">def</span> <span class="nf">collect_node_allocation</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2534
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">"""</span>
2535
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect node allocation details from the Wazuh-Indexer's Elasticsearch cluster.</span>
2536
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
2537
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
2538
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the node allocation details.</span>
2539
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> """</span>
2540
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2541
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2542
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2543
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2544
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
2545
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2546
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_node_allocation</span><span class="p">()</span>
2547
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2548
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
2549
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2550
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="p">{</span>
2551
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected node allocation"</span><span class="p">,</span>
2552
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2553
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"node_allocation"</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"node_allocation"</span><span class="p">],</span>
2554
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">}</span>
2555
+</code></pre></div></td></tr></table></div>
2556
+ </details>
2557
+ </div>
2558
+
2559
+</div>
2560
+
2561
+<div class="doc doc-object doc-function">
2562
+
2563
+
2564
+
2565
+<h3 id="app.services.WazuhIndexer.cluster.ClusterService.collect_shards" class="doc doc-heading">
2566
+<code class="highlight language-python"><span class="n">collect_shards</span><span class="p">()</span></code>
2567
+
2568
+</h3>
2569
+
2570
+
2571
+ <div class="doc doc-contents ">
2572
+
2573
+ <p>Collect shard details from the Wazuh-Indexer's Elasticsearch cluster.</p>
2574
+
2575
+ <p><strong>Returns:</strong></p>
2576
+ <table>
2577
+ <thead>
2578
+ <tr>
2579
+<th>Name</th> <th>Type</th>
2580
+ <th>Description</th>
2581
+ </tr>
2582
+ </thead>
2583
+ <tbody>
2584
+ <tr>
2585
+<td><code>dict</code></td> <td>
2586
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2587
+ </td>
2588
+ <td>
2589
+ <div class="doc-md-description">
2590
+ <p>A dictionary containing success status, a message, and potentially the shard details.</p>
2591
+ </div>
2592
+ </td>
2593
+ </tr>
2594
+ </tbody>
2595
+ </table>
2596
+
2597
+ <details class="quote">
2598
+ <summary>Source code in <code>app\services\WazuhIndexer\cluster.py</code></summary>
2599
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-160">160</a></span>
2600
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
2601
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
2602
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2603
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2604
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2605
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2606
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2607
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
2608
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
2609
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
2610
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
2611
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
2612
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
2613
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
2614
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
2615
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
2616
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
2617
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
2618
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
2619
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
2620
+<span class="normal"><a href="#__codelineno-0-181">181</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="k">def</span> <span class="nf">collect_shards</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2621
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="w"> </span><span class="sd">"""</span>
2622
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> Collect shard details from the Wazuh-Indexer's Elasticsearch cluster.</span>
2623
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a>
2624
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a><span class="sd"> Returns:</span>
2625
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the shard details.</span>
2626
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="sd"> """</span>
2627
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2628
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="p">{</span>
2629
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2630
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2631
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="p">}</span>
2632
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a>
2633
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_shards</span><span class="p">()</span>
2634
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2635
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">return</span> <span class="n">index_summary</span>
2636
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a>
2637
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="k">return</span> <span class="p">{</span>
2638
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected shards"</span><span class="p">,</span>
2639
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2640
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="s2">"shards"</span><span class="p">:</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"shards"</span><span class="p">],</span>
2641
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="p">}</span>
2642
+</code></pre></div></td></tr></table></div>
2643
+ </details>
2644
+ </div>
2645
+
2646
+</div>
2647
+
2648
+
2649
+
2650
+ </div>
2651
+
2652
+ </div>
2653
+
2654
+</div>
2655
+
2656
+
2657
+
2658
+
2659
+ </div>
2660
+
2661
+ </div>
2662
+
2663
+</div><h3 id="index-services"><span style="color:red">Index Services</span></h3>
2664
+
2665
+
2666
+<div class="doc doc-object doc-module">
2667
+
2668
+
2669
+<a id="app.services.WazuhIndexer.index"></a>
2670
+ <div class="doc doc-contents first">
2671
+
2672
+
2673
+
2674
+ <div class="doc doc-children">
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+<div class="doc doc-object doc-class">
2684
+
2685
+
2686
+
2687
+<h2 id="app.services.WazuhIndexer.index.IndexService" class="doc doc-heading">
2688
+ <code>IndexService</code>
2689
+
2690
+
2691
+</h2>
2692
+
2693
+
2694
+ <div class="doc doc-contents ">
2695
+
2696
+
2697
+ <p>A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</p>
2698
+
2699
+
2700
+ <details class="quote">
2701
+ <summary>Source code in <code>app\services\WazuhIndexer\index.py</code></summary>
2702
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
2703
+<span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
2704
+<span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
2705
+<span class="normal"><a href="#__codelineno-0-13"> 13</a></span>
2706
+<span class="normal"><a href="#__codelineno-0-14"> 14</a></span>
2707
+<span class="normal"><a href="#__codelineno-0-15"> 15</a></span>
2708
+<span class="normal"><a href="#__codelineno-0-16"> 16</a></span>
2709
+<span class="normal"><a href="#__codelineno-0-17"> 17</a></span>
2710
+<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
2711
+<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
2712
+<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
2713
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
2714
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
2715
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
2716
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
2717
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
2718
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
2719
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
2720
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
2721
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
2722
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
2723
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
2724
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
2725
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
2726
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
2727
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
2728
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
2729
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
2730
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
2731
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
2732
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
2733
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
2734
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
2735
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
2736
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
2737
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
2738
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
2739
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
2740
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
2741
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
2742
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
2743
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
2744
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
2745
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
2746
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
2747
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
2748
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
2749
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
2750
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
2751
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
2752
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
2753
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
2754
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
2755
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
2756
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2757
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2758
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2759
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2760
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2761
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2762
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2763
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2764
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2765
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2766
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2767
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2768
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2769
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2770
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2771
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2772
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2773
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2774
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2775
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2776
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2777
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2778
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2779
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2780
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2781
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2782
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2783
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2784
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2785
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2786
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2787
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2788
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2789
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2790
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2791
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2792
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2793
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2794
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2795
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2796
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2797
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2798
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2799
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2800
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2801
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2802
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2803
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2804
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2805
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2806
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2807
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2808
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2809
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2810
+<span class="normal"><a href="#__codelineno-0-118">118</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">IndexService</span><span class="p">:</span>
2811
+<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">"""</span>
2812
+<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> A service class that encapsulates the logic for pulling indices from the Wazuh-Indexer.</span>
2813
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> """</span>
2814
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
2815
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2816
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">"""</span>
2817
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the IndexService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2818
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
2819
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2820
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2821
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
2822
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="nf">_collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2823
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">"""</span>
2824
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Collect details of the Wazuh-Indexer. These details include the connector URL, username, and password.</span>
2825
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> """</span>
2826
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="p">(</span>
2827
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2828
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
2829
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2830
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="p">)</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
2831
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2832
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">_initialize_es_client</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2833
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">"""</span>
2834
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize the Elasticsearch client with the details of the Wazuh-Indexer.</span>
2835
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> """</span>
2836
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
2837
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
2838
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
2839
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2840
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
2841
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
2842
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2843
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">)</span>
2844
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
2845
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">def</span> <span class="nf">_are_details_collected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
2846
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="w"> </span><span class="sd">"""</span>
2847
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Check whether the details of the Wazuh-Indexer have been collected.</span>
2848
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2849
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
2850
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> bool: True if all details have been collected, False otherwise.</span>
2851
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> """</span>
2852
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="nb">all</span><span class="p">(</span>
2853
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">],</span>
2854
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2855
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2856
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">def</span> <span class="nf">collect_indices_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2857
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">"""</span>
2858
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect summary information for each index from the Wazuh-Indexer's Elasticsearch cluster.</span>
2859
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
2860
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
2861
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the indices summary.</span>
2862
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> """</span>
2863
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
2864
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
2865
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
2866
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2867
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
2868
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2869
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
2870
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
2871
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
2872
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2873
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_indices_summary</span><span class="p">(</span><span class="n">index_summary</span><span class="p">[</span><span class="s2">"indices"</span><span class="p">])</span>
2874
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
2875
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
2876
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected indices summary"</span><span class="p">,</span>
2877
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2878
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">"indices"</span><span class="p">:</span> <span class="n">summary</span><span class="p">,</span>
2879
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="p">}</span>
2880
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a>
2881
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">def</span> <span class="nf">_format_indices_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">indices</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">])</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2882
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">"""</span>
2883
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Format the indices summary into a list of dictionaries. Each dictionary contains index name, health status, document count, store size, and replica count.</span>
2884
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
2885
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
2886
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> indices (dict): Indices summary from Elasticsearch.</span>
2887
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2888
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Returns:</span>
2889
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> list: A list of dictionaries containing formatted indices summary.</span>
2890
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> """</span>
2891
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="p">[</span>
2892
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">{</span>
2893
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="s2">"index"</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">"index"</span><span class="p">],</span>
2894
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">"health"</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">"health"</span><span class="p">],</span>
2895
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"docs_count"</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">"docs.count"</span><span class="p">],</span>
2896
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"store_size"</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">"store.size"</span><span class="p">],</span>
2897
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"replica_count"</span><span class="p">:</span> <span class="n">index</span><span class="p">[</span><span class="s2">"rep"</span><span class="p">],</span>
2898
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
2899
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">indices</span>
2900
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="p">]</span>
2901
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2902
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">def</span> <span class="nf">_collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
2903
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">"""</span>
2904
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Collect indices from the Wazuh-Indexer's Elasticsearch cluster.</span>
2905
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2906
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
2907
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the indices.</span>
2908
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> """</span>
2909
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">try</span><span class="p">:</span>
2910
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">cat</span><span class="o">.</span><span class="n">indices</span><span class="p">(</span><span class="nb">format</span><span class="o">=</span><span class="s2">"json"</span><span class="p">)</span>
2911
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">return</span> <span class="p">{</span>
2912
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected indices"</span><span class="p">,</span>
2913
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2914
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="s2">"indices"</span><span class="p">:</span> <span class="n">indices</span><span class="p">,</span>
2915
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="p">}</span>
2916
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2917
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
2918
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2919
+</code></pre></div></td></tr></table></div>
2920
+ </details>
2921
+
2922
+
2923
+
2924
+ <div class="doc doc-children">
2925
+
2926
+
2927
+
2928
+
2929
+
2930
+
2931
+
2932
+
2933
+
2934
+<div class="doc doc-object doc-function">
2935
+
2936
+
2937
+
2938
+<h3 id="app.services.WazuhIndexer.index.IndexService.__init__" class="doc doc-heading">
2939
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
2940
+
2941
+</h3>
2942
+
2943
+
2944
+ <div class="doc doc-contents ">
2945
+
2946
+ <p>Initialize the IndexService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</p>
2947
+
2948
+ <details class="quote">
2949
+ <summary>Source code in <code>app\services\WazuhIndexer\index.py</code></summary>
2950
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-15">15</a></span>
2951
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2952
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2953
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2954
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2955
+<span class="normal"><a href="#__codelineno-0-20">20</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2956
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">"""</span>
2957
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Initialize the IndexService with the details of the Wazuh-Indexer and initialize the Elasticsearch client.</span>
2958
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
2959
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_wazuhindexer_details</span><span class="p">()</span>
2960
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_initialize_es_client</span><span class="p">()</span>
2961
+</code></pre></div></td></tr></table></div>
2962
+ </details>
2963
+ </div>
2964
+
2965
+</div>
2966
+
2967
+<div class="doc doc-object doc-function">
2968
+
2969
+
2970
+
2971
+<h3 id="app.services.WazuhIndexer.index.IndexService.collect_indices_summary" class="doc doc-heading">
2972
+<code class="highlight language-python"><span class="n">collect_indices_summary</span><span class="p">()</span></code>
2973
+
2974
+</h3>
2975
+
2976
+
2977
+ <div class="doc doc-contents ">
2978
+
2979
+ <p>Collect summary information for each index from the Wazuh-Indexer's Elasticsearch cluster.</p>
2980
+
2981
+ <p><strong>Returns:</strong></p>
2982
+ <table>
2983
+ <thead>
2984
+ <tr>
2985
+<th>Name</th> <th>Type</th>
2986
+ <th>Description</th>
2987
+ </tr>
2988
+ </thead>
2989
+ <tbody>
2990
+ <tr>
2991
+<td><code>dict</code></td> <td>
2992
+ <code><span title="typing.Dict">Dict</span>[str, object]</code>
2993
+ </td>
2994
+ <td>
2995
+ <div class="doc-md-description">
2996
+ <p>A dictionary containing success status, a message, and potentially the indices summary.</p>
2997
+ </div>
2998
+ </td>
2999
+ </tr>
3000
+ </tbody>
3001
+ </table>
3002
+
3003
+ <details class="quote">
3004
+ <summary>Source code in <code>app\services\WazuhIndexer\index.py</code></summary>
3005
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-56">56</a></span>
3006
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3007
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3008
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3009
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3010
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
3011
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
3012
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
3013
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3014
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3015
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3016
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3017
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3018
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3019
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3020
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3021
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3022
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3023
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3024
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3025
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3026
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3027
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3028
+<span class="normal"><a href="#__codelineno-0-79">79</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">def</span> <span class="nf">collect_indices_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3029
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">"""</span>
3030
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Collect summary information for each index from the Wazuh-Indexer's Elasticsearch cluster.</span>
3031
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
3032
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Returns:</span>
3033
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> dict: A dictionary containing success status, a message, and potentially the indices summary.</span>
3034
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> """</span>
3035
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_are_details_collected</span><span class="p">():</span>
3036
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="p">{</span>
3037
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
3038
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3039
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">}</span>
3040
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
3041
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">index_summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
3042
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index_summary</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3043
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">index_summary</span>
3044
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3045
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">summary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_format_indices_summary</span><span class="p">(</span><span class="n">index_summary</span><span class="p">[</span><span class="s2">"indices"</span><span class="p">])</span>
3046
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
3047
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3048
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected indices summary"</span><span class="p">,</span>
3049
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3050
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">"indices"</span><span class="p">:</span> <span class="n">summary</span><span class="p">,</span>
3051
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="p">}</span>
3052
+</code></pre></div></td></tr></table></div>
3053
+ </details>
3054
+ </div>
3055
+
3056
+</div>
3057
+
3058
+
3059
+
3060
+ </div>
3061
+
3062
+ </div>
3063
+
3064
+</div>
3065
+
3066
+
3067
+
3068
+
3069
+ </div>
3070
+
3071
+ </div>
3072
+
3073
+</div><h3 id="universal-services"><span style="color:red">Universal Services</span></h3>
3074
+
3075
+
3076
+<div class="doc doc-object doc-module">
3077
+
3078
+
3079
+<a id="app.services.WazuhIndexer.universal"></a>
3080
+ <div class="doc doc-contents first">
3081
+
3082
+
3083
+
3084
+ <div class="doc doc-children">
3085
+
3086
+
3087
+
3088
+
3089
+
3090
+
3091
+
3092
+
3093
+<div class="doc doc-object doc-class">
3094
+
3095
+
3096
+
3097
+<h2 id="app.services.WazuhIndexer.universal.UniversalService" class="doc doc-heading">
3098
+ <code>UniversalService</code>
3099
+
3100
+
3101
+</h2>
3102
+
3103
+
3104
+ <div class="doc doc-contents ">
3105
+
3106
+
3107
+ <p>A service class that encapsulates the logic for polling messages from the Wazuh-Indexer.</p>
3108
+
3109
+
3110
+ <details class="quote">
3111
+ <summary>Source code in <code>app\services\WazuhIndexer\universal.py</code></summary>
3112
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
3113
+<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
3114
+<span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
3115
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
3116
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
3117
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
3118
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
3119
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
3120
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
3121
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
3122
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
3123
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
3124
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
3125
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
3126
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
3127
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
3128
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
3129
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
3130
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
3131
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
3132
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
3133
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
3134
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
3135
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
3136
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
3137
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
3138
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
3139
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
3140
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
3141
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
3142
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
3143
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
3144
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
3145
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
3146
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
3147
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
3148
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
3149
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
3150
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
3151
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
3152
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
3153
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
3154
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
3155
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
3156
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
3157
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
3158
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
3159
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
3160
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
3161
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
3162
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
3163
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
3164
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
3165
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
3166
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
3167
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
3168
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
3169
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
3170
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
3171
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
3172
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
3173
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
3174
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
3175
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
3176
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
3177
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
3178
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
3179
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
3180
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
3181
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
3182
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
3183
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
3184
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
3185
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
3186
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
3187
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
3188
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
3189
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
3190
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
3191
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
3192
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
3193
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
3194
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
3195
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
3196
+<span class="normal"><a href="#__codelineno-0-104">104</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
3197
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">"""</span>
3198
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> A service class that encapsulates the logic for polling messages from the Wazuh-Indexer.</span>
3199
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> """</span>
3200
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
3201
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
3202
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
3203
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="p">(</span>
3204
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3205
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
3206
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
3207
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="s2">"Wazuh-Indexer"</span><span class="p">)</span>
3208
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="o">.</span><span class="n">es</span> <span class="o">=</span> <span class="n">Elasticsearch</span><span class="p">(</span>
3209
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
3210
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">),</span>
3211
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3212
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
3213
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
3214
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3215
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="p">)</span>
3216
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3217
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="k">def</span> <span class="nf">collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3218
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="w"> </span><span class="sd">"""</span>
3219
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Collects the details of the Wazuh-Indexer connector.</span>
3220
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3221
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Args:</span>
3222
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> connector_name (str): The name of the Wazuh-Indexer connector.</span>
3223
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
3224
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
3225
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3226
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
3227
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
3228
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
3229
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3230
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
3231
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">(</span>
3232
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_url"</span><span class="p">),</span>
3233
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_username"</span><span class="p">),</span>
3234
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_password"</span><span class="p">),</span>
3235
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">)</span>
3236
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">else</span><span class="p">:</span>
3237
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
3238
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
3239
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">def</span> <span class="nf">collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3240
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">"""</span>
3241
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Collects the indices from the Wazuh-Indexer.</span>
3242
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3243
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> Returns:</span>
3244
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> list: A list containing the indices.</span>
3245
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> """</span>
3246
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="p">(</span>
3247
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="ow">is</span> <span class="kc">None</span>
3248
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span> <span class="ow">is</span> <span class="kc">None</span>
3249
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span> <span class="ow">is</span> <span class="kc">None</span>
3250
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">):</span>
3251
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3252
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
3253
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3254
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">}</span>
3255
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
3256
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
3257
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
3258
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="n">indices</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3259
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">indices</span>
3260
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
3261
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3262
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
3263
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">def</span> <span class="nf">_collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]:</span>
3264
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">"""</span>
3265
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Wazuh-Indexer query to retrievce all indices.</span>
3266
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
3267
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Returns:</span>
3268
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> Dict[str, object]: _description_</span>
3269
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> """</span>
3270
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">try</span><span class="p">:</span>
3271
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">indices_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">es</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">get_alias</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
3272
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">indices_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">indices_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
3273
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="p">{</span>
3274
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Successfully collected indices"</span><span class="p">,</span>
3275
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3276
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">"indices_list"</span><span class="p">:</span> <span class="n">indices_list</span><span class="p">,</span>
3277
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="p">}</span>
3278
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3279
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect indices: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
3280
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3281
+</code></pre></div></td></tr></table></div>
3282
+ </details>
3283
+
3284
+
3285
+
3286
+ <div class="doc doc-children">
3287
+
3288
+
3289
+
3290
+
3291
+
3292
+
3293
+
3294
+
3295
+
3296
+<div class="doc doc-object doc-function">
3297
+
3298
+
3299
+
3300
+<h3 id="app.services.WazuhIndexer.universal.UniversalService.collect_indices" class="doc doc-heading">
3301
+<code class="highlight language-python"><span class="n">collect_indices</span><span class="p">()</span></code>
3302
+
3303
+</h3>
3304
+
3305
+
3306
+ <div class="doc doc-contents ">
3307
+
3308
+ <p>Collects the indices from the Wazuh-Indexer.</p>
3309
+
3310
+ <p><strong>Returns:</strong></p>
3311
+ <table>
3312
+ <thead>
3313
+ <tr>
3314
+<th>Name</th> <th>Type</th>
3315
+ <th>Description</th>
3316
+ </tr>
3317
+ </thead>
3318
+ <tbody>
3319
+ <tr>
3320
+<td><code>list</code></td> <td>
3321
+ </td>
3322
+ <td>
3323
+ <div class="doc-md-description">
3324
+ <p>A list containing the indices.</p>
3325
+ </div>
3326
+ </td>
3327
+ </tr>
3328
+ </tbody>
3329
+ </table>
3330
+
3331
+ <details class="quote">
3332
+ <summary>Source code in <code>app\services\WazuhIndexer\universal.py</code></summary>
3333
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-63">63</a></span>
3334
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
3335
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
3336
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
3337
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
3338
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
3339
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
3340
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
3341
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
3342
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
3343
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
3344
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
3345
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
3346
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
3347
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
3348
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
3349
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
3350
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
3351
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
3352
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
3353
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
3354
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
3355
+<span class="normal"><a href="#__codelineno-0-85">85</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="k">def</span> <span class="nf">collect_indices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3356
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="w"> </span><span class="sd">"""</span>
3357
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Collects the indices from the Wazuh-Indexer.</span>
3358
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
3359
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> Returns:</span>
3360
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> list: A list containing the indices.</span>
3361
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> """</span>
3362
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="p">(</span>
3363
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="ow">is</span> <span class="kc">None</span>
3364
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span> <span class="ow">is</span> <span class="kc">None</span>
3365
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span> <span class="ow">is</span> <span class="kc">None</span>
3366
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">):</span>
3367
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3368
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect Wazuh-Indexer details"</span><span class="p">,</span>
3369
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3370
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">}</span>
3371
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
3372
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_indices</span><span class="p">()</span>
3373
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
3374
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="n">indices</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3375
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">indices</span>
3376
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
3377
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Failed to collect indices"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3378
+</code></pre></div></td></tr></table></div>
3379
+ </details>
3380
+ </div>
3381
+
3382
+</div>
3383
+
3384
+<div class="doc doc-object doc-function">
3385
+
3386
+
3387
+
3388
+<h3 id="app.services.WazuhIndexer.universal.UniversalService.collect_wazuhindexer_details" class="doc doc-heading">
3389
+<code class="highlight language-python"><span class="n">collect_wazuhindexer_details</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span></code>
3390
+
3391
+</h3>
3392
+
3393
+
3394
+ <div class="doc doc-contents ">
3395
+
3396
+ <p>Collects the details of the Wazuh-Indexer connector.</p>
3397
+
3398
+ <p><strong>Parameters:</strong></p>
3399
+ <table>
3400
+ <thead>
3401
+ <tr>
3402
+ <th>Name</th>
3403
+ <th>Type</th>
3404
+ <th>Description</th>
3405
+ <th>Default</th>
3406
+ </tr>
3407
+ </thead>
3408
+ <tbody>
3409
+ <tr>
3410
+ <td><code>connector_name</code></td>
3411
+ <td>
3412
+ <code>str</code>
3413
+ </td>
3414
+ <td>
3415
+ <div class="doc-md-description">
3416
+ <p>The name of the Wazuh-Indexer connector.</p>
3417
+ </div>
3418
+ </td>
3419
+ <td>
3420
+ <em>required</em>
3421
+ </td>
3422
+ </tr>
3423
+ </tbody>
3424
+ </table>
3425
+
3426
+ <p><strong>Returns:</strong></p>
3427
+ <table>
3428
+ <thead>
3429
+ <tr>
3430
+<th>Name</th> <th>Type</th>
3431
+ <th>Description</th>
3432
+ </tr>
3433
+ </thead>
3434
+ <tbody>
3435
+ <tr>
3436
+<td><code>tuple</code></td> <td>
3437
+ </td>
3438
+ <td>
3439
+ <div class="doc-md-description">
3440
+ <p>A tuple containing the connection URL, username, and password.</p>
3441
+ </div>
3442
+ </td>
3443
+ </tr>
3444
+ </tbody>
3445
+ </table>
3446
+
3447
+ <details class="quote">
3448
+ <summary>Source code in <code>app\services\WazuhIndexer\universal.py</code></summary>
3449
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-41">41</a></span>
3450
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
3451
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
3452
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
3453
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
3454
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
3455
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
3456
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
3457
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
3458
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
3459
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
3460
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
3461
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3462
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3463
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
3464
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3465
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3466
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3467
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
3468
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
3469
+<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="k">def</span> <span class="nf">collect_wazuhindexer_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3470
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="w"> </span><span class="sd">"""</span>
3471
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Collects the details of the Wazuh-Indexer connector.</span>
3472
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
3473
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Args:</span>
3474
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> connector_name (str): The name of the Wazuh-Indexer connector.</span>
3475
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
3476
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
3477
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3478
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> """</span>
3479
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">connector_instance</span> <span class="o">=</span> <span class="n">connector_factory</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">connector_name</span><span class="p">,</span> <span class="n">connector_name</span><span class="p">)</span>
3480
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">connection_successful</span> <span class="o">=</span> <span class="n">connector_instance</span><span class="o">.</span><span class="n">verify_connection</span><span class="p">()</span>
3481
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3482
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">connection_details</span> <span class="o">=</span> <span class="n">Connector</span><span class="o">.</span><span class="n">get_connector_info_from_db</span><span class="p">(</span><span class="n">connector_name</span><span class="p">)</span>
3483
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="p">(</span>
3484
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_url"</span><span class="p">),</span>
3485
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_username"</span><span class="p">),</span>
3486
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connector_password"</span><span class="p">),</span>
3487
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">)</span>
3488
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">else</span><span class="p">:</span>
3489
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
3490
+</code></pre></div></td></tr></table></div>
3491
+ </details>
3492
+ </div>
3493
+
3494
+</div>
3495
+
3496
+
3497
+
3498
+ </div>
3499
+
3500
+ </div>
3501
+
3502
+</div>
3503
+
3504
+
3505
+
3506
+
3507
+ </div>
3508
+
3509
+ </div>
3510
+
3511
+</div>
3512
+
3513
+
3514
+
3515
+
3516
+
3517
+
3518
+ </article>
3519
+ </div>
3520
+
3521
+
3522
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
3523
+
3524
+ </div>
3525
+
3526
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
3527
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
3528
+ Back to top
3529
+ </button>
3530
+
3531
+ </main>
3532
+
3533
+ <footer class="md-footer">
3534
+
3535
+ <div class="md-footer-meta md-typeset">
3536
+ <div class="md-footer-meta__inner md-grid">
3537
+ <div class="md-copyright">
3538
+
3539
+ <div class="md-copyright__highlight">
3540
+ © 2023 <a href="https://github.com/socfortress/CoPilot" target="_blank" rel="noopener">SOCFortress CoPilot</a>
3541
+
3542
+ </div>
3543
+
3544
+
3545
+ Made with
3546
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
3547
+ Material for MkDocs
3548
+ </a>
3549
+
3550
+</div>
3551
+
3552
+ </div>
3553
+ </div>
3554
+</footer>
3555
+
3556
+ </div>
3557
+ <div class="md-dialog" data-md-component="dialog">
3558
+ <div class="md-dialog__inner md-typeset"></div>
3559
+ </div>
3560
+
3561
+ <script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.sections", "toc.integrate", "navigation.top", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
3562
+
3563
+
3564
+ <script src="../assets/javascripts/bundle.220ee61c.min.js"></script>
3565
+
3566
+
3567
+ </body>
3568
+</html>
\ No newline at end of file
backend/site/wazuhmanager/index.html
+6596
-895
@@ -12,6 +12,8 @@
12
<link rel="prev" href="../graylog/">
13
14
15
+ <link rel="next" href="../velociraptor/">
16
+
17
<link rel="icon" href="../assets/images/favicon.png">
18
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.18">
19
@@ -196,8 +198,8 @@
198
199
200
<li class="md-tabs__item">
199
- <a href="../alerts/" class="md-tabs__link">
200
- Alerts
201
+ <a href="../wazuhindexer/" class="md-tabs__link">
202
+ Wazuh-Indexer
203
</a>
204
</li>
205
@@ -208,8 +210,8 @@
210
211
212
<li class="md-tabs__item">
211
- <a href="../artifacts/" class="md-tabs__link">
212
- Artifacts
213
+ <a href="../dfiriris/" class="md-tabs__link">
214
+ Dfir-Iris
215
</a>
216
</li>
217
@@ -220,8 +222,8 @@
222
223
224
<li class="md-tabs__item">
223
- <a href="../cases/" class="md-tabs__link">
224
- Cases
225
+ <a href="../graylog/" class="md-tabs__link">
226
+ Graylog
227
</a>
228
</li>
229
@@ -229,11 +231,13 @@
231
232
233
234
+
235
+
236
237
238
<li class="md-tabs__item">
235
- <a href="../graylog/" class="md-tabs__link">
236
- Graylog
239
+ <a href="./" class="md-tabs__link md-tabs__link--active">
240
+ Wazuh-Manager
241
</a>
242
</li>
243
@@ -241,13 +245,23 @@
245
246
247
244
-
248
+
249
+
250
+ <li class="md-tabs__item">
251
+ <a href="../velociraptor/" class="md-tabs__link">
252
+ Velociraptor
253
+ </a>
254
+ </li>
255
+
256
+
257
+
258
+
259
260
261
262
<li class="md-tabs__item">
249
- <a href="./" class="md-tabs__link md-tabs__link--active">
250
- Wazuh-Manager
263
+ <a href="../shuffle/" class="md-tabs__link">
264
+ Shuffle
265
</a>
266
</li>
267
@@ -339,23 +353,8 @@
353
354
355
<li class="md-nav__item">
342
- <a href="../alerts/" class="md-nav__link">
343
- Alerts
344
- </a>
345
- </li>
346
-
347
-
348
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
356
- <li class="md-nav__item">
357
- <a href="../artifacts/" class="md-nav__link">
358
- Artifacts
356
+ <a href="../wazuhindexer/" class="md-nav__link">
357
+ Wazuh-Indexer
358
</a>
359
</li>
360
@@ -369,8 +368,8 @@
368
369
370
<li class="md-nav__item">
372
- <a href="../cases/" class="md-nav__link">
373
- Cases
371
+ <a href="../dfiriris/" class="md-nav__link">
372
+ Dfir-Iris
373
</a>
374
</li>
375
@@ -618,233 +617,5229 @@
617
618
</li>
619
621
- </ul>
620
+ <li class="md-nav__item">
621
+ <a href="#app.services.WazuhManager.agent" class="md-nav__link">
622
+ app.services.WazuhManager.agent
623
+ </a>
624
623
-</nav>
625
+</li>
626
625
- </li>
626
-
627
-
628
-
629
- </ul>
630
-</nav>
631
- </div>
632
- </div>
633
- </div>
634
-
635
-
636
-
637
-
638
- <div class="md-content" data-md-component="content">
639
- <article class="md-content__inner md-typeset">
640
-
641
-
642
-
643
-
644
- <h1>Wazuh-Manager</h1>
645
-
646
-<h2 id="wazuh-manager-overview">Wazuh-Manager Overview</h2>
647
-<h3 id="wazuh-manager-model"><span style="color:blue">Wazuh-Manager Model</span></h3>
648
-
649
-
650
-<div class="doc doc-object doc-module">
651
-
652
-
653
-<a id="app.models.rules"></a>
654
- <div class="doc doc-contents first">
655
-
627
+ <li class="md-nav__item">
628
+ <a href="#app.services.WazuhManager.agent.WazuhHttpRequests" class="md-nav__link">
629
+ WazuhHttpRequests
630
+ </a>
631
657
-
658
- <div class="doc doc-children">
659
-
660
-
661
-
662
-
663
-
664
-
665
-
666
-
667
-<div class="doc doc-object doc-class">
668
-
669
-
670
-
671
-<h2 id="app.models.rules.DisabledRules" class="doc doc-heading">
672
- <code>DisabledRules</code>
673
-
674
-
675
-</h2>
676
-
677
-
678
- <div class="doc doc-contents ">
679
- <p class="doc doc-class-bases">
680
- Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
681
-
632
+ <nav class="md-nav" aria-label="WazuhHttpRequests">
633
+ <ul class="md-nav__list">
634
+
635
+ <li class="md-nav__item">
636
+ <a href="#app.services.WazuhManager.agent.WazuhHttpRequests.__init__" class="md-nav__link">
637
+ __init__()
638
+ </a>
639
683
- <p>Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for
684
-disabling, date disabled, and the length of time the rule will be disabled for.
685
-This class inherits from SQLAlchemy's Model class.</p>
686
-<p>:ivar id: Unique integer ID of the rule.
687
-:ivar rule_id: ID of the rule.
688
-:ivar previous_level: Previous level configuration of the rule.
689
-:ivar new_level: New level configuration of the rule.
690
-:ivar reason_for_disabling: Reason for disabling the rule.
691
-:ivar date_disabled: Date when the rule was disabled.
692
-:ivar length_of_time: Length of time the rule will be disabled for.</p>
693
-
694
-
695
- <details class="quote">
696
- <summary>Source code in <code>app\models\rules.py</code></summary>
697
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
698
-<span class="normal"><a href="#__codelineno-0-14">14</a></span>
699
-<span class="normal"><a href="#__codelineno-0-15">15</a></span>
700
-<span class="normal"><a href="#__codelineno-0-16">16</a></span>
701
-<span class="normal"><a href="#__codelineno-0-17">17</a></span>
702
-<span class="normal"><a href="#__codelineno-0-18">18</a></span>
703
-<span class="normal"><a href="#__codelineno-0-19">19</a></span>
704
-<span class="normal"><a href="#__codelineno-0-20">20</a></span>
705
-<span class="normal"><a href="#__codelineno-0-21">21</a></span>
706
-<span class="normal"><a href="#__codelineno-0-22">22</a></span>
707
-<span class="normal"><a href="#__codelineno-0-23">23</a></span>
708
-<span class="normal"><a href="#__codelineno-0-24">24</a></span>
709
-<span class="normal"><a href="#__codelineno-0-25">25</a></span>
710
-<span class="normal"><a href="#__codelineno-0-26">26</a></span>
711
-<span class="normal"><a href="#__codelineno-0-27">27</a></span>
712
-<span class="normal"><a href="#__codelineno-0-28">28</a></span>
713
-<span class="normal"><a href="#__codelineno-0-29">29</a></span>
714
-<span class="normal"><a href="#__codelineno-0-30">30</a></span>
715
-<span class="normal"><a href="#__codelineno-0-31">31</a></span>
716
-<span class="normal"><a href="#__codelineno-0-32">32</a></span>
717
-<span class="normal"><a href="#__codelineno-0-33">33</a></span>
718
-<span class="normal"><a href="#__codelineno-0-34">34</a></span>
719
-<span class="normal"><a href="#__codelineno-0-35">35</a></span>
720
-<span class="normal"><a href="#__codelineno-0-36">36</a></span>
721
-<span class="normal"><a href="#__codelineno-0-37">37</a></span>
722
-<span class="normal"><a href="#__codelineno-0-38">38</a></span>
723
-<span class="normal"><a href="#__codelineno-0-39">39</a></span>
724
-<span class="normal"><a href="#__codelineno-0-40">40</a></span>
725
-<span class="normal"><a href="#__codelineno-0-41">41</a></span>
726
-<span class="normal"><a href="#__codelineno-0-42">42</a></span>
727
-<span class="normal"><a href="#__codelineno-0-43">43</a></span>
728
-<span class="normal"><a href="#__codelineno-0-44">44</a></span>
729
-<span class="normal"><a href="#__codelineno-0-45">45</a></span>
730
-<span class="normal"><a href="#__codelineno-0-46">46</a></span>
731
-<span class="normal"><a href="#__codelineno-0-47">47</a></span>
732
-<span class="normal"><a href="#__codelineno-0-48">48</a></span>
733
-<span class="normal"><a href="#__codelineno-0-49">49</a></span>
734
-<span class="normal"><a href="#__codelineno-0-50">50</a></span>
735
-<span class="normal"><a href="#__codelineno-0-51">51</a></span>
736
-<span class="normal"><a href="#__codelineno-0-52">52</a></span>
737
-<span class="normal"><a href="#__codelineno-0-53">53</a></span>
738
-<span class="normal"><a href="#__codelineno-0-54">54</a></span>
739
-<span class="normal"><a href="#__codelineno-0-55">55</a></span>
740
-<span class="normal"><a href="#__codelineno-0-56">56</a></span>
741
-<span class="normal"><a href="#__codelineno-0-57">57</a></span>
742
-<span class="normal"><a href="#__codelineno-0-58">58</a></span>
743
-<span class="normal"><a href="#__codelineno-0-59">59</a></span>
744
-<span class="normal"><a href="#__codelineno-0-60">60</a></span>
745
-<span class="normal"><a href="#__codelineno-0-61">61</a></span>
746
-<span class="normal"><a href="#__codelineno-0-62">62</a></span>
747
-<span class="normal"><a href="#__codelineno-0-63">63</a></span>
748
-<span class="normal"><a href="#__codelineno-0-64">64</a></span>
749
-<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">class</span> <span class="nc">DisabledRules</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
750
-<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">"""</span>
751
-<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for</span>
752
-<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> disabling, date disabled, and the length of time the rule will be disabled for.</span>
753
-<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> This class inherits from SQLAlchemy's Model class.</span>
754
-<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
755
-<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> :ivar id: Unique integer ID of the rule.</span>
756
-<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> :ivar rule_id: ID of the rule.</span>
757
-<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> :ivar previous_level: Previous level configuration of the rule.</span>
758
-<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> :ivar new_level: New level configuration of the rule.</span>
759
-<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> :ivar reason_for_disabling: Reason for disabling the rule.</span>
760
-<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> :ivar date_disabled: Date when the rule was disabled.</span>
761
-<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :ivar length_of_time: Length of time the rule will be disabled for.</span>
762
-<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> """</span>
763
-<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
764
-<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
765
-<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
766
-<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
767
-<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">new_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
768
-<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
769
-<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">date_disabled</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">DateTime</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">)</span>
770
-<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
771
-<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
772
-<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
773
-<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="p">,</span>
774
-<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
775
-<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
776
-<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">new_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
777
-<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
778
-<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
779
-<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">):</span>
780
-<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
781
-<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Initialize a new instance of the DisabledRules class.</span>
782
-<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
783
-<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> :param rule_id: The ID of the rule.</span>
784
-<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> :param previous_level: The previous level configuration of the rule.</span>
785
-<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> :param new_level: The new level configuration of the rule.</span>
786
-<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> :param reason_for_disabling: The reason for disabling the rule.</span>
787
-<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> :param length_of_time: The length of time the rule will be disabled for.</span>
788
-<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
789
-<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span> <span class="o">=</span> <span class="n">rule_id</span>
790
-<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">previous_level</span> <span class="o">=</span> <span class="n">previous_level</span>
791
-<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="bp">self</span><span class="o">.</span><span class="n">new_level</span> <span class="o">=</span> <span class="n">new_level</span>
792
-<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reason_for_disabling</span> <span class="o">=</span> <span class="n">reason_for_disabling</span>
793
-<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">length_of_time</span> <span class="o">=</span> <span class="n">length_of_time</span>
794
-<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
795
-<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
796
-<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">"""</span>
797
-<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns a string representation of the DisabledRules instance.</span>
798
-<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
799
-<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> :return: A string representation of the rule ID.</span>
800
-<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> """</span>
801
-<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<DisabledRules </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span><span class="si">}</span><span class="s2">>"</span>
802
-</code></pre></div></td></tr></table></div>
803
- </details>
804
-
640
+</li>
641
+
642
+ <li class="md-nav__item">
643
+ <a href="#app.services.WazuhManager.agent.WazuhHttpRequests.delete_request" class="md-nav__link">
644
+ delete_request()
645
+ </a>
646
806
-
807
- <div class="doc doc-children">
808
-
809
-
810
-
811
-
812
-
813
-
814
-
815
-
816
-
817
-<div class="doc doc-object doc-function">
818
-
819
-
820
-
821
-<h3 id="app.models.rules.DisabledRules.__init__" class="doc doc-heading">
822
-<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">rule_id</span><span class="p">,</span> <span class="n">previous_level</span><span class="p">,</span> <span class="n">new_level</span><span class="p">,</span> <span class="n">reason_for_disabling</span><span class="p">,</span> <span class="n">length_of_time</span><span class="p">)</span></code>
823
-
824
-</h3>
825
-
826
-
827
- <div class="doc doc-contents ">
647
+</li>
648
+
649
+ </ul>
650
+ </nav>
651
829
- <p>Initialize a new instance of the DisabledRules class.</p>
830
-<p>:param rule_id: The ID of the rule.
652
+</li>
653
+
654
+ <li class="md-nav__item">
655
+ <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService" class="md-nav__link">
656
+ WazuhManagerAgentService
657
+ </a>
658
+
659
+ <nav class="md-nav" aria-label="WazuhManagerAgentService">
660
+ <ul class="md-nav__list">
661
+
662
+ <li class="md-nav__item">
663
+ <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService.__init__" class="md-nav__link">
664
+ __init__()
665
+ </a>
666
+
667
+</li>
668
+
669
+ <li class="md-nav__item">
670
+ <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService.collect_agents" class="md-nav__link">
671
+ collect_agents()
672
+ </a>
673
+
674
+</li>
675
+
676
+ <li class="md-nav__item">
677
+ <a href="#app.services.WazuhManager.agent.WazuhManagerAgentService.delete_agent" class="md-nav__link">
678
+ delete_agent()
679
+ </a>
680
+
681
+</li>
682
+
683
+ </ul>
684
+ </nav>
685
+
686
+</li>
687
+
688
+ <li class="md-nav__item">
689
+ <a href="#app.services.WazuhManager.disabled_rule" class="md-nav__link">
690
+ app.services.WazuhManager.disabled_rule
691
+ </a>
692
+
693
+</li>
694
+
695
+ <li class="md-nav__item">
696
+ <a href="#app.services.WazuhManager.disabled_rule.DisableRuleService" class="md-nav__link">
697
+ DisableRuleService
698
+ </a>
699
+
700
+ <nav class="md-nav" aria-label="DisableRuleService">
701
+ <ul class="md-nav__list">
702
+
703
+ <li class="md-nav__item">
704
+ <a href="#app.services.WazuhManager.disabled_rule.DisableRuleService.__init__" class="md-nav__link">
705
+ __init__()
706
+ </a>
707
+
708
+</li>
709
+
710
+ <li class="md-nav__item">
711
+ <a href="#app.services.WazuhManager.disabled_rule.DisableRuleService.disable_rule" class="md-nav__link">
712
+ disable_rule()
713
+ </a>
714
+
715
+</li>
716
+
717
+ </ul>
718
+ </nav>
719
+
720
+</li>
721
+
722
+ <li class="md-nav__item">
723
+ <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests" class="md-nav__link">
724
+ WazuhHttpRequests
725
+ </a>
726
+
727
+ <nav class="md-nav" aria-label="WazuhHttpRequests">
728
+ <ul class="md-nav__list">
729
+
730
+ <li class="md-nav__item">
731
+ <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests.__init__" class="md-nav__link">
732
+ __init__()
733
+ </a>
734
+
735
+</li>
736
+
737
+ <li class="md-nav__item">
738
+ <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests.get_request" class="md-nav__link">
739
+ get_request()
740
+ </a>
741
+
742
+</li>
743
+
744
+ <li class="md-nav__item">
745
+ <a href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests.put_request" class="md-nav__link">
746
+ put_request()
747
+ </a>
748
+
749
+</li>
750
+
751
+ </ul>
752
+ </nav>
753
+
754
+</li>
755
+
756
+ <li class="md-nav__item">
757
+ <a href="#app.services.WazuhManager.enabled_rule" class="md-nav__link">
758
+ app.services.WazuhManager.enabled_rule
759
+ </a>
760
+
761
+</li>
762
+
763
+ <li class="md-nav__item">
764
+ <a href="#app.services.WazuhManager.enabled_rule.EnableRuleService" class="md-nav__link">
765
+ EnableRuleService
766
+ </a>
767
+
768
+ <nav class="md-nav" aria-label="EnableRuleService">
769
+ <ul class="md-nav__list">
770
+
771
+ <li class="md-nav__item">
772
+ <a href="#app.services.WazuhManager.enabled_rule.EnableRuleService.__init__" class="md-nav__link">
773
+ __init__()
774
+ </a>
775
+
776
+</li>
777
+
778
+ <li class="md-nav__item">
779
+ <a href="#app.services.WazuhManager.enabled_rule.EnableRuleService.enable_rule" class="md-nav__link">
780
+ enable_rule()
781
+ </a>
782
+
783
+</li>
784
+
785
+ </ul>
786
+ </nav>
787
+
788
+</li>
789
+
790
+ <li class="md-nav__item">
791
+ <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests" class="md-nav__link">
792
+ WazuhHttpRequests
793
+ </a>
794
+
795
+ <nav class="md-nav" aria-label="WazuhHttpRequests">
796
+ <ul class="md-nav__list">
797
+
798
+ <li class="md-nav__item">
799
+ <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests.__init__" class="md-nav__link">
800
+ __init__()
801
+ </a>
802
+
803
+</li>
804
+
805
+ <li class="md-nav__item">
806
+ <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests.get_request" class="md-nav__link">
807
+ get_request()
808
+ </a>
809
+
810
+</li>
811
+
812
+ <li class="md-nav__item">
813
+ <a href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests.put_request" class="md-nav__link">
814
+ put_request()
815
+ </a>
816
+
817
+</li>
818
+
819
+ </ul>
820
+ </nav>
821
+
822
+</li>
823
+
824
+ <li class="md-nav__item">
825
+ <a href="#app.services.WazuhManager.universal" class="md-nav__link">
826
+ app.services.WazuhManager.universal
827
+ </a>
828
+
829
+</li>
830
+
831
+ <li class="md-nav__item">
832
+ <a href="#app.services.WazuhManager.universal.UniversalService" class="md-nav__link">
833
+ UniversalService
834
+ </a>
835
+
836
+ <nav class="md-nav" aria-label="UniversalService">
837
+ <ul class="md-nav__list">
838
+
839
+ <li class="md-nav__item">
840
+ <a href="#app.services.WazuhManager.universal.UniversalService.__init__" class="md-nav__link">
841
+ __init__()
842
+ </a>
843
+
844
+</li>
845
+
846
+ <li class="md-nav__item">
847
+ <a href="#app.services.WazuhManager.universal.UniversalService.collect_wazuhmanager_details" class="md-nav__link">
848
+ collect_wazuhmanager_details()
849
+ </a>
850
+
851
+</li>
852
+
853
+ <li class="md-nav__item">
854
+ <a href="#app.services.WazuhManager.universal.UniversalService.get_auth_token" class="md-nav__link">
855
+ get_auth_token()
856
+ </a>
857
+
858
+</li>
859
+
860
+ <li class="md-nav__item">
861
+ <a href="#app.services.WazuhManager.universal.UniversalService.restart_service" class="md-nav__link">
862
+ restart_service()
863
+ </a>
864
+
865
+</li>
866
+
867
+ </ul>
868
+ </nav>
869
+
870
+</li>
871
+
872
+ <li class="md-nav__item">
873
+ <a href="#app.services.WazuhManager.vulnerability" class="md-nav__link">
874
+ app.services.WazuhManager.vulnerability
875
+ </a>
876
+
877
+</li>
878
+
879
+ <li class="md-nav__item">
880
+ <a href="#app.services.WazuhManager.vulnerability.VulnerabilityService" class="md-nav__link">
881
+ VulnerabilityService
882
+ </a>
883
+
884
+ <nav class="md-nav" aria-label="VulnerabilityService">
885
+ <ul class="md-nav__list">
886
+
887
+ <li class="md-nav__item">
888
+ <a href="#app.services.WazuhManager.vulnerability.VulnerabilityService.__init__" class="md-nav__link">
889
+ __init__()
890
+ </a>
891
+
892
+</li>
893
+
894
+ <li class="md-nav__item">
895
+ <a href="#app.services.WazuhManager.vulnerability.VulnerabilityService.agent_vulnerabilities" class="md-nav__link">
896
+ agent_vulnerabilities()
897
+ </a>
898
+
899
+</li>
900
+
901
+ </ul>
902
+ </nav>
903
+
904
+</li>
905
+
906
+ <li class="md-nav__item">
907
+ <a href="#app.services.WazuhManager.vulnerability.WazuhHttpRequests" class="md-nav__link">
908
+ WazuhHttpRequests
909
+ </a>
910
+
911
+ <nav class="md-nav" aria-label="WazuhHttpRequests">
912
+ <ul class="md-nav__list">
913
+
914
+ <li class="md-nav__item">
915
+ <a href="#app.services.WazuhManager.vulnerability.WazuhHttpRequests.__init__" class="md-nav__link">
916
+ __init__()
917
+ </a>
918
+
919
+</li>
920
+
921
+ <li class="md-nav__item">
922
+ <a href="#app.services.WazuhManager.vulnerability.WazuhHttpRequests.get_request" class="md-nav__link">
923
+ get_request()
924
+ </a>
925
+
926
+</li>
927
+
928
+ </ul>
929
+ </nav>
930
+
931
+</li>
932
+
933
+ </ul>
934
+
935
+</nav>
936
+
937
+ </li>
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+ <li class="md-nav__item">
949
+ <a href="../velociraptor/" class="md-nav__link">
950
+ Velociraptor
951
+ </a>
952
+ </li>
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+
963
+ <li class="md-nav__item">
964
+ <a href="../shuffle/" class="md-nav__link">
965
+ Shuffle
966
+ </a>
967
+ </li>
968
+
969
+
970
+
971
+ </ul>
972
+</nav>
973
+ </div>
974
+ </div>
975
+ </div>
976
+
977
+
978
+
979
+
980
+ <div class="md-content" data-md-component="content">
981
+ <article class="md-content__inner md-typeset">
982
+
983
+
984
+
985
+
986
+ <h1>Wazuh-Manager</h1>
987
+
988
+<h2 id="wazuh-manager-overview">Wazuh-Manager Overview</h2>
989
+<h3 id="wazuh-manager-model"><span style="color:blue">Wazuh-Manager Model</span></h3>
990
+
991
+
992
+<div class="doc doc-object doc-module">
993
+
994
+
995
+<a id="app.models.rules"></a>
996
+ <div class="doc doc-contents first">
997
+
998
+
999
+
1000
+ <div class="doc doc-children">
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+<div class="doc doc-object doc-class">
1010
+
1011
+
1012
+
1013
+<h2 id="app.models.rules.DisabledRules" class="doc doc-heading">
1014
+ <code>DisabledRules</code>
1015
+
1016
+
1017
+</h2>
1018
+
1019
+
1020
+ <div class="doc doc-contents ">
1021
+ <p class="doc doc-class-bases">
1022
+ Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
1023
+
1024
+
1025
+ <p>Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for
1026
+disabling, date disabled, and the length of time the rule will be disabled for.
1027
+This class inherits from SQLAlchemy's Model class.</p>
1028
+<p>:ivar id: Unique integer ID of the rule.
1029
+:ivar rule_id: ID of the rule.
1030
+:ivar previous_level: Previous level configuration of the rule.
1031
+:ivar new_level: New level configuration of the rule.
1032
+:ivar reason_for_disabling: Reason for disabling the rule.
1033
+:ivar date_disabled: Date when the rule was disabled.
1034
+:ivar length_of_time: Length of time the rule will be disabled for.</p>
1035
+
1036
+
1037
+ <details class="quote">
1038
+ <summary>Source code in <code>app\models\rules.py</code></summary>
1039
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-13">13</a></span>
1040
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1041
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1042
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1043
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1044
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1045
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1046
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1047
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1048
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1049
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1050
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1051
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1052
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1053
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1054
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1055
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1056
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1057
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1058
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1059
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1060
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1061
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1062
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1063
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1064
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1065
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1066
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1067
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1068
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1069
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1070
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1071
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1072
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1073
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1074
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1075
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1076
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1077
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1078
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1079
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1080
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1081
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1082
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1083
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1084
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1085
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1086
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1087
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1088
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1089
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1090
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1091
+<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="k">class</span> <span class="nc">DisabledRules</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
1092
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">"""</span>
1093
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Class for disabled rules which stores the rule ID, previous configuration, new configuration, reason for</span>
1094
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> disabling, date disabled, and the length of time the rule will be disabled for.</span>
1095
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> This class inherits from SQLAlchemy's Model class.</span>
1096
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1097
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> :ivar id: Unique integer ID of the rule.</span>
1098
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> :ivar rule_id: ID of the rule.</span>
1099
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> :ivar previous_level: Previous level configuration of the rule.</span>
1100
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> :ivar new_level: New level configuration of the rule.</span>
1101
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> :ivar reason_for_disabling: Reason for disabling the rule.</span>
1102
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> :ivar date_disabled: Date when the rule was disabled.</span>
1103
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> :ivar length_of_time: Length of time the rule will be disabled for.</span>
1104
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> """</span>
1105
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
1106
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1107
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1108
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
1109
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">new_level</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">1000</span><span class="p">))</span>
1110
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1111
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">date_disabled</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">DateTime</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcnow</span><span class="p">)</span>
1112
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">)</span>
1113
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
1114
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1115
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="p">,</span>
1116
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1117
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1118
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">new_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1119
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1120
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
1121
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="p">):</span>
1122
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
1123
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Initialize a new instance of the DisabledRules class.</span>
1124
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1125
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> :param rule_id: The ID of the rule.</span>
1126
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> :param previous_level: The previous level configuration of the rule.</span>
1127
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> :param new_level: The new level configuration of the rule.</span>
1128
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> :param reason_for_disabling: The reason for disabling the rule.</span>
1129
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> :param length_of_time: The length of time the rule will be disabled for.</span>
1130
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
1131
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span> <span class="o">=</span> <span class="n">rule_id</span>
1132
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">previous_level</span> <span class="o">=</span> <span class="n">previous_level</span>
1133
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="bp">self</span><span class="o">.</span><span class="n">new_level</span> <span class="o">=</span> <span class="n">new_level</span>
1134
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reason_for_disabling</span> <span class="o">=</span> <span class="n">reason_for_disabling</span>
1135
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">length_of_time</span> <span class="o">=</span> <span class="n">length_of_time</span>
1136
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
1137
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
1138
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">"""</span>
1139
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns a string representation of the DisabledRules instance.</span>
1140
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
1141
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> :return: A string representation of the rule ID.</span>
1142
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> """</span>
1143
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<DisabledRules </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span><span class="si">}</span><span class="s2">>"</span>
1144
+</code></pre></div></td></tr></table></div>
1145
+ </details>
1146
+
1147
+
1148
+
1149
+ <div class="doc doc-children">
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+<div class="doc doc-object doc-function">
1160
+
1161
+
1162
+
1163
+<h3 id="app.models.rules.DisabledRules.__init__" class="doc doc-heading">
1164
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">rule_id</span><span class="p">,</span> <span class="n">previous_level</span><span class="p">,</span> <span class="n">new_level</span><span class="p">,</span> <span class="n">reason_for_disabling</span><span class="p">,</span> <span class="n">length_of_time</span><span class="p">)</span></code>
1165
+
1166
+</h3>
1167
+
1168
+
1169
+ <div class="doc doc-contents ">
1170
+
1171
+ <p>Initialize a new instance of the DisabledRules class.</p>
1172
+<p>:param rule_id: The ID of the rule.
1173
:param previous_level: The previous level configuration of the rule.
1174
:param new_level: The new level configuration of the rule.
1175
:param reason_for_disabling: The reason for disabling the rule.
1176
:param length_of_time: The length of time the rule will be disabled for.</p>
1177
1178
<details class="quote">
837
- <summary>Source code in <code>app\models\rules.py</code></summary>
838
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-36">36</a></span>
1179
+ <summary>Source code in <code>app\models\rules.py</code></summary>
1180
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-36">36</a></span>
1181
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1182
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1183
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1184
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1185
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1186
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1187
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1188
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1189
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1190
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1191
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1192
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1193
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1194
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1195
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1196
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1197
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1198
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1199
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1200
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1201
+<span class="normal"><a href="#__codelineno-0-57">57</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1202
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="bp">self</span><span class="p">,</span>
1203
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1204
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1205
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">new_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1206
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">reason_for_disabling</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1207
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
1208
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="p">):</span>
1209
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">"""</span>
1210
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Initialize a new instance of the DisabledRules class.</span>
1211
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1212
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> :param rule_id: The ID of the rule.</span>
1213
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> :param previous_level: The previous level configuration of the rule.</span>
1214
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> :param new_level: The new level configuration of the rule.</span>
1215
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> :param reason_for_disabling: The reason for disabling the rule.</span>
1216
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> :param length_of_time: The length of time the rule will be disabled for.</span>
1217
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> """</span>
1218
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span> <span class="o">=</span> <span class="n">rule_id</span>
1219
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="bp">self</span><span class="o">.</span><span class="n">previous_level</span> <span class="o">=</span> <span class="n">previous_level</span>
1220
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="bp">self</span><span class="o">.</span><span class="n">new_level</span> <span class="o">=</span> <span class="n">new_level</span>
1221
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="bp">self</span><span class="o">.</span><span class="n">reason_for_disabling</span> <span class="o">=</span> <span class="n">reason_for_disabling</span>
1222
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="bp">self</span><span class="o">.</span><span class="n">length_of_time</span> <span class="o">=</span> <span class="n">length_of_time</span>
1223
+</code></pre></div></td></tr></table></div>
1224
+ </details>
1225
+ </div>
1226
+
1227
+</div>
1228
+
1229
+<div class="doc doc-object doc-function">
1230
+
1231
+
1232
+
1233
+<h3 id="app.models.rules.DisabledRules.__repr__" class="doc doc-heading">
1234
+<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
1235
+
1236
+</h3>
1237
+
1238
+
1239
+ <div class="doc doc-contents ">
1240
+
1241
+ <p>Returns a string representation of the DisabledRules instance.</p>
1242
+<p>:return: A string representation of the rule ID.</p>
1243
+
1244
+ <details class="quote">
1245
+ <summary>Source code in <code>app\models\rules.py</code></summary>
1246
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-59">59</a></span>
1247
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1248
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1249
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1250
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1251
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1252
+<span class="normal"><a href="#__codelineno-0-65">65</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
1253
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">"""</span>
1254
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns a string representation of the DisabledRules instance.</span>
1255
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
1256
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> :return: A string representation of the rule ID.</span>
1257
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> """</span>
1258
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<DisabledRules </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rule_id</span><span class="si">}</span><span class="s2">>"</span>
1259
+</code></pre></div></td></tr></table></div>
1260
+ </details>
1261
+ </div>
1262
+
1263
+</div>
1264
+
1265
+
1266
+
1267
+ </div>
1268
+
1269
+ </div>
1270
+
1271
+</div>
1272
+
1273
+<div class="doc doc-object doc-class">
1274
+
1275
+
1276
+
1277
+<h2 id="app.models.rules.DisabledRulesSchema" class="doc doc-heading">
1278
+ <code>DisabledRulesSchema</code>
1279
+
1280
+
1281
+</h2>
1282
+
1283
+
1284
+ <div class="doc doc-contents ">
1285
+ <p class="doc doc-class-bases">
1286
+ Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
1287
+
1288
+
1289
+ <p>Schema for serializing and deserializing instances of the DisabledRules class.</p>
1290
+
1291
+
1292
+ <details class="quote">
1293
+ <summary>Source code in <code>app\models\rules.py</code></summary>
1294
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-68">68</a></span>
1295
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1296
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1297
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1298
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1299
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1300
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1301
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1302
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1303
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1304
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1305
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1306
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1307
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1308
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1309
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1310
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1311
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1312
+<span class="normal"><a href="#__codelineno-0-86">86</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="k">class</span> <span class="nc">DisabledRulesSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
1313
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="w"> </span><span class="sd">"""</span>
1314
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> Schema for serializing and deserializing instances of the DisabledRules class.</span>
1315
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> """</span>
1316
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
1317
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1318
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">"""</span>
1319
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1320
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> """</span>
1321
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a>
1322
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1323
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">"id"</span><span class="p">,</span>
1324
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="s2">"rule_id"</span><span class="p">,</span>
1325
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="s2">"previous_level"</span><span class="p">,</span>
1326
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="s2">"new_level"</span><span class="p">,</span>
1327
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">"reason_for_disabling"</span><span class="p">,</span>
1328
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"date_disabled"</span><span class="p">,</span>
1329
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"length_of_time"</span><span class="p">,</span>
1330
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">)</span>
1331
+</code></pre></div></td></tr></table></div>
1332
+ </details>
1333
+
1334
+
1335
+
1336
+ <div class="doc doc-children">
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+<div class="doc doc-object doc-class">
1346
+
1347
+
1348
+
1349
+<h3 id="app.models.rules.DisabledRulesSchema.Meta" class="doc doc-heading">
1350
+ <code>Meta</code>
1351
+
1352
+
1353
+</h3>
1354
+
1355
+
1356
+ <div class="doc doc-contents ">
1357
+
1358
+
1359
+ <p>Meta class defines the fields to be serialized/deserialized.</p>
1360
+
1361
+
1362
+ <details class="quote">
1363
+ <summary>Source code in <code>app\models\rules.py</code></summary>
1364
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-73">73</a></span>
1365
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1366
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1367
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1368
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1369
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1370
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1371
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1372
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1373
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
1374
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
1375
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1376
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1377
+<span class="normal"><a href="#__codelineno-0-86">86</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1378
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">"""</span>
1379
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1380
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> """</span>
1381
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a>
1382
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1383
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">"id"</span><span class="p">,</span>
1384
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="s2">"rule_id"</span><span class="p">,</span>
1385
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="s2">"previous_level"</span><span class="p">,</span>
1386
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="s2">"new_level"</span><span class="p">,</span>
1387
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">"reason_for_disabling"</span><span class="p">,</span>
1388
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="s2">"date_disabled"</span><span class="p">,</span>
1389
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="s2">"length_of_time"</span><span class="p">,</span>
1390
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">)</span>
1391
+</code></pre></div></td></tr></table></div>
1392
+ </details>
1393
+
1394
+
1395
+
1396
+ <div class="doc doc-children">
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+ </div>
1409
+
1410
+ </div>
1411
+
1412
+</div>
1413
+
1414
+
1415
+
1416
+
1417
+ </div>
1418
+
1419
+ </div>
1420
+
1421
+</div>
1422
+
1423
+
1424
+
1425
+
1426
+ </div>
1427
+
1428
+ </div>
1429
+
1430
+</div>
1431
+
1432
+<div class="doc doc-object doc-module">
1433
+
1434
+
1435
+<a id="app.models.agents"></a>
1436
+ <div class="doc doc-contents first">
1437
+
1438
+
1439
+
1440
+ <div class="doc doc-children">
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+<div class="doc doc-object doc-class">
1450
+
1451
+
1452
+
1453
+<h2 id="app.models.agents.AgentMetadata" class="doc doc-heading">
1454
+ <code>AgentMetadata</code>
1455
+
1456
+
1457
+</h2>
1458
+
1459
+
1460
+ <div class="doc doc-contents ">
1461
+ <p class="doc doc-class-bases">
1462
+ Bases: <code><span title="app.db">db</span>.<span title="app.db.Model">Model</span></code></p>
1463
+
1464
+
1465
+ <p>Class for agent metadata which stores the agent ID, IP address, hostname, OS, last seen timestamp,
1466
+and boolean for critical asset. This class inherits from SQLAlchemy's Model class.</p>
1467
+
1468
+
1469
+ <details class="quote">
1470
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1471
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-14">14</a></span>
1472
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1473
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
1474
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
1475
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
1476
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
1477
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1478
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1479
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1480
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1481
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1482
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1483
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1484
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1485
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
1486
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1487
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1488
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1489
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1490
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1491
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1492
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1493
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1494
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1495
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1496
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1497
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1498
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1499
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1500
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1501
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1502
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1503
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1504
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1505
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1506
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1507
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1508
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1509
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1510
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1511
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1512
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1513
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1514
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1515
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1516
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1517
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
1518
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
1519
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1520
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1521
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1522
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1523
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1524
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1525
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1526
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1527
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1528
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1529
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1530
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1531
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1532
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1533
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1534
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1535
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1536
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1537
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1538
+<span class="normal"><a href="#__codelineno-0-81">81</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="k">class</span> <span class="nc">AgentMetadata</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
1539
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">"""</span>
1540
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Class for agent metadata which stores the agent ID, IP address, hostname, OS, last seen timestamp,</span>
1541
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> and boolean for critical asset. This class inherits from SQLAlchemy's Model class.</span>
1542
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
1543
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
1544
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="nb">id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Integer</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1545
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">agent_id</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1546
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">ip_address</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1547
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">os</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1548
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">hostname</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">String</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">(</span><span class="mi">100</span><span class="p">))</span>
1549
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">critical_asset</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">Boolean</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
1550
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">last_seen</span><span class="p">:</span> <span class="n">Column</span><span class="p">[</span><span class="n">DateTime</span><span class="p">]</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">)</span>
1551
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
1552
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1553
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="p">,</span>
1554
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1555
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">ip_address</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1556
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">os</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1557
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">hostname</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1558
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">critical_asset</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
1559
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">last_seen</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span>
1560
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">):</span>
1561
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">"""</span>
1562
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Initialize a new instance of the AgentMetadata class.</span>
1563
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
1564
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> :param agent_id: Unique ID for the agent.</span>
1565
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> :param ip_address: IP address of the agent.</span>
1566
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> :param os: Operating system of the agent.</span>
1567
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> :param hostname: Hostname of the agent.</span>
1568
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> :param critical_asset: Boolean value indicating if the agent is a critical asset.</span>
1569
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> :param last_seen: Timestamp of when the agent was last seen.</span>
1570
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> """</span>
1571
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span> <span class="o">=</span> <span class="n">agent_id</span>
1572
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">ip_address</span> <span class="o">=</span> <span class="n">ip_address</span>
1573
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">os</span> <span class="o">=</span> <span class="n">os</span>
1574
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="bp">self</span><span class="o">.</span><span class="n">hostname</span> <span class="o">=</span> <span class="n">hostname</span>
1575
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="n">critical_asset</span>
1576
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_seen</span> <span class="o">=</span> <span class="n">last_seen</span>
1577
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
1578
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
1579
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="w"> </span><span class="sd">"""</span>
1580
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns a string representation of the AgentMetadata instance.</span>
1581
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1582
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> :return: A string representation of the agent ID.</span>
1583
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> """</span>
1584
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<AgentMetadata </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">>"</span>
1585
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1586
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">def</span> <span class="nf">mark_as_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1587
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="w"> </span><span class="sd">"""</span>
1588
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Marks the agent as a critical asset.</span>
1589
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> """</span>
1590
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">True</span>
1591
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1592
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
1593
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">def</span> <span class="nf">mark_as_non_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1594
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="w"> </span><span class="sd">"""</span>
1595
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> Marks the agent as a non-critical asset.</span>
1596
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> """</span>
1597
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">False</span>
1598
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1599
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
1600
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">def</span> <span class="nf">commit_wazuh_agent_to_db</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1601
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">"""</span>
1602
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Commits the agent to the database.</span>
1603
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> """</span>
1604
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
1605
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1606
+</code></pre></div></td></tr></table></div>
1607
+ </details>
1608
+
1609
+
1610
+
1611
+ <div class="doc doc-children">
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+<div class="doc doc-object doc-function">
1622
+
1623
+
1624
+
1625
+<h3 id="app.models.agents.AgentMetadata.__init__" class="doc doc-heading">
1626
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">agent_id</span><span class="p">,</span> <span class="n">ip_address</span><span class="p">,</span> <span class="n">os</span><span class="p">,</span> <span class="n">hostname</span><span class="p">,</span> <span class="n">critical_asset</span><span class="p">,</span> <span class="n">last_seen</span><span class="p">)</span></code>
1627
+
1628
+</h3>
1629
+
1630
+
1631
+ <div class="doc doc-contents ">
1632
+
1633
+ <p>Initialize a new instance of the AgentMetadata class.</p>
1634
+<p>:param agent_id: Unique ID for the agent.
1635
+:param ip_address: IP address of the agent.
1636
+:param os: Operating system of the agent.
1637
+:param hostname: Hostname of the agent.
1638
+:param critical_asset: Boolean value indicating if the agent is a critical asset.
1639
+:param last_seen: Timestamp of when the agent was last seen.</p>
1640
+
1641
+ <details class="quote">
1642
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1643
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-28">28</a></span>
1644
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
1645
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
1646
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
1647
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
1648
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
1649
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1650
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1651
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1652
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1653
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1654
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1655
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1656
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1657
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1658
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1659
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
1660
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1661
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1662
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
1663
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1664
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1665
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1666
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1667
+<span class="normal"><a href="#__codelineno-0-52">52</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
1668
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="p">,</span>
1669
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1670
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">ip_address</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1671
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">os</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1672
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">hostname</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1673
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">critical_asset</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
1674
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">last_seen</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span>
1675
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="p">):</span>
1676
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">"""</span>
1677
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Initialize a new instance of the AgentMetadata class.</span>
1678
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
1679
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> :param agent_id: Unique ID for the agent.</span>
1680
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> :param ip_address: IP address of the agent.</span>
1681
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> :param os: Operating system of the agent.</span>
1682
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> :param hostname: Hostname of the agent.</span>
1683
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> :param critical_asset: Boolean value indicating if the agent is a critical asset.</span>
1684
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> :param last_seen: Timestamp of when the agent was last seen.</span>
1685
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> """</span>
1686
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span> <span class="o">=</span> <span class="n">agent_id</span>
1687
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="bp">self</span><span class="o">.</span><span class="n">ip_address</span> <span class="o">=</span> <span class="n">ip_address</span>
1688
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="bp">self</span><span class="o">.</span><span class="n">os</span> <span class="o">=</span> <span class="n">os</span>
1689
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="bp">self</span><span class="o">.</span><span class="n">hostname</span> <span class="o">=</span> <span class="n">hostname</span>
1690
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="n">critical_asset</span>
1691
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="bp">self</span><span class="o">.</span><span class="n">last_seen</span> <span class="o">=</span> <span class="n">last_seen</span>
1692
+</code></pre></div></td></tr></table></div>
1693
+ </details>
1694
+ </div>
1695
+
1696
+</div>
1697
+
1698
+<div class="doc doc-object doc-function">
1699
+
1700
+
1701
+
1702
+<h3 id="app.models.agents.AgentMetadata.__repr__" class="doc doc-heading">
1703
+<code class="highlight language-python"><span class="fm">__repr__</span><span class="p">()</span></code>
1704
+
1705
+</h3>
1706
+
1707
+
1708
+ <div class="doc doc-contents ">
1709
+
1710
+ <p>Returns a string representation of the AgentMetadata instance.</p>
1711
+<p>:return: A string representation of the agent ID.</p>
1712
+
1713
+ <details class="quote">
1714
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1715
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-54">54</a></span>
1716
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1717
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1718
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1719
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1720
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
1721
+<span class="normal"><a href="#__codelineno-0-60">60</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
1722
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="w"> </span><span class="sd">"""</span>
1723
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns a string representation of the AgentMetadata instance.</span>
1724
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1725
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> :return: A string representation of the agent ID.</span>
1726
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> """</span>
1727
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"<AgentMetadata </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">>"</span>
1728
+</code></pre></div></td></tr></table></div>
1729
+ </details>
1730
+ </div>
1731
+
1732
+</div>
1733
+
1734
+<div class="doc doc-object doc-function">
1735
+
1736
+
1737
+
1738
+<h3 id="app.models.agents.AgentMetadata.commit_wazuh_agent_to_db" class="doc doc-heading">
1739
+<code class="highlight language-python"><span class="n">commit_wazuh_agent_to_db</span><span class="p">()</span></code>
1740
+
1741
+</h3>
1742
+
1743
+
1744
+ <div class="doc doc-contents ">
1745
+
1746
+ <p>Commits the agent to the database.</p>
1747
+
1748
+ <details class="quote">
1749
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1750
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-76">76</a></span>
1751
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1752
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1753
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1754
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1755
+<span class="normal"><a href="#__codelineno-0-81">81</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="k">def</span> <span class="nf">commit_wazuh_agent_to_db</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1756
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="w"> </span><span class="sd">"""</span>
1757
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> Commits the agent to the database.</span>
1758
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> """</span>
1759
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
1760
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1761
+</code></pre></div></td></tr></table></div>
1762
+ </details>
1763
+ </div>
1764
+
1765
+</div>
1766
+
1767
+<div class="doc doc-object doc-function">
1768
+
1769
+
1770
+
1771
+<h3 id="app.models.agents.AgentMetadata.mark_as_critical" class="doc doc-heading">
1772
+<code class="highlight language-python"><span class="n">mark_as_critical</span><span class="p">()</span></code>
1773
+
1774
+</h3>
1775
+
1776
+
1777
+ <div class="doc doc-contents ">
1778
+
1779
+ <p>Marks the agent as a critical asset.</p>
1780
+
1781
+ <details class="quote">
1782
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1783
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-62">62</a></span>
1784
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1785
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1786
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1787
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1788
+<span class="normal"><a href="#__codelineno-0-67">67</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="k">def</span> <span class="nf">mark_as_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1789
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="w"> </span><span class="sd">"""</span>
1790
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Marks the agent as a critical asset.</span>
1791
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> """</span>
1792
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">True</span>
1793
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1794
+</code></pre></div></td></tr></table></div>
1795
+ </details>
1796
+ </div>
1797
+
1798
+</div>
1799
+
1800
+<div class="doc doc-object doc-function">
1801
+
1802
+
1803
+
1804
+<h3 id="app.models.agents.AgentMetadata.mark_as_non_critical" class="doc doc-heading">
1805
+<code class="highlight language-python"><span class="n">mark_as_non_critical</span><span class="p">()</span></code>
1806
+
1807
+</h3>
1808
+
1809
+
1810
+ <div class="doc doc-contents ">
1811
+
1812
+ <p>Marks the agent as a non-critical asset.</p>
1813
+
1814
+ <details class="quote">
1815
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1816
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-69">69</a></span>
1817
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1818
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1819
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1820
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1821
+<span class="normal"><a href="#__codelineno-0-74">74</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="k">def</span> <span class="nf">mark_as_non_critical</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1822
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="w"> </span><span class="sd">"""</span>
1823
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> Marks the agent as a non-critical asset.</span>
1824
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> """</span>
1825
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="bp">self</span><span class="o">.</span><span class="n">critical_asset</span> <span class="o">=</span> <span class="kc">False</span>
1826
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
1827
+</code></pre></div></td></tr></table></div>
1828
+ </details>
1829
+ </div>
1830
+
1831
+</div>
1832
+
1833
+
1834
+
1835
+ </div>
1836
+
1837
+ </div>
1838
+
1839
+</div>
1840
+
1841
+<div class="doc doc-object doc-class">
1842
+
1843
+
1844
+
1845
+<h2 id="app.models.agents.AgentMetadataSchema" class="doc doc-heading">
1846
+ <code>AgentMetadataSchema</code>
1847
+
1848
+
1849
+</h2>
1850
+
1851
+
1852
+ <div class="doc doc-contents ">
1853
+ <p class="doc doc-class-bases">
1854
+ Bases: <code><span title="app.ma">ma</span>.<span title="app.ma.Schema">Schema</span></code></p>
1855
+
1856
+
1857
+ <p>Schema for serializing and deserializing instances of the AgentMetadata class.</p>
1858
+
1859
+
1860
+ <details class="quote">
1861
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1862
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
1863
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
1864
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
1865
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
1866
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
1867
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1868
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1869
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1870
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1871
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1872
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1873
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1874
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1875
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1876
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1877
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1878
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1879
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1880
+<span class="normal"><a href="#__codelineno-0-102">102</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="k">class</span> <span class="nc">AgentMetadataSchema</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
1881
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="w"> </span><span class="sd">"""</span>
1882
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Schema for serializing and deserializing instances of the AgentMetadata class.</span>
1883
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> """</span>
1884
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1885
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1886
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="w"> </span><span class="sd">"""</span>
1887
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1888
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> """</span>
1889
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1890
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1891
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"id"</span><span class="p">,</span>
1892
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"agent_id"</span><span class="p">,</span>
1893
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"ip_address"</span><span class="p">,</span>
1894
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">"os"</span><span class="p">,</span>
1895
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">"hostname"</span><span class="p">,</span>
1896
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">"critical_asset"</span><span class="p">,</span>
1897
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="s2">"last_seen"</span><span class="p">,</span>
1898
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="p">)</span>
1899
+</code></pre></div></td></tr></table></div>
1900
+ </details>
1901
+
1902
+
1903
+
1904
+ <div class="doc doc-children">
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+
1911
+
1912
+
1913
+<div class="doc doc-object doc-class">
1914
+
1915
+
1916
+
1917
+<h3 id="app.models.agents.AgentMetadataSchema.Meta" class="doc doc-heading">
1918
+ <code>Meta</code>
1919
+
1920
+
1921
+</h3>
1922
+
1923
+
1924
+ <div class="doc doc-contents ">
1925
+
1926
+
1927
+ <p>Meta class defines the fields to be serialized/deserialized.</p>
1928
+
1929
+
1930
+ <details class="quote">
1931
+ <summary>Source code in <code>app\models\agents.py</code></summary>
1932
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
1933
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
1934
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
1935
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
1936
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1937
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1938
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1939
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1940
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1941
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1942
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1943
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1944
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1945
+<span class="normal"><a href="#__codelineno-0-102">102</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
1946
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="w"> </span><span class="sd">"""</span>
1947
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Meta class defines the fields to be serialized/deserialized.</span>
1948
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> """</span>
1949
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1950
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">fields</span><span class="p">:</span> <span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span>
1951
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">"id"</span><span class="p">,</span>
1952
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">"agent_id"</span><span class="p">,</span>
1953
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">"ip_address"</span><span class="p">,</span>
1954
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">"os"</span><span class="p">,</span>
1955
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="s2">"hostname"</span><span class="p">,</span>
1956
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="s2">"critical_asset"</span><span class="p">,</span>
1957
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="s2">"last_seen"</span><span class="p">,</span>
1958
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="p">)</span>
1959
+</code></pre></div></td></tr></table></div>
1960
+ </details>
1961
+
1962
+
1963
+
1964
+ <div class="doc doc-children">
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+ </div>
1977
+
1978
+ </div>
1979
+
1980
+</div>
1981
+
1982
+
1983
+
1984
+
1985
+ </div>
1986
+
1987
+ </div>
1988
+
1989
+</div>
1990
+
1991
+
1992
+
1993
+
1994
+ </div>
1995
+
1996
+ </div>
1997
+
1998
+</div><p><br></p>
1999
+<h3 id="wazuh-manager-routes"><span style="color:green">Wazuh-Manager Routes</span></h3>
2000
+
2001
+
2002
+<div class="doc doc-object doc-function">
2003
+
2004
+
2005
+<a id="app.routes.agents.sync_agents"></a>
2006
+ <div class="doc doc-contents first">
2007
+
2008
+ <p>Endpoint to synchronize all agents.</p>
2009
+
2010
+ <p><strong>Returns:</strong></p>
2011
+ <table>
2012
+ <thead>
2013
+ <tr>
2014
+<th>Name</th> <th>Type</th>
2015
+ <th>Description</th>
2016
+ </tr>
2017
+ </thead>
2018
+ <tbody>
2019
+ <tr>
2020
+<td><code>json</code></td> <td>
2021
+ <code><span title="typing.Any">Any</span></code>
2022
+ </td>
2023
+ <td>
2024
+ <div class="doc-md-description">
2025
+ <p>A JSON response containing the updated information of all synchronized agents.</p>
2026
+ </div>
2027
+ </td>
2028
+ </tr>
2029
+ </tbody>
2030
+ </table>
2031
+
2032
+ <details class="quote">
2033
+ <summary>Source code in <code>app\routes\agents.py</code></summary>
2034
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-69">69</a></span>
2035
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
2036
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2037
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2038
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2039
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2040
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2041
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2042
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2043
+<span class="normal"><a href="#__codelineno-0-78">78</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/agents/sync"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"POST"</span><span class="p">])</span>
2044
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="k">def</span> <span class="nf">sync_agents</span><span class="p">()</span> <span class="o">-></span> <span class="n">Any</span><span class="p">:</span>
2045
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="w"> </span><span class="sd">"""</span>
2046
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> Endpoint to synchronize all agents.</span>
2047
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> Returns:</span>
2048
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> json: A JSON response containing the updated information of all synchronized agents.</span>
2049
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> """</span>
2050
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentSyncService</span><span class="p">()</span>
2051
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">sync_agents</span><span class="p">()</span>
2052
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
2053
+</code></pre></div></td></tr></table></div>
2054
+ </details>
2055
+ </div>
2056
+
2057
+</div>
2058
+
2059
+<div class="doc doc-object doc-function">
2060
+
2061
+
2062
+<a id="app.routes.agents.delete_agent"></a>
2063
+ <div class="doc doc-contents first">
2064
+
2065
+ <p>Endpoint to delete an agent.</p>
2066
+
2067
+ <p><strong>Parameters:</strong></p>
2068
+ <table>
2069
+ <thead>
2070
+ <tr>
2071
+ <th>Name</th>
2072
+ <th>Type</th>
2073
+ <th>Description</th>
2074
+ <th>Default</th>
2075
+ </tr>
2076
+ </thead>
2077
+ <tbody>
2078
+ <tr>
2079
+ <td><code>agent_id</code></td>
2080
+ <td>
2081
+ <code>str</code>
2082
+ </td>
2083
+ <td>
2084
+ <div class="doc-md-description">
2085
+ <p>The ID of the agent to be deleted.</p>
2086
+ </div>
2087
+ </td>
2088
+ <td>
2089
+ <em>required</em>
2090
+ </td>
2091
+ </tr>
2092
+ </tbody>
2093
+ </table>
2094
+
2095
+ <p><strong>Returns:</strong></p>
2096
+ <table>
2097
+ <thead>
2098
+ <tr>
2099
+<th>Name</th> <th>Type</th>
2100
+ <th>Description</th>
2101
+ </tr>
2102
+ </thead>
2103
+ <tbody>
2104
+ <tr>
2105
+<td><code>json</code></td> <td>
2106
+ <code><span title="typing.Any">Any</span></code>
2107
+ </td>
2108
+ <td>
2109
+ <div class="doc-md-description">
2110
+ <p>A JSON response indicating whether the deletion was successful.</p>
2111
+ </div>
2112
+ </td>
2113
+ </tr>
2114
+ </tbody>
2115
+ </table>
2116
+
2117
+ <details class="quote">
2118
+ <summary>Source code in <code>app\routes\agents.py</code></summary>
2119
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-81">81</a></span>
2120
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2121
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2122
+<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2123
+<span class="normal"><a href="#__codelineno-0-85">85</a></span>
2124
+<span class="normal"><a href="#__codelineno-0-86">86</a></span>
2125
+<span class="normal"><a href="#__codelineno-0-87">87</a></span>
2126
+<span class="normal"><a href="#__codelineno-0-88">88</a></span>
2127
+<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2128
+<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2129
+<span class="normal"><a href="#__codelineno-0-91">91</a></span>
2130
+<span class="normal"><a href="#__codelineno-0-92">92</a></span>
2131
+<span class="normal"><a href="#__codelineno-0-93">93</a></span>
2132
+<span class="normal"><a href="#__codelineno-0-94">94</a></span>
2133
+<span class="normal"><a href="#__codelineno-0-95">95</a></span>
2134
+<span class="normal"><a href="#__codelineno-0-96">96</a></span>
2135
+<span class="normal"><a href="#__codelineno-0-97">97</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/agents/<agent_id>/delete"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"POST"</span><span class="p">])</span>
2136
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="k">def</span> <span class="nf">delete_agent</span><span class="p">(</span><span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Any</span><span class="p">:</span>
2137
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">"""</span>
2138
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Endpoint to delete an agent.</span>
2139
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
2140
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> agent_id (str): The ID of the agent to be deleted.</span>
2141
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
2142
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> json: A JSON response indicating whether the deletion was successful.</span>
2143
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> """</span>
2144
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
2145
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">delete_agent_db</span><span class="p">(</span><span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">)</span>
2146
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
2147
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
2148
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">agent_service</span> <span class="o">=</span> <span class="n">WazuhManagerAgentService</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span>
2149
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">agent_service</span><span class="o">.</span><span class="n">delete_agent</span><span class="p">(</span><span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">)</span>
2150
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
2151
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="n">result</span>
2152
+</code></pre></div></td></tr></table></div>
2153
+ </details>
2154
+ </div>
2155
+
2156
+</div>
2157
+
2158
+<div class="doc doc-object doc-function">
2159
+
2160
+
2161
+<a id="app.routes.agents.get_agent_vulnerabilities"></a>
2162
+ <div class="doc doc-contents first">
2163
+
2164
+ <p>Endpoint to get the vulnerabilities of a specific agent.</p>
2165
+
2166
+ <p><strong>Parameters:</strong></p>
2167
+ <table>
2168
+ <thead>
2169
+ <tr>
2170
+ <th>Name</th>
2171
+ <th>Type</th>
2172
+ <th>Description</th>
2173
+ <th>Default</th>
2174
+ </tr>
2175
+ </thead>
2176
+ <tbody>
2177
+ <tr>
2178
+ <td><code>agent_id</code></td>
2179
+ <td>
2180
+ <code>str</code>
2181
+ </td>
2182
+ <td>
2183
+ <div class="doc-md-description">
2184
+ <p>The ID of the agent whose vulnerabilities are to be fetched.</p>
2185
+ </div>
2186
+ </td>
2187
+ <td>
2188
+ <em>required</em>
2189
+ </td>
2190
+ </tr>
2191
+ </tbody>
2192
+ </table>
2193
+
2194
+ <p><strong>Returns:</strong></p>
2195
+ <table>
2196
+ <thead>
2197
+ <tr>
2198
+<th>Name</th> <th>Type</th>
2199
+ <th>Description</th>
2200
+ </tr>
2201
+ </thead>
2202
+ <tbody>
2203
+ <tr>
2204
+<td><code>json</code></td> <td>
2205
+ <code><span title="typing.Any">Any</span></code>
2206
+ </td>
2207
+ <td>
2208
+ <div class="doc-md-description">
2209
+ <p>A JSON response containing the vulnerabilities of the agent.</p>
2210
+ </div>
2211
+ </td>
2212
+ </tr>
2213
+ </tbody>
2214
+ </table>
2215
+
2216
+ <details class="quote">
2217
+ <summary>Source code in <code>app\routes\agents.py</code></summary>
2218
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-100">100</a></span>
2219
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2220
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2221
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2222
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2223
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2224
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2225
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2226
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2227
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2228
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2229
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2230
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2231
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2232
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2233
+<span class="normal"><a href="#__codelineno-0-115">115</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/agents/<agent_id>/vulnerabilities"</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">"GET"</span><span class="p">])</span>
2234
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="k">def</span> <span class="nf">get_agent_vulnerabilities</span><span class="p">(</span><span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Any</span><span class="p">:</span>
2235
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="w"> </span><span class="sd">"""</span>
2236
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> Endpoint to get the vulnerabilities of a specific agent.</span>
2237
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Args:</span>
2238
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> agent_id (str): The ID of the agent whose vulnerabilities are to be fetched.</span>
2239
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
2240
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> json: A JSON response containing the vulnerabilities of the agent.</span>
2241
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> """</span>
2242
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
2243
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">vulnerability_service</span> <span class="o">=</span> <span class="n">VulnerabilityService</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span>
2244
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a>
2245
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">agent_vulnerabilities</span> <span class="o">=</span> <span class="n">vulnerability_service</span><span class="o">.</span><span class="n">agent_vulnerabilities</span><span class="p">(</span>
2246
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">,</span>
2247
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="p">)</span>
2248
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">return</span> <span class="n">agent_vulnerabilities</span>
2249
+</code></pre></div></td></tr></table></div>
2250
+ </details>
2251
+ </div>
2252
+
2253
+</div><p><br></p>
2254
+<h3 id="wazuh-manager-services"><span style="color:red">Wazuh-Manager Services</span></h3>
2255
+
2256
+
2257
+<div class="doc doc-object doc-module">
2258
+
2259
+
2260
+<a id="app.services.WazuhManager.agent"></a>
2261
+ <div class="doc doc-contents first">
2262
+
2263
+
2264
+
2265
+ <div class="doc doc-children">
2266
+
2267
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+<div class="doc doc-object doc-class">
2275
+
2276
+
2277
+
2278
+<h2 id="app.services.WazuhManager.agent.WazuhHttpRequests" class="doc doc-heading">
2279
+ <code>WazuhHttpRequests</code>
2280
+
2281
+
2282
+</h2>
2283
+
2284
+
2285
+ <div class="doc doc-contents ">
2286
+
2287
+
2288
+ <p>A class to handle HTTP requests to the Wazuh API.</p>
2289
+<p>This class is initialized with the URL for the Wazuh connector and an authentication token.
2290
+It provides a method to make HTTP DELETE requests to the specified Wazuh API endpoint.</p>
2291
+
2292
+
2293
+ <details class="quote">
2294
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2295
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-12">12</a></span>
2296
+<span class="normal"><a href="#__codelineno-0-13">13</a></span>
2297
+<span class="normal"><a href="#__codelineno-0-14">14</a></span>
2298
+<span class="normal"><a href="#__codelineno-0-15">15</a></span>
2299
+<span class="normal"><a href="#__codelineno-0-16">16</a></span>
2300
+<span class="normal"><a href="#__codelineno-0-17">17</a></span>
2301
+<span class="normal"><a href="#__codelineno-0-18">18</a></span>
2302
+<span class="normal"><a href="#__codelineno-0-19">19</a></span>
2303
+<span class="normal"><a href="#__codelineno-0-20">20</a></span>
2304
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2305
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2306
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2307
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2308
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2309
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2310
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2311
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2312
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2313
+<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2314
+<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2315
+<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2316
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2317
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2318
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2319
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2320
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2321
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2322
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2323
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2324
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2325
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2326
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2327
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2328
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2329
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2330
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2331
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2332
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2333
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2334
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2335
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2336
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2337
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2338
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2339
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2340
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2341
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2342
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2343
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2344
+<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="k">class</span> <span class="nc">WazuhHttpRequests</span><span class="p">:</span>
2345
+<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="w"> </span><span class="sd">"""</span>
2346
+<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> A class to handle HTTP requests to the Wazuh API.</span>
2347
+<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
2348
+<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> This class is initialized with the URL for the Wazuh connector and an authentication token.</span>
2349
+<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> It provides a method to make HTTP DELETE requests to the specified Wazuh API endpoint.</span>
2350
+<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> """</span>
2351
+<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
2352
+<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
2353
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">"""</span>
2354
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes a WazuhHttpRequests instance.</span>
2355
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
2356
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Args:</span>
2357
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> connector_url (str): The URL for the Wazuh connector.</span>
2358
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
2359
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> """</span>
2360
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
2361
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
2362
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">"</span><span class="p">}</span>
2363
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2364
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">delete_request</span><span class="p">(</span>
2365
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="p">,</span>
2366
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
2367
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
2368
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
2369
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">"""</span>
2370
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Makes an HTTP DELETE request to a specified Wazuh API endpoint.</span>
2371
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2372
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2373
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> endpoint (str): The endpoint to make a DELETE request to.</span>
2374
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> params (Optional[Dict[str, str]]): Any parameters to pass in the DELETE request.</span>
2375
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
2376
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
2377
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the request was successful,</span>
2378
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> `{"agentDeleted": True}` is returned. If it failed, `{"agentDeleted": False}` is returned.</span>
2379
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> """</span>
2380
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">try</span><span class="p">:</span>
2381
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span>
2382
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
2383
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
2384
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
2385
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2386
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2387
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
2388
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully deleted </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2389
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"agentDeleted"</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2390
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
2391
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2392
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to delete </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2393
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"agentDeleted"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2394
+</code></pre></div></td></tr></table></div>
2395
+ </details>
2396
+
2397
+
2398
+
2399
+ <div class="doc doc-children">
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+<div class="doc doc-object doc-function">
2410
+
2411
+
2412
+
2413
+<h3 id="app.services.WazuhManager.agent.WazuhHttpRequests.__init__" class="doc doc-heading">
2414
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">connector_url</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">)</span></code>
2415
+
2416
+</h3>
2417
+
2418
+
2419
+ <div class="doc doc-contents ">
2420
+
2421
+ <p>Initializes a WazuhHttpRequests instance.</p>
2422
+
2423
+ <p><strong>Parameters:</strong></p>
2424
+ <table>
2425
+ <thead>
2426
+ <tr>
2427
+ <th>Name</th>
2428
+ <th>Type</th>
2429
+ <th>Description</th>
2430
+ <th>Default</th>
2431
+ </tr>
2432
+ </thead>
2433
+ <tbody>
2434
+ <tr>
2435
+ <td><code>connector_url</code></td>
2436
+ <td>
2437
+ <code>str</code>
2438
+ </td>
2439
+ <td>
2440
+ <div class="doc-md-description">
2441
+ <p>The URL for the Wazuh connector.</p>
2442
+ </div>
2443
+ </td>
2444
+ <td>
2445
+ <em>required</em>
2446
+ </td>
2447
+ </tr>
2448
+ <tr>
2449
+ <td><code>wazuh_auth_token</code></td>
2450
+ <td>
2451
+ <code>str</code>
2452
+ </td>
2453
+ <td>
2454
+ <div class="doc-md-description">
2455
+ <p>The Wazuh API authentication token.</p>
2456
+ </div>
2457
+ </td>
2458
+ <td>
2459
+ <em>required</em>
2460
+ </td>
2461
+ </tr>
2462
+ </tbody>
2463
+ </table>
2464
+
2465
+ <details class="quote">
2466
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2467
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-20">20</a></span>
2468
+<span class="normal"><a href="#__codelineno-0-21">21</a></span>
2469
+<span class="normal"><a href="#__codelineno-0-22">22</a></span>
2470
+<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2471
+<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2472
+<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2473
+<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2474
+<span class="normal"><a href="#__codelineno-0-27">27</a></span>
2475
+<span class="normal"><a href="#__codelineno-0-28">28</a></span>
2476
+<span class="normal"><a href="#__codelineno-0-29">29</a></span>
2477
+<span class="normal"><a href="#__codelineno-0-30">30</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
2478
+<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="w"> </span><span class="sd">"""</span>
2479
+<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> Initializes a WazuhHttpRequests instance.</span>
2480
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
2481
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Args:</span>
2482
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> connector_url (str): The URL for the Wazuh connector.</span>
2483
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
2484
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> """</span>
2485
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
2486
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
2487
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">"</span><span class="p">}</span>
2488
+</code></pre></div></td></tr></table></div>
2489
+ </details>
2490
+ </div>
2491
+
2492
+</div>
2493
+
2494
+<div class="doc doc-object doc-function">
2495
+
2496
+
2497
+
2498
+<h3 id="app.services.WazuhManager.agent.WazuhHttpRequests.delete_request" class="doc doc-heading">
2499
+<code class="highlight language-python"><span class="n">delete_request</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
2500
+
2501
+</h3>
2502
+
2503
+
2504
+ <div class="doc doc-contents ">
2505
+
2506
+ <p>Makes an HTTP DELETE request to a specified Wazuh API endpoint.</p>
2507
+
2508
+ <p><strong>Parameters:</strong></p>
2509
+ <table>
2510
+ <thead>
2511
+ <tr>
2512
+ <th>Name</th>
2513
+ <th>Type</th>
2514
+ <th>Description</th>
2515
+ <th>Default</th>
2516
+ </tr>
2517
+ </thead>
2518
+ <tbody>
2519
+ <tr>
2520
+ <td><code>endpoint</code></td>
2521
+ <td>
2522
+ <code>str</code>
2523
+ </td>
2524
+ <td>
2525
+ <div class="doc-md-description">
2526
+ <p>The endpoint to make a DELETE request to.</p>
2527
+ </div>
2528
+ </td>
2529
+ <td>
2530
+ <em>required</em>
2531
+ </td>
2532
+ </tr>
2533
+ <tr>
2534
+ <td><code>params</code></td>
2535
+ <td>
2536
+ <code><span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>[str, str]]</code>
2537
+ </td>
2538
+ <td>
2539
+ <div class="doc-md-description">
2540
+ <p>Any parameters to pass in the DELETE request.</p>
2541
+ </div>
2542
+ </td>
2543
+ <td>
2544
+ <code>None</code>
2545
+ </td>
2546
+ </tr>
2547
+ </tbody>
2548
+ </table>
2549
+
2550
+ <p><strong>Returns:</strong></p>
2551
+ <table>
2552
+ <thead>
2553
+ <tr>
2554
+ <th>Type</th>
2555
+ <th>Description</th>
2556
+ </tr>
2557
+ </thead>
2558
+ <tbody>
2559
+ <tr>
2560
+ <td>
2561
+ <code><span title="typing.Dict">Dict</span>[str, bool]</code>
2562
+ </td>
2563
+ <td>
2564
+ <div class="doc-md-description">
2565
+ <p>Dict[str, bool]: A dictionary indicating the success of the operation. If the request was successful,
2566
+ <code>{"agentDeleted": True}</code> is returned. If it failed, <code>{"agentDeleted": False}</code> is returned.</p>
2567
+ </div>
2568
+ </td>
2569
+ </tr>
2570
+ </tbody>
2571
+ </table>
2572
+
2573
+ <details class="quote">
2574
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2575
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-32">32</a></span>
2576
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2577
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2578
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2579
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2580
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
2581
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
2582
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2583
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2584
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2585
+<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2586
+<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2587
+<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2588
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
2589
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2590
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2591
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2592
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2593
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2594
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2595
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2596
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
2597
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
2598
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
2599
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
2600
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
2601
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
2602
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
2603
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
2604
+<span class="normal"><a href="#__codelineno-0-61">61</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k">def</span> <span class="nf">delete_request</span><span class="p">(</span>
2605
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="bp">self</span><span class="p">,</span>
2606
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
2607
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
2608
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
2609
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">"""</span>
2610
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Makes an HTTP DELETE request to a specified Wazuh API endpoint.</span>
2611
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2612
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2613
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> endpoint (str): The endpoint to make a DELETE request to.</span>
2614
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> params (Optional[Dict[str, str]]): Any parameters to pass in the DELETE request.</span>
2615
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
2616
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
2617
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the request was successful,</span>
2618
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> `{"agentDeleted": True}` is returned. If it failed, `{"agentDeleted": False}` is returned.</span>
2619
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> """</span>
2620
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">try</span><span class="p">:</span>
2621
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span>
2622
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
2623
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
2624
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
2625
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2626
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span>
2627
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
2628
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully deleted </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2629
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"agentDeleted"</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2630
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
2631
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2632
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to delete </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2633
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"agentDeleted"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2634
+</code></pre></div></td></tr></table></div>
2635
+ </details>
2636
+ </div>
2637
+
2638
+</div>
2639
+
2640
+
2641
+
2642
+ </div>
2643
+
2644
+ </div>
2645
+
2646
+</div>
2647
+
2648
+<div class="doc doc-object doc-class">
2649
+
2650
+
2651
+
2652
+<h2 id="app.services.WazuhManager.agent.WazuhManagerAgentService" class="doc doc-heading">
2653
+ <code>WazuhManagerAgentService</code>
2654
+
2655
+
2656
+</h2>
2657
+
2658
+
2659
+ <div class="doc doc-contents ">
2660
+
2661
+
2662
+ <p>A service class that encapsulates the logic for handling agent-related operations in the Wazuh Manager.</p>
2663
+<p>This class uses the UniversalService to get authentication tokens and URLs, and WazuhHttpRequests to make HTTP requests.
2664
+It provides methods to collect all agents from Wazuh Manager and to delete a specific agent.</p>
2665
+
2666
+
2667
+ <details class="quote">
2668
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2669
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
2670
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
2671
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
2672
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
2673
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
2674
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
2675
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
2676
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
2677
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
2678
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
2679
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
2680
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
2681
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
2682
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2683
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2684
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2685
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2686
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2687
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2688
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2689
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2690
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2691
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2692
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2693
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2694
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2695
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2696
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2697
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2698
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2699
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2700
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2701
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2702
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2703
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2704
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2705
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2706
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2707
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2708
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2709
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2710
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
2711
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
2712
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
2713
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
2714
+<span class="normal"><a href="#__codelineno-0-109">109</a></span>
2715
+<span class="normal"><a href="#__codelineno-0-110">110</a></span>
2716
+<span class="normal"><a href="#__codelineno-0-111">111</a></span>
2717
+<span class="normal"><a href="#__codelineno-0-112">112</a></span>
2718
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
2719
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
2720
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
2721
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
2722
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
2723
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
2724
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
2725
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
2726
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
2727
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
2728
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
2729
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
2730
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
2731
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
2732
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
2733
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
2734
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
2735
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2736
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2737
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2738
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2739
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2740
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2741
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2742
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2743
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2744
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2745
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
2746
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2747
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
2748
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
2749
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
2750
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
2751
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
2752
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
2753
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
2754
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
2755
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
2756
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
2757
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
2758
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
2759
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
2760
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
2761
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
2762
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
2763
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
2764
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
2765
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
2766
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
2767
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
2768
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2769
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2770
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2771
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2772
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2773
+<span class="normal"><a href="#__codelineno-0-168">168</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="k">class</span> <span class="nc">WazuhManagerAgentService</span><span class="p">:</span>
2774
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="w"> </span><span class="sd">"""</span>
2775
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> A service class that encapsulates the logic for handling agent-related operations in the Wazuh Manager.</span>
2776
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
2777
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> This class uses the UniversalService to get authentication tokens and URLs, and WazuhHttpRequests to make HTTP requests.</span>
2778
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> It provides methods to collect all agents from Wazuh Manager and to delete a specific agent.</span>
2779
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> """</span>
2780
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a>
2781
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
2782
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="w"> </span><span class="sd">"""</span>
2783
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> Initializes a WazuhManagerAgentService instance.</span>
2784
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
2785
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> Args:</span>
2786
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> universal_service (UniversalService): An instance of UniversalService.</span>
2787
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> """</span>
2788
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
2789
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
2790
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
2791
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2792
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
2793
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">)</span>
2794
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2795
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">def</span> <span class="nf">collect_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]:</span>
2796
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="w"> </span><span class="sd">"""</span>
2797
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Collects all agents from the Wazuh Manager.</span>
2798
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
2799
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
2800
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Optional[List[Dict[str, str]]]: A list of dictionaries where each dictionary contains data about an agent.</span>
2801
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> If the operation fails, it returns None.</span>
2802
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> """</span>
2803
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting Wazuh Agents"</span><span class="p">)</span>
2804
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">try</span><span class="p">:</span>
2805
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">agent_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_agent_data</span><span class="p">()</span>
2806
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">if</span> <span class="n">agent_data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2807
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="kc">None</span>
2808
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
2809
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_agent_list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">)</span>
2810
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
2811
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
2812
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2813
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">return</span> <span class="kc">None</span>
2814
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2815
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="k">def</span> <span class="nf">_get_agent_data</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
2816
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="w"> </span><span class="sd">"""</span>
2817
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Retrieves agent data from the Wazuh Manager.</span>
2818
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
2819
+<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> Returns:</span>
2820
+<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> Optional[Dict[str, Any]]: A dictionary containing data about agents. If the operation fails, it returns None.</span>
2821
+<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> """</span>
2822
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="si">}</span><span class="s2">"</span><span class="p">}</span>
2823
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">limit</span> <span class="o">=</span> <span class="mi">1000</span>
2824
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2825
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/agents?limit=</span><span class="si">{</span><span class="n">limit</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
2826
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
2827
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2828
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="p">)</span>
2829
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
2830
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"affected_items"</span><span class="p">]</span>
2831
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">else</span><span class="p">:</span>
2832
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="kc">None</span>
2833
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
2834
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">def</span> <span class="nf">_build_agent_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent_data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]:</span>
2835
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">"""</span>
2836
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Builds a list of dictionaries with agent data.</span>
2837
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
2838
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
2839
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> agent_data (Dict[str, Any]): The raw agent data.</span>
2840
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2841
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Returns:</span>
2842
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> List[Dict[str, str]]: A list of dictionaries where each dictionary contains data about an agent.</span>
2843
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a><span class="sd"> """</span>
2844
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="p">[]</span>
2845
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
2846
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="n">os_name</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"os"</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"Unknown"</span><span class="p">)</span>
2847
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">last_keep_alive</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"lastKeepAlive"</span><span class="p">,</span> <span class="s2">"Unknown"</span><span class="p">)</span>
2848
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="n">wazuh_agents_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2849
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">{</span>
2850
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="s2">"agent_id"</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span>
2851
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="s2">"agent_name"</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
2852
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">"agent_ip"</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">"ip"</span><span class="p">],</span>
2853
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="s2">"agent_os"</span><span class="p">:</span> <span class="n">os_name</span><span class="p">,</span>
2854
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="s2">"agent_last_seen"</span><span class="p">:</span> <span class="n">last_keep_alive</span><span class="p">,</span>
2855
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="p">},</span>
2856
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="p">)</span>
2857
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Collected Wazuh Agent: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
2858
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
2859
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
2860
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="k">def</span> <span class="nf">delete_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
2861
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="w"> </span><span class="sd">"""</span>
2862
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> Deletes an agent from the Wazuh Manager.</span>
2863
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
2864
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> Args:</span>
2865
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> agent_id (str): The id of the agent to be deleted.</span>
2866
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
2867
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> Returns:</span>
2868
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the operation was successful,</span>
2869
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="sd"> `{"agentDeleted": True}` is returned. If it failed, `{"agentDeleted": False}` is returned.</span>
2870
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> """</span>
2871
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
2872
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="s2">"purge"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2873
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="s2">"agents_list"</span><span class="p">:</span> <span class="p">[</span><span class="n">agent_id</span><span class="p">],</span>
2874
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="s2">"status"</span><span class="p">:</span> <span class="s2">"all"</span><span class="p">,</span>
2875
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">"older_than"</span><span class="p">:</span> <span class="s2">"0s"</span><span class="p">,</span>
2876
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">}</span>
2877
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">delete_request</span><span class="p">(</span><span class="s2">"agents"</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
2878
+</code></pre></div></td></tr></table></div>
2879
+ </details>
2880
+
2881
+
2882
+
2883
+ <div class="doc doc-children">
2884
+
2885
+
2886
+
2887
+
2888
+
2889
+
2890
+
2891
+
2892
+
2893
+<div class="doc doc-object doc-function">
2894
+
2895
+
2896
+
2897
+<h3 id="app.services.WazuhManager.agent.WazuhManagerAgentService.__init__" class="doc doc-heading">
2898
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span></code>
2899
+
2900
+</h3>
2901
+
2902
+
2903
+ <div class="doc doc-contents ">
2904
+
2905
+ <p>Initializes a WazuhManagerAgentService instance.</p>
2906
+
2907
+ <p><strong>Parameters:</strong></p>
2908
+ <table>
2909
+ <thead>
2910
+ <tr>
2911
+ <th>Name</th>
2912
+ <th>Type</th>
2913
+ <th>Description</th>
2914
+ <th>Default</th>
2915
+ </tr>
2916
+ </thead>
2917
+ <tbody>
2918
+ <tr>
2919
+ <td><code>universal_service</code></td>
2920
+ <td>
2921
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
2922
+ </td>
2923
+ <td>
2924
+ <div class="doc-md-description">
2925
+ <p>An instance of UniversalService.</p>
2926
+ </div>
2927
+ </td>
2928
+ <td>
2929
+ <em>required</em>
2930
+ </td>
2931
+ </tr>
2932
+ </tbody>
2933
+ </table>
2934
+
2935
+ <details class="quote">
2936
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
2937
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-72">72</a></span>
2938
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2939
+<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2940
+<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2941
+<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2942
+<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2943
+<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2944
+<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2945
+<span class="normal"><a href="#__codelineno-0-80">80</a></span>
2946
+<span class="normal"><a href="#__codelineno-0-81">81</a></span>
2947
+<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2948
+<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2949
+<span class="normal"><a href="#__codelineno-0-84">84</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
2950
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="w"> </span><span class="sd">"""</span>
2951
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> Initializes a WazuhManagerAgentService instance.</span>
2952
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
2953
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> Args:</span>
2954
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> universal_service (UniversalService): An instance of UniversalService.</span>
2955
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> """</span>
2956
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
2957
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
2958
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
2959
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2960
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
2961
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">)</span>
2962
+</code></pre></div></td></tr></table></div>
2963
+ </details>
2964
+ </div>
2965
+
2966
+</div>
2967
+
2968
+<div class="doc doc-object doc-function">
2969
+
2970
+
2971
+
2972
+<h3 id="app.services.WazuhManager.agent.WazuhManagerAgentService.collect_agents" class="doc doc-heading">
2973
+<code class="highlight language-python"><span class="n">collect_agents</span><span class="p">()</span></code>
2974
+
2975
+</h3>
2976
+
2977
+
2978
+ <div class="doc doc-contents ">
2979
+
2980
+ <p>Collects all agents from the Wazuh Manager.</p>
2981
+
2982
+ <p><strong>Returns:</strong></p>
2983
+ <table>
2984
+ <thead>
2985
+ <tr>
2986
+ <th>Type</th>
2987
+ <th>Description</th>
2988
+ </tr>
2989
+ </thead>
2990
+ <tbody>
2991
+ <tr>
2992
+ <td>
2993
+ <code><span title="typing.Optional">Optional</span>[<span title="typing.List">List</span>[<span title="typing.Dict">Dict</span>[str, str]]]</code>
2994
+ </td>
2995
+ <td>
2996
+ <div class="doc-md-description">
2997
+ <p>Optional[List[Dict[str, str]]]: A list of dictionaries where each dictionary contains data about an agent.
2998
+ If the operation fails, it returns None.</p>
2999
+ </div>
3000
+ </td>
3001
+ </tr>
3002
+ </tbody>
3003
+ </table>
3004
+
3005
+ <details class="quote">
3006
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
3007
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
3008
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
3009
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
3010
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
3011
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
3012
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
3013
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
3014
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
3015
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
3016
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
3017
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
3018
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
3019
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
3020
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
3021
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
3022
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
3023
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
3024
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
3025
+<span class="normal"><a href="#__codelineno-0-104">104</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="k">def</span> <span class="nf">collect_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]:</span>
3026
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="w"> </span><span class="sd">"""</span>
3027
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Collects all agents from the Wazuh Manager.</span>
3028
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
3029
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
3030
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Optional[List[Dict[str, str]]]: A list of dictionaries where each dictionary contains data about an agent.</span>
3031
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> If the operation fails, it returns None.</span>
3032
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> """</span>
3033
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Collecting Wazuh Agents"</span><span class="p">)</span>
3034
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">try</span><span class="p">:</span>
3035
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">agent_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_agent_data</span><span class="p">()</span>
3036
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">if</span> <span class="n">agent_data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3037
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="kc">None</span>
3038
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
3039
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_agent_list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">)</span>
3040
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
3041
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3042
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
3043
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">return</span> <span class="kc">None</span>
3044
+</code></pre></div></td></tr></table></div>
3045
+ </details>
3046
+ </div>
3047
+
3048
+</div>
3049
+
3050
+<div class="doc doc-object doc-function">
3051
+
3052
+
3053
+
3054
+<h3 id="app.services.WazuhManager.agent.WazuhManagerAgentService.delete_agent" class="doc doc-heading">
3055
+<code class="highlight language-python"><span class="n">delete_agent</span><span class="p">(</span><span class="n">agent_id</span><span class="p">)</span></code>
3056
+
3057
+</h3>
3058
+
3059
+
3060
+ <div class="doc doc-contents ">
3061
+
3062
+ <p>Deletes an agent from the Wazuh Manager.</p>
3063
+
3064
+ <p><strong>Parameters:</strong></p>
3065
+ <table>
3066
+ <thead>
3067
+ <tr>
3068
+ <th>Name</th>
3069
+ <th>Type</th>
3070
+ <th>Description</th>
3071
+ <th>Default</th>
3072
+ </tr>
3073
+ </thead>
3074
+ <tbody>
3075
+ <tr>
3076
+ <td><code>agent_id</code></td>
3077
+ <td>
3078
+ <code>str</code>
3079
+ </td>
3080
+ <td>
3081
+ <div class="doc-md-description">
3082
+ <p>The id of the agent to be deleted.</p>
3083
+ </div>
3084
+ </td>
3085
+ <td>
3086
+ <em>required</em>
3087
+ </td>
3088
+ </tr>
3089
+ </tbody>
3090
+ </table>
3091
+
3092
+ <p><strong>Returns:</strong></p>
3093
+ <table>
3094
+ <thead>
3095
+ <tr>
3096
+ <th>Type</th>
3097
+ <th>Description</th>
3098
+ </tr>
3099
+ </thead>
3100
+ <tbody>
3101
+ <tr>
3102
+ <td>
3103
+ <code><span title="typing.Dict">Dict</span>[str, bool]</code>
3104
+ </td>
3105
+ <td>
3106
+ <div class="doc-md-description">
3107
+ <p>Dict[str, bool]: A dictionary indicating the success of the operation. If the operation was successful,
3108
+ <code>{"agentDeleted": True}</code> is returned. If it failed, <code>{"agentDeleted": False}</code> is returned.</p>
3109
+ </div>
3110
+ </td>
3111
+ </tr>
3112
+ </tbody>
3113
+ </table>
3114
+
3115
+ <details class="quote">
3116
+ <summary>Source code in <code>app\services\WazuhManager\agent.py</code></summary>
3117
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-151">151</a></span>
3118
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3119
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3120
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3121
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3122
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3123
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3124
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3125
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3126
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3127
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3128
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3129
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3130
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3131
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3132
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3133
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3134
+<span class="normal"><a href="#__codelineno-0-168">168</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="k">def</span> <span class="nf">delete_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
3135
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="w"> </span><span class="sd">"""</span>
3136
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> Deletes an agent from the Wazuh Manager.</span>
3137
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
3138
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> Args:</span>
3139
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> agent_id (str): The id of the agent to be deleted.</span>
3140
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3141
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> Returns:</span>
3142
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success of the operation. If the operation was successful,</span>
3143
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="sd"> `{"agentDeleted": True}` is returned. If it failed, `{"agentDeleted": False}` is returned.</span>
3144
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> """</span>
3145
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
3146
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="s2">"purge"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3147
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="s2">"agents_list"</span><span class="p">:</span> <span class="p">[</span><span class="n">agent_id</span><span class="p">],</span>
3148
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="s2">"status"</span><span class="p">:</span> <span class="s2">"all"</span><span class="p">,</span>
3149
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">"older_than"</span><span class="p">:</span> <span class="s2">"0s"</span><span class="p">,</span>
3150
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">}</span>
3151
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">delete_request</span><span class="p">(</span><span class="s2">"agents"</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
3152
+</code></pre></div></td></tr></table></div>
3153
+ </details>
3154
+ </div>
3155
+
3156
+</div>
3157
+
3158
+
3159
+
3160
+ </div>
3161
+
3162
+ </div>
3163
+
3164
+</div>
3165
+
3166
+
3167
+
3168
+
3169
+ </div>
3170
+
3171
+ </div>
3172
+
3173
+</div>
3174
+
3175
+<div class="doc doc-object doc-module">
3176
+
3177
+
3178
+<a id="app.services.WazuhManager.disabled_rule"></a>
3179
+ <div class="doc doc-contents first">
3180
+
3181
+
3182
+
3183
+ <div class="doc doc-children">
3184
+
3185
+
3186
+
3187
+
3188
+
3189
+
3190
+
3191
+
3192
+<div class="doc doc-object doc-class">
3193
+
3194
+
3195
+
3196
+<h2 id="app.services.WazuhManager.disabled_rule.DisableRuleService" class="doc doc-heading">
3197
+ <code>DisableRuleService</code>
3198
+
3199
+
3200
+</h2>
3201
+
3202
+
3203
+ <div class="doc doc-contents ">
3204
+
3205
+
3206
+ <p>This class handles rule disabling related operations in Wazuh Manager.</p>
3207
+
3208
+ <p><strong>Attributes:</strong></p>
3209
+ <table>
3210
+ <thead>
3211
+ <tr>
3212
+ <th>Name</th>
3213
+ <th>Type</th>
3214
+ <th>Description</th>
3215
+ </tr>
3216
+ </thead>
3217
+ <tbody>
3218
+ <tr>
3219
+ <td><code>universal_service</code></td>
3220
+ <td>
3221
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
3222
+ </td>
3223
+ <td>
3224
+ <div class="doc-md-description">
3225
+ <p>An instance of UniversalService.</p>
3226
+ </div>
3227
+ </td>
3228
+ </tr>
3229
+ <tr>
3230
+ <td><code>auth_token</code></td>
3231
+ <td>
3232
+ <code>str</code>
3233
+ </td>
3234
+ <td>
3235
+ <div class="doc-md-description">
3236
+ <p>The Wazuh API authentication token.</p>
3237
+ </div>
3238
+ </td>
3239
+ </tr>
3240
+ <tr>
3241
+ <td><code>wazuh_http_requests</code></td>
3242
+ <td>
3243
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.disabled_rule.WazuhHttpRequests" href="#app.services.WazuhManager.disabled_rule.WazuhHttpRequests">WazuhHttpRequests</a></code>
3244
+ </td>
3245
+ <td>
3246
+ <div class="doc-md-description">
3247
+ <p>An instance of WazuhHttpRequests.</p>
3248
+ </div>
3249
+ </td>
3250
+ </tr>
3251
+ </tbody>
3252
+ </table>
3253
+
3254
+
3255
+ <details class="quote">
3256
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
3257
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-112">112</a></span>
3258
+<span class="normal"><a href="#__codelineno-0-113">113</a></span>
3259
+<span class="normal"><a href="#__codelineno-0-114">114</a></span>
3260
+<span class="normal"><a href="#__codelineno-0-115">115</a></span>
3261
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
3262
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
3263
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
3264
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
3265
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
3266
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
3267
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
3268
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3269
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3270
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3271
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3272
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3273
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3274
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3275
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3276
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3277
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3278
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3279
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
3280
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
3281
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
3282
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3283
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3284
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3285
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3286
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3287
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3288
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3289
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3290
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3291
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3292
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3293
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3294
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3295
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3296
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3297
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3298
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3299
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3300
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3301
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3302
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3303
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3304
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3305
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3306
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3307
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3308
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3309
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3310
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3311
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3312
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3313
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3314
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3315
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3316
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3317
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3318
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3319
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3320
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
3321
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
3322
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
3323
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
3324
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
3325
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
3326
+<span class="normal"><a href="#__codelineno-0-181">181</a></span>
3327
+<span class="normal"><a href="#__codelineno-0-182">182</a></span>
3328
+<span class="normal"><a href="#__codelineno-0-183">183</a></span>
3329
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
3330
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
3331
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
3332
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3333
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3334
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3335
+<span class="normal"><a href="#__codelineno-0-190">190</a></span>
3336
+<span class="normal"><a href="#__codelineno-0-191">191</a></span>
3337
+<span class="normal"><a href="#__codelineno-0-192">192</a></span>
3338
+<span class="normal"><a href="#__codelineno-0-193">193</a></span>
3339
+<span class="normal"><a href="#__codelineno-0-194">194</a></span>
3340
+<span class="normal"><a href="#__codelineno-0-195">195</a></span>
3341
+<span class="normal"><a href="#__codelineno-0-196">196</a></span>
3342
+<span class="normal"><a href="#__codelineno-0-197">197</a></span>
3343
+<span class="normal"><a href="#__codelineno-0-198">198</a></span>
3344
+<span class="normal"><a href="#__codelineno-0-199">199</a></span>
3345
+<span class="normal"><a href="#__codelineno-0-200">200</a></span>
3346
+<span class="normal"><a href="#__codelineno-0-201">201</a></span>
3347
+<span class="normal"><a href="#__codelineno-0-202">202</a></span>
3348
+<span class="normal"><a href="#__codelineno-0-203">203</a></span>
3349
+<span class="normal"><a href="#__codelineno-0-204">204</a></span>
3350
+<span class="normal"><a href="#__codelineno-0-205">205</a></span>
3351
+<span class="normal"><a href="#__codelineno-0-206">206</a></span>
3352
+<span class="normal"><a href="#__codelineno-0-207">207</a></span>
3353
+<span class="normal"><a href="#__codelineno-0-208">208</a></span>
3354
+<span class="normal"><a href="#__codelineno-0-209">209</a></span>
3355
+<span class="normal"><a href="#__codelineno-0-210">210</a></span>
3356
+<span class="normal"><a href="#__codelineno-0-211">211</a></span>
3357
+<span class="normal"><a href="#__codelineno-0-212">212</a></span>
3358
+<span class="normal"><a href="#__codelineno-0-213">213</a></span>
3359
+<span class="normal"><a href="#__codelineno-0-214">214</a></span>
3360
+<span class="normal"><a href="#__codelineno-0-215">215</a></span>
3361
+<span class="normal"><a href="#__codelineno-0-216">216</a></span>
3362
+<span class="normal"><a href="#__codelineno-0-217">217</a></span>
3363
+<span class="normal"><a href="#__codelineno-0-218">218</a></span>
3364
+<span class="normal"><a href="#__codelineno-0-219">219</a></span>
3365
+<span class="normal"><a href="#__codelineno-0-220">220</a></span>
3366
+<span class="normal"><a href="#__codelineno-0-221">221</a></span>
3367
+<span class="normal"><a href="#__codelineno-0-222">222</a></span>
3368
+<span class="normal"><a href="#__codelineno-0-223">223</a></span>
3369
+<span class="normal"><a href="#__codelineno-0-224">224</a></span>
3370
+<span class="normal"><a href="#__codelineno-0-225">225</a></span>
3371
+<span class="normal"><a href="#__codelineno-0-226">226</a></span>
3372
+<span class="normal"><a href="#__codelineno-0-227">227</a></span>
3373
+<span class="normal"><a href="#__codelineno-0-228">228</a></span>
3374
+<span class="normal"><a href="#__codelineno-0-229">229</a></span>
3375
+<span class="normal"><a href="#__codelineno-0-230">230</a></span>
3376
+<span class="normal"><a href="#__codelineno-0-231">231</a></span>
3377
+<span class="normal"><a href="#__codelineno-0-232">232</a></span>
3378
+<span class="normal"><a href="#__codelineno-0-233">233</a></span>
3379
+<span class="normal"><a href="#__codelineno-0-234">234</a></span>
3380
+<span class="normal"><a href="#__codelineno-0-235">235</a></span>
3381
+<span class="normal"><a href="#__codelineno-0-236">236</a></span>
3382
+<span class="normal"><a href="#__codelineno-0-237">237</a></span>
3383
+<span class="normal"><a href="#__codelineno-0-238">238</a></span>
3384
+<span class="normal"><a href="#__codelineno-0-239">239</a></span>
3385
+<span class="normal"><a href="#__codelineno-0-240">240</a></span>
3386
+<span class="normal"><a href="#__codelineno-0-241">241</a></span>
3387
+<span class="normal"><a href="#__codelineno-0-242">242</a></span>
3388
+<span class="normal"><a href="#__codelineno-0-243">243</a></span>
3389
+<span class="normal"><a href="#__codelineno-0-244">244</a></span>
3390
+<span class="normal"><a href="#__codelineno-0-245">245</a></span>
3391
+<span class="normal"><a href="#__codelineno-0-246">246</a></span>
3392
+<span class="normal"><a href="#__codelineno-0-247">247</a></span>
3393
+<span class="normal"><a href="#__codelineno-0-248">248</a></span>
3394
+<span class="normal"><a href="#__codelineno-0-249">249</a></span>
3395
+<span class="normal"><a href="#__codelineno-0-250">250</a></span>
3396
+<span class="normal"><a href="#__codelineno-0-251">251</a></span>
3397
+<span class="normal"><a href="#__codelineno-0-252">252</a></span>
3398
+<span class="normal"><a href="#__codelineno-0-253">253</a></span>
3399
+<span class="normal"><a href="#__codelineno-0-254">254</a></span>
3400
+<span class="normal"><a href="#__codelineno-0-255">255</a></span>
3401
+<span class="normal"><a href="#__codelineno-0-256">256</a></span>
3402
+<span class="normal"><a href="#__codelineno-0-257">257</a></span>
3403
+<span class="normal"><a href="#__codelineno-0-258">258</a></span>
3404
+<span class="normal"><a href="#__codelineno-0-259">259</a></span>
3405
+<span class="normal"><a href="#__codelineno-0-260">260</a></span>
3406
+<span class="normal"><a href="#__codelineno-0-261">261</a></span>
3407
+<span class="normal"><a href="#__codelineno-0-262">262</a></span>
3408
+<span class="normal"><a href="#__codelineno-0-263">263</a></span>
3409
+<span class="normal"><a href="#__codelineno-0-264">264</a></span>
3410
+<span class="normal"><a href="#__codelineno-0-265">265</a></span>
3411
+<span class="normal"><a href="#__codelineno-0-266">266</a></span>
3412
+<span class="normal"><a href="#__codelineno-0-267">267</a></span>
3413
+<span class="normal"><a href="#__codelineno-0-268">268</a></span>
3414
+<span class="normal"><a href="#__codelineno-0-269">269</a></span>
3415
+<span class="normal"><a href="#__codelineno-0-270">270</a></span>
3416
+<span class="normal"><a href="#__codelineno-0-271">271</a></span>
3417
+<span class="normal"><a href="#__codelineno-0-272">272</a></span>
3418
+<span class="normal"><a href="#__codelineno-0-273">273</a></span>
3419
+<span class="normal"><a href="#__codelineno-0-274">274</a></span>
3420
+<span class="normal"><a href="#__codelineno-0-275">275</a></span>
3421
+<span class="normal"><a href="#__codelineno-0-276">276</a></span>
3422
+<span class="normal"><a href="#__codelineno-0-277">277</a></span>
3423
+<span class="normal"><a href="#__codelineno-0-278">278</a></span>
3424
+<span class="normal"><a href="#__codelineno-0-279">279</a></span>
3425
+<span class="normal"><a href="#__codelineno-0-280">280</a></span>
3426
+<span class="normal"><a href="#__codelineno-0-281">281</a></span>
3427
+<span class="normal"><a href="#__codelineno-0-282">282</a></span>
3428
+<span class="normal"><a href="#__codelineno-0-283">283</a></span>
3429
+<span class="normal"><a href="#__codelineno-0-284">284</a></span>
3430
+<span class="normal"><a href="#__codelineno-0-285">285</a></span>
3431
+<span class="normal"><a href="#__codelineno-0-286">286</a></span>
3432
+<span class="normal"><a href="#__codelineno-0-287">287</a></span>
3433
+<span class="normal"><a href="#__codelineno-0-288">288</a></span>
3434
+<span class="normal"><a href="#__codelineno-0-289">289</a></span>
3435
+<span class="normal"><a href="#__codelineno-0-290">290</a></span>
3436
+<span class="normal"><a href="#__codelineno-0-291">291</a></span>
3437
+<span class="normal"><a href="#__codelineno-0-292">292</a></span>
3438
+<span class="normal"><a href="#__codelineno-0-293">293</a></span>
3439
+<span class="normal"><a href="#__codelineno-0-294">294</a></span>
3440
+<span class="normal"><a href="#__codelineno-0-295">295</a></span>
3441
+<span class="normal"><a href="#__codelineno-0-296">296</a></span>
3442
+<span class="normal"><a href="#__codelineno-0-297">297</a></span>
3443
+<span class="normal"><a href="#__codelineno-0-298">298</a></span>
3444
+<span class="normal"><a href="#__codelineno-0-299">299</a></span>
3445
+<span class="normal"><a href="#__codelineno-0-300">300</a></span>
3446
+<span class="normal"><a href="#__codelineno-0-301">301</a></span>
3447
+<span class="normal"><a href="#__codelineno-0-302">302</a></span>
3448
+<span class="normal"><a href="#__codelineno-0-303">303</a></span>
3449
+<span class="normal"><a href="#__codelineno-0-304">304</a></span>
3450
+<span class="normal"><a href="#__codelineno-0-305">305</a></span>
3451
+<span class="normal"><a href="#__codelineno-0-306">306</a></span>
3452
+<span class="normal"><a href="#__codelineno-0-307">307</a></span>
3453
+<span class="normal"><a href="#__codelineno-0-308">308</a></span>
3454
+<span class="normal"><a href="#__codelineno-0-309">309</a></span>
3455
+<span class="normal"><a href="#__codelineno-0-310">310</a></span>
3456
+<span class="normal"><a href="#__codelineno-0-311">311</a></span>
3457
+<span class="normal"><a href="#__codelineno-0-312">312</a></span>
3458
+<span class="normal"><a href="#__codelineno-0-313">313</a></span>
3459
+<span class="normal"><a href="#__codelineno-0-314">314</a></span>
3460
+<span class="normal"><a href="#__codelineno-0-315">315</a></span>
3461
+<span class="normal"><a href="#__codelineno-0-316">316</a></span>
3462
+<span class="normal"><a href="#__codelineno-0-317">317</a></span>
3463
+<span class="normal"><a href="#__codelineno-0-318">318</a></span>
3464
+<span class="normal"><a href="#__codelineno-0-319">319</a></span>
3465
+<span class="normal"><a href="#__codelineno-0-320">320</a></span>
3466
+<span class="normal"><a href="#__codelineno-0-321">321</a></span>
3467
+<span class="normal"><a href="#__codelineno-0-322">322</a></span>
3468
+<span class="normal"><a href="#__codelineno-0-323">323</a></span>
3469
+<span class="normal"><a href="#__codelineno-0-324">324</a></span>
3470
+<span class="normal"><a href="#__codelineno-0-325">325</a></span>
3471
+<span class="normal"><a href="#__codelineno-0-326">326</a></span>
3472
+<span class="normal"><a href="#__codelineno-0-327">327</a></span>
3473
+<span class="normal"><a href="#__codelineno-0-328">328</a></span>
3474
+<span class="normal"><a href="#__codelineno-0-329">329</a></span>
3475
+<span class="normal"><a href="#__codelineno-0-330">330</a></span>
3476
+<span class="normal"><a href="#__codelineno-0-331">331</a></span>
3477
+<span class="normal"><a href="#__codelineno-0-332">332</a></span>
3478
+<span class="normal"><a href="#__codelineno-0-333">333</a></span>
3479
+<span class="normal"><a href="#__codelineno-0-334">334</a></span>
3480
+<span class="normal"><a href="#__codelineno-0-335">335</a></span>
3481
+<span class="normal"><a href="#__codelineno-0-336">336</a></span>
3482
+<span class="normal"><a href="#__codelineno-0-337">337</a></span>
3483
+<span class="normal"><a href="#__codelineno-0-338">338</a></span>
3484
+<span class="normal"><a href="#__codelineno-0-339">339</a></span>
3485
+<span class="normal"><a href="#__codelineno-0-340">340</a></span>
3486
+<span class="normal"><a href="#__codelineno-0-341">341</a></span>
3487
+<span class="normal"><a href="#__codelineno-0-342">342</a></span>
3488
+<span class="normal"><a href="#__codelineno-0-343">343</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="k">class</span> <span class="nc">DisableRuleService</span><span class="p">:</span>
3489
+<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="w"> </span><span class="sd">"""</span>
3490
+<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> This class handles rule disabling related operations in Wazuh Manager.</span>
3491
+<a id="__codelineno-0-115" name="__codelineno-0-115"></a>
3492
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="sd"> Attributes:</span>
3493
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> universal_service (UniversalService): An instance of UniversalService.</span>
3494
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a><span class="sd"> auth_token (str): The Wazuh API authentication token.</span>
3495
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> wazuh_http_requests (WazuhHttpRequests): An instance of WazuhHttpRequests.</span>
3496
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> """</span>
3497
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
3498
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
3499
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="w"> </span><span class="sd">"""</span>
3500
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> Initialize a DisableRuleService instance.</span>
3501
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
3502
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> Args:</span>
3503
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> universal_service (UniversalService): The UniversalService instance to use.</span>
3504
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> """</span>
3505
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
3506
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
3507
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
3508
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3509
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
3510
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="p">)</span>
3511
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
3512
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">def</span> <span class="nf">disable_rule</span><span class="p">(</span>
3513
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="bp">self</span><span class="p">,</span>
3514
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]],</span>
3515
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
3516
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="w"> </span><span class="sd">"""</span>
3517
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Disable a rule in Wazuh Manager.</span>
3518
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
3519
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> Args:</span>
3520
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> request (Dict[str, Union[str, int]]): The request to disable a rule. It should contain 'rule_id', 'reason', and 'length_of_time'.</span>
3521
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3522
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3523
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Dict[str, Union[str, bool]]: A dictionary indicating the success or failure of the operation.</span>
3524
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> """</span>
3525
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
3526
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
3527
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">rule_id</span> <span class="o">=</span> <span class="n">request</span><span class="p">[</span><span class="s2">"rule_id"</span><span class="p">]</span>
3528
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_filename</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
3529
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_file_content</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
3530
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">previous_level</span><span class="p">,</span> <span class="n">updated_file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_level_1</span><span class="p">(</span>
3531
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">file_content</span><span class="p">,</span>
3532
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="n">rule_id</span><span class="p">,</span>
3533
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="p">)</span>
3534
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_xml</span><span class="p">(</span><span class="n">updated_file_content</span><span class="p">)</span>
3535
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_store_disabled_rule_info</span><span class="p">(</span>
3536
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">rule_id</span><span class="p">,</span>
3537
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">previous_level</span><span class="p">,</span>
3538
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">request</span><span class="p">[</span><span class="s2">"reason"</span><span class="p">],</span>
3539
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">request</span><span class="p">[</span><span class="s2">"length_of_time"</span><span class="p">],</span>
3540
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="p">)</span>
3541
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_upload_updated_rule</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">)</span>
3542
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">restart_service</span><span class="p">()</span>
3543
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">return</span> <span class="p">{</span>
3544
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> successfully disabled in file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">."</span><span class="p">,</span>
3545
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3546
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="p">}</span>
3547
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
3548
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3549
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
3550
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3551
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a>
3552
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="k">def</span> <span class="nf">_validate_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]])</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
3553
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="w"> </span><span class="sd">"""</span>
3554
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="sd"> Validate the request to disable a rule.</span>
3555
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a>
3556
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a><span class="sd"> Args:</span>
3557
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="sd"> request (Dict[str, Union[str, int]]): The request to disable a rule.</span>
3558
+<a id="__codelineno-0-182" name="__codelineno-0-182"></a>
3559
+<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> Raises:</span>
3560
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> ValueError: If any of the required fields ('rule_id', 'reason', 'length_of_time') are missing in the request.</span>
3561
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="sd"> """</span>
3562
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Validating disable rule request: </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
3563
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="k">if</span> <span class="s2">"rule_id"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
3564
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Request missing rule_id"</span><span class="p">)</span>
3565
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="k">if</span> <span class="s2">"reason"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
3566
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Request missing reason"</span><span class="p">)</span>
3567
+<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="k">if</span> <span class="s2">"length_of_time"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
3568
+<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Request missing length_of_time"</span><span class="p">)</span>
3569
+<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="n">request</span><span class="p">[</span><span class="s2">"length_of_time"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">request</span><span class="p">[</span><span class="s2">"length_of_time"</span><span class="p">])</span>
3570
+<a id="__codelineno-0-194" name="__codelineno-0-194"></a>
3571
+<a id="__codelineno-0-195" name="__codelineno-0-195"></a> <span class="k">def</span> <span class="nf">_fetch_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
3572
+<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="w"> </span><span class="sd">"""</span>
3573
+<a id="__codelineno-0-197" name="__codelineno-0-197"></a><span class="sd"> Fetch the filename from the Wazuh-Manager that contains the rule to be disabled.</span>
3574
+<a id="__codelineno-0-198" name="__codelineno-0-198"></a>
3575
+<a id="__codelineno-0-199" name="__codelineno-0-199"></a><span class="sd"> Args:</span>
3576
+<a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="sd"> rule_id (str): The id of the rule to be disabled.</span>
3577
+<a id="__codelineno-0-201" name="__codelineno-0-201"></a>
3578
+<a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="sd"> Returns:</span>
3579
+<a id="__codelineno-0-203" name="__codelineno-0-203"></a><span class="sd"> str: The filename that contains the rule.</span>
3580
+<a id="__codelineno-0-204" name="__codelineno-0-204"></a>
3581
+<a id="__codelineno-0-205" name="__codelineno-0-205"></a><span class="sd"> Raises:</span>
3582
+<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> ValueError: If the filename could not be fetched successfully.</span>
3583
+<a id="__codelineno-0-207" name="__codelineno-0-207"></a><span class="sd"> """</span>
3584
+<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="n">filename_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
3585
+<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="s2">"rules"</span><span class="p">,</span>
3586
+<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="p">{</span><span class="s2">"rule_ids"</span><span class="p">:</span> <span class="n">rule_id</span><span class="p">},</span>
3587
+<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">)</span>
3588
+<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3589
+<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">filename_data</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
3590
+<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="k">return</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"affected_items"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"filename"</span><span class="p">]</span>
3591
+<a id="__codelineno-0-215" name="__codelineno-0-215"></a>
3592
+<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">def</span> <span class="nf">_fetch_file_content</span><span class="p">(</span>
3593
+<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="bp">self</span><span class="p">,</span>
3594
+<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3595
+<a id="__codelineno-0-219" name="__codelineno-0-219"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]:</span>
3596
+<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="w"> </span><span class="sd">"""</span>
3597
+<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> Fetch the content of the file that contains the rule to be disabled.</span>
3598
+<a id="__codelineno-0-222" name="__codelineno-0-222"></a>
3599
+<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> Args:</span>
3600
+<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> filename (str): The filename that contains the rule.</span>
3601
+<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
3602
+<a id="__codelineno-0-226" name="__codelineno-0-226"></a><span class="sd"> Returns:</span>
3603
+<a id="__codelineno-0-227" name="__codelineno-0-227"></a><span class="sd"> Union[Dict[str, str], List[Dict[str, str]]]: The content of the file.</span>
3604
+<a id="__codelineno-0-228" name="__codelineno-0-228"></a>
3605
+<a id="__codelineno-0-229" name="__codelineno-0-229"></a><span class="sd"> Raises:</span>
3606
+<a id="__codelineno-0-230" name="__codelineno-0-230"></a><span class="sd"> ValueError: If the file content could not be fetched successfully.</span>
3607
+<a id="__codelineno-0-231" name="__codelineno-0-231"></a><span class="sd"> """</span>
3608
+<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="n">file_content_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
3609
+<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="sa">f</span><span class="s2">"rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
3610
+<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="p">)</span>
3611
+<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3612
+<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">file_content_data</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
3613
+<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="k">return</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"affected_items"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"group"</span><span class="p">]</span>
3614
+<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
3615
+<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="k">def</span> <span class="nf">_set_level_1</span><span class="p">(</span>
3616
+<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="bp">self</span><span class="p">,</span>
3617
+<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="n">file_content</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]],</span>
3618
+<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3619
+<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]]]:</span>
3620
+<a id="__codelineno-0-244" name="__codelineno-0-244"></a><span class="w"> </span><span class="sd">"""</span>
3621
+<a id="__codelineno-0-245" name="__codelineno-0-245"></a><span class="sd"> Set the level of the rule to 1.</span>
3622
+<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
3623
+<a id="__codelineno-0-247" name="__codelineno-0-247"></a><span class="sd"> Args:</span>
3624
+<a id="__codelineno-0-248" name="__codelineno-0-248"></a><span class="sd"> file_content (Union[Dict[str, str], List[Dict[str, str]]]): The content of the file that contains the rule.</span>
3625
+<a id="__codelineno-0-249" name="__codelineno-0-249"></a><span class="sd"> rule_id (str): The id of the rule to be disabled.</span>
3626
+<a id="__codelineno-0-250" name="__codelineno-0-250"></a>
3627
+<a id="__codelineno-0-251" name="__codelineno-0-251"></a><span class="sd"> Returns:</span>
3628
+<a id="__codelineno-0-252" name="__codelineno-0-252"></a><span class="sd"> Tuple[str, Union[Dict[str, str], List[Dict[str, str]]]]: A tuple containing the previous level of the rule and the updated file content.</span>
3629
+<a id="__codelineno-0-253" name="__codelineno-0-253"></a><span class="sd"> """</span>
3630
+<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3631
+<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="sa">f</span><span class="s2">"Setting rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> level to 1 for file_content: </span><span class="si">{</span><span class="n">file_content</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
3632
+<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="p">)</span>
3633
+<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="n">previous_level</span> <span class="o">=</span> <span class="kc">None</span>
3634
+<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_content</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
3635
+<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="p">[</span><span class="n">file_content</span><span class="p">]</span>
3636
+<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="k">for</span> <span class="n">group_block</span> <span class="ow">in</span> <span class="n">file_content</span><span class="p">:</span>
3637
+<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="n">group_block</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"rule"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
3638
+<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">rule_block</span><span class="p">:</span>
3639
+<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="k">continue</span>
3640
+<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rule_block</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
3641
+<a id="__codelineno-0-265" name="__codelineno-0-265"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="p">[</span><span class="n">rule_block</span><span class="p">]</span>
3642
+<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rule_block</span><span class="p">:</span>
3643
+<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="k">if</span> <span class="n">rule</span><span class="p">[</span><span class="s2">"@id"</span><span class="p">]</span> <span class="o">==</span> <span class="n">rule_id</span><span class="p">:</span>
3644
+<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="n">previous_level</span> <span class="o">=</span> <span class="n">rule</span><span class="p">[</span><span class="s2">"@level"</span><span class="p">]</span>
3645
+<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="n">rule</span><span class="p">[</span><span class="s2">"@level"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"1"</span>
3646
+<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="k">break</span>
3647
+<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="k">return</span> <span class="n">previous_level</span><span class="p">,</span> <span class="n">file_content</span>
3648
+<a id="__codelineno-0-272" name="__codelineno-0-272"></a>
3649
+<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="k">def</span> <span class="nf">_convert_to_xml</span><span class="p">(</span>
3650
+<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="bp">self</span><span class="p">,</span>
3651
+<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="n">updated_file_content</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]],</span>
3652
+<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
3653
+<a id="__codelineno-0-277" name="__codelineno-0-277"></a><span class="w"> </span><span class="sd">"""</span>
3654
+<a id="__codelineno-0-278" name="__codelineno-0-278"></a><span class="sd"> Convert the updated file content to XML format.</span>
3655
+<a id="__codelineno-0-279" name="__codelineno-0-279"></a>
3656
+<a id="__codelineno-0-280" name="__codelineno-0-280"></a><span class="sd"> Args:</span>
3657
+<a id="__codelineno-0-281" name="__codelineno-0-281"></a><span class="sd"> updated_file_content (Union[Dict[str, str], List[Dict[str, str]]]): The updated file content.</span>
3658
+<a id="__codelineno-0-282" name="__codelineno-0-282"></a>
3659
+<a id="__codelineno-0-283" name="__codelineno-0-283"></a><span class="sd"> Returns:</span>
3660
+<a id="__codelineno-0-284" name="__codelineno-0-284"></a><span class="sd"> str: The updated file content in XML format.</span>
3661
+<a id="__codelineno-0-285" name="__codelineno-0-285"></a><span class="sd"> """</span>
3662
+<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Received updated_file_content: </span><span class="si">{</span><span class="n">updated_file_content</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
3663
+<a id="__codelineno-0-287" name="__codelineno-0-287"></a> <span class="n">xml_content_list</span> <span class="o">=</span> <span class="p">[]</span>
3664
+<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">updated_file_content</span><span class="p">:</span>
3665
+<a id="__codelineno-0-289" name="__codelineno-0-289"></a> <span class="n">xml_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">}</span>
3666
+<a id="__codelineno-0-290" name="__codelineno-0-290"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xmltodict</span><span class="o">.</span><span class="n">unparse</span><span class="p">(</span><span class="n">xml_dict</span><span class="p">,</span> <span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
3667
+<a id="__codelineno-0-291" name="__codelineno-0-291"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
3668
+<a id="__codelineno-0-292" name="__codelineno-0-292"></a> <span class="s1">'<?xml version="1.0" encoding="utf-8"?>'</span><span class="p">,</span>
3669
+<a id="__codelineno-0-293" name="__codelineno-0-293"></a> <span class="s2">""</span><span class="p">,</span>
3670
+<a id="__codelineno-0-294" name="__codelineno-0-294"></a> <span class="p">)</span>
3671
+<a id="__codelineno-0-295" name="__codelineno-0-295"></a> <span class="n">xml_content_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xml_content</span><span class="p">)</span>
3672
+<a id="__codelineno-0-296" name="__codelineno-0-296"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">xml_content_list</span><span class="p">)</span>
3673
+<a id="__codelineno-0-297" name="__codelineno-0-297"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
3674
+<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="k">return</span> <span class="n">xml_content</span>
3675
+<a id="__codelineno-0-299" name="__codelineno-0-299"></a>
3676
+<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="k">def</span> <span class="nf">_store_disabled_rule_info</span><span class="p">(</span>
3677
+<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="bp">self</span><span class="p">,</span>
3678
+<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3679
+<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3680
+<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="n">reason</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3681
+<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="n">length_of_time</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3682
+<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
3683
+<a id="__codelineno-0-307" name="__codelineno-0-307"></a><span class="w"> </span><span class="sd">"""</span>
3684
+<a id="__codelineno-0-308" name="__codelineno-0-308"></a><span class="sd"> Store information about the disabled rule in the database.</span>
3685
+<a id="__codelineno-0-309" name="__codelineno-0-309"></a>
3686
+<a id="__codelineno-0-310" name="__codelineno-0-310"></a><span class="sd"> Args:</span>
3687
+<a id="__codelineno-0-311" name="__codelineno-0-311"></a><span class="sd"> rule_id (str): The id of the rule.</span>
3688
+<a id="__codelineno-0-312" name="__codelineno-0-312"></a><span class="sd"> previous_level (str): The previous level of the rule before it was disabled.</span>
3689
+<a id="__codelineno-0-313" name="__codelineno-0-313"></a><span class="sd"> reason (str): The reason for disabling the rule.</span>
3690
+<a id="__codelineno-0-314" name="__codelineno-0-314"></a><span class="sd"> length_of_time (str): The length of time for which the rule will be disabled.</span>
3691
+<a id="__codelineno-0-315" name="__codelineno-0-315"></a><span class="sd"> """</span>
3692
+<a id="__codelineno-0-316" name="__codelineno-0-316"></a> <span class="n">disabled_rule</span> <span class="o">=</span> <span class="n">DisabledRules</span><span class="p">(</span>
3693
+<a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">,</span>
3694
+<a id="__codelineno-0-318" name="__codelineno-0-318"></a> <span class="n">previous_level</span><span class="o">=</span><span class="n">previous_level</span><span class="p">,</span>
3695
+<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="n">new_level</span><span class="o">=</span><span class="s2">"1"</span><span class="p">,</span>
3696
+<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="n">reason_for_disabling</span><span class="o">=</span><span class="n">reason</span><span class="p">,</span>
3697
+<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="n">length_of_time</span><span class="o">=</span><span class="n">length_of_time</span><span class="p">,</span>
3698
+<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="p">)</span>
3699
+<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">disabled_rule</span><span class="p">)</span>
3700
+<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
3701
+<a id="__codelineno-0-325" name="__codelineno-0-325"></a>
3702
+<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="k">def</span> <span class="nf">_upload_updated_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3703
+<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="w"> </span><span class="sd">"""</span>
3704
+<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="sd"> Upload the updated rule to the Wazuh Manager.</span>
3705
+<a id="__codelineno-0-329" name="__codelineno-0-329"></a>
3706
+<a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="sd"> Args:</span>
3707
+<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="sd"> filename (str): The filename that contains the rule.</span>
3708
+<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="sd"> xml_content (str): The updated rule in XML format.</span>
3709
+<a id="__codelineno-0-333" name="__codelineno-0-333"></a>
3710
+<a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="sd"> Raises:</span>
3711
+<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="sd"> ValueError: If the updated rule could not be uploaded successfully.</span>
3712
+<a id="__codelineno-0-336" name="__codelineno-0-336"></a><span class="sd"> """</span>
3713
+<a id="__codelineno-0-337" name="__codelineno-0-337"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">put_request</span><span class="p">(</span>
3714
+<a id="__codelineno-0-338" name="__codelineno-0-338"></a> <span class="sa">f</span><span class="s2">"rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
3715
+<a id="__codelineno-0-339" name="__codelineno-0-339"></a> <span class="n">xml_content</span><span class="p">,</span>
3716
+<a id="__codelineno-0-340" name="__codelineno-0-340"></a> <span class="p">{</span><span class="s2">"overwrite"</span><span class="p">:</span> <span class="s2">"true"</span><span class="p">},</span>
3717
+<a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="p">)</span>
3718
+<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">response</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
3719
+<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">response</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
3720
+</code></pre></div></td></tr></table></div>
3721
+ </details>
3722
+
3723
+
3724
+
3725
+ <div class="doc doc-children">
3726
+
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
3733
+
3734
+
3735
+<div class="doc doc-object doc-function">
3736
+
3737
+
3738
+
3739
+<h3 id="app.services.WazuhManager.disabled_rule.DisableRuleService.__init__" class="doc doc-heading">
3740
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span></code>
3741
+
3742
+</h3>
3743
+
3744
+
3745
+ <div class="doc doc-contents ">
3746
+
3747
+ <p>Initialize a DisableRuleService instance.</p>
3748
+
3749
+ <p><strong>Parameters:</strong></p>
3750
+ <table>
3751
+ <thead>
3752
+ <tr>
3753
+ <th>Name</th>
3754
+ <th>Type</th>
3755
+ <th>Description</th>
3756
+ <th>Default</th>
3757
+ </tr>
3758
+ </thead>
3759
+ <tbody>
3760
+ <tr>
3761
+ <td><code>universal_service</code></td>
3762
+ <td>
3763
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
3764
+ </td>
3765
+ <td>
3766
+ <div class="doc-md-description">
3767
+ <p>The UniversalService instance to use.</p>
3768
+ </div>
3769
+ </td>
3770
+ <td>
3771
+ <em>required</em>
3772
+ </td>
3773
+ </tr>
3774
+ </tbody>
3775
+ </table>
3776
+
3777
+ <details class="quote">
3778
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
3779
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-122">122</a></span>
3780
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
3781
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
3782
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
3783
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
3784
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
3785
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
3786
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
3787
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
3788
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
3789
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
3790
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
3791
+<span class="normal"><a href="#__codelineno-0-134">134</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
3792
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="w"> </span><span class="sd">"""</span>
3793
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a><span class="sd"> Initialize a DisableRuleService instance.</span>
3794
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
3795
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="sd"> Args:</span>
3796
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> universal_service (UniversalService): The UniversalService instance to use.</span>
3797
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> """</span>
3798
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
3799
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
3800
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
3801
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3802
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
3803
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="p">)</span>
3804
+</code></pre></div></td></tr></table></div>
3805
+ </details>
3806
+ </div>
3807
+
3808
+</div>
3809
+
3810
+<div class="doc doc-object doc-function">
3811
+
3812
+
3813
+
3814
+<h3 id="app.services.WazuhManager.disabled_rule.DisableRuleService.disable_rule" class="doc doc-heading">
3815
+<code class="highlight language-python"><span class="n">disable_rule</span><span class="p">(</span><span class="n">request</span><span class="p">)</span></code>
3816
+
3817
+</h3>
3818
+
3819
+
3820
+ <div class="doc doc-contents ">
3821
+
3822
+ <p>Disable a rule in Wazuh Manager.</p>
3823
+
3824
+ <p><strong>Parameters:</strong></p>
3825
+ <table>
3826
+ <thead>
3827
+ <tr>
3828
+ <th>Name</th>
3829
+ <th>Type</th>
3830
+ <th>Description</th>
3831
+ <th>Default</th>
3832
+ </tr>
3833
+ </thead>
3834
+ <tbody>
3835
+ <tr>
3836
+ <td><code>request</code></td>
3837
+ <td>
3838
+ <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[str, int]]</code>
3839
+ </td>
3840
+ <td>
3841
+ <div class="doc-md-description">
3842
+ <p>The request to disable a rule. It should contain 'rule_id', 'reason', and 'length_of_time'.</p>
3843
+ </div>
3844
+ </td>
3845
+ <td>
3846
+ <em>required</em>
3847
+ </td>
3848
+ </tr>
3849
+ </tbody>
3850
+ </table>
3851
+
3852
+ <p><strong>Returns:</strong></p>
3853
+ <table>
3854
+ <thead>
3855
+ <tr>
3856
+ <th>Type</th>
3857
+ <th>Description</th>
3858
+ </tr>
3859
+ </thead>
3860
+ <tbody>
3861
+ <tr>
3862
+ <td>
3863
+ <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[str, bool]]</code>
3864
+ </td>
3865
+ <td>
3866
+ <div class="doc-md-description">
3867
+ <p>Dict[str, Union[str, bool]]: A dictionary indicating the success or failure of the operation.</p>
3868
+ </div>
3869
+ </td>
3870
+ </tr>
3871
+ </tbody>
3872
+ </table>
3873
+
3874
+ <details class="quote">
3875
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
3876
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-136">136</a></span>
3877
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
3878
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
3879
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
3880
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
3881
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
3882
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
3883
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
3884
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
3885
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
3886
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
3887
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
3888
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
3889
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
3890
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
3891
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
3892
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
3893
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
3894
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
3895
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
3896
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
3897
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
3898
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
3899
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
3900
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
3901
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
3902
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
3903
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
3904
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
3905
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
3906
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
3907
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
3908
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
3909
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
3910
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
3911
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3912
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3913
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3914
+<span class="normal"><a href="#__codelineno-0-174">174</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-136" name="__codelineno-0-136"></a><span class="k">def</span> <span class="nf">disable_rule</span><span class="p">(</span>
3915
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="bp">self</span><span class="p">,</span>
3916
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]],</span>
3917
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
3918
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="w"> </span><span class="sd">"""</span>
3919
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Disable a rule in Wazuh Manager.</span>
3920
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
3921
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> Args:</span>
3922
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> request (Dict[str, Union[str, int]]): The request to disable a rule. It should contain 'rule_id', 'reason', and 'length_of_time'.</span>
3923
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3924
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
3925
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Dict[str, Union[str, bool]]: A dictionary indicating the success or failure of the operation.</span>
3926
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> """</span>
3927
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
3928
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
3929
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">rule_id</span> <span class="o">=</span> <span class="n">request</span><span class="p">[</span><span class="s2">"rule_id"</span><span class="p">]</span>
3930
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_filename</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
3931
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_file_content</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
3932
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">previous_level</span><span class="p">,</span> <span class="n">updated_file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_level_1</span><span class="p">(</span>
3933
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">file_content</span><span class="p">,</span>
3934
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="n">rule_id</span><span class="p">,</span>
3935
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="p">)</span>
3936
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_to_xml</span><span class="p">(</span><span class="n">updated_file_content</span><span class="p">)</span>
3937
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_store_disabled_rule_info</span><span class="p">(</span>
3938
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="n">rule_id</span><span class="p">,</span>
3939
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">previous_level</span><span class="p">,</span>
3940
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="n">request</span><span class="p">[</span><span class="s2">"reason"</span><span class="p">],</span>
3941
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">request</span><span class="p">[</span><span class="s2">"length_of_time"</span><span class="p">],</span>
3942
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="p">)</span>
3943
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_upload_updated_rule</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">)</span>
3944
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">restart_service</span><span class="p">()</span>
3945
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">return</span> <span class="p">{</span>
3946
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> successfully disabled in file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">."</span><span class="p">,</span>
3947
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3948
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="p">}</span>
3949
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
3950
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
3951
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
3952
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3953
+</code></pre></div></td></tr></table></div>
3954
+ </details>
3955
+ </div>
3956
+
3957
+</div>
3958
+
3959
+
3960
+
3961
+ </div>
3962
+
3963
+ </div>
3964
+
3965
+</div>
3966
+
3967
+<div class="doc doc-object doc-class">
3968
+
3969
+
3970
+
3971
+<h2 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests" class="doc doc-heading">
3972
+ <code>WazuhHttpRequests</code>
3973
+
3974
+
3975
+</h2>
3976
+
3977
+
3978
+ <div class="doc doc-contents ">
3979
+
3980
+
3981
+ <p>This class helps to send HTTP requests to the Wazuh API.</p>
3982
+
3983
+ <p><strong>Attributes:</strong></p>
3984
+ <table>
3985
+ <thead>
3986
+ <tr>
3987
+ <th>Name</th>
3988
+ <th>Type</th>
3989
+ <th>Description</th>
3990
+ </tr>
3991
+ </thead>
3992
+ <tbody>
3993
+ <tr>
3994
+ <td><code>connector_url</code></td>
3995
+ <td>
3996
+ <code>str</code>
3997
+ </td>
3998
+ <td>
3999
+ <div class="doc-md-description">
4000
+ <p>The URL of the Wazuh Manager.</p>
4001
+ </div>
4002
+ </td>
4003
+ </tr>
4004
+ <tr>
4005
+ <td><code>wazuh_auth_token</code></td>
4006
+ <td>
4007
+ <code>str</code>
4008
+ </td>
4009
+ <td>
4010
+ <div class="doc-md-description">
4011
+ <p>The Wazuh API authentication token.</p>
4012
+ </div>
4013
+ </td>
4014
+ </tr>
4015
+ <tr>
4016
+ <td><code>headers</code></td>
4017
+ <td>
4018
+ <code><span title="typing.Dict">Dict</span>[str, str]</code>
4019
+ </td>
4020
+ <td>
4021
+ <div class="doc-md-description">
4022
+ <p>The headers for HTTP requests.</p>
4023
+ </div>
4024
+ </td>
4025
+ </tr>
4026
+ </tbody>
4027
+ </table>
4028
+
4029
+
4030
+ <details class="quote">
4031
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4032
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
4033
+<span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
4034
+<span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
4035
+<span class="normal"><a href="#__codelineno-0-25"> 25</a></span>
4036
+<span class="normal"><a href="#__codelineno-0-26"> 26</a></span>
4037
+<span class="normal"><a href="#__codelineno-0-27"> 27</a></span>
4038
+<span class="normal"><a href="#__codelineno-0-28"> 28</a></span>
4039
+<span class="normal"><a href="#__codelineno-0-29"> 29</a></span>
4040
+<span class="normal"><a href="#__codelineno-0-30"> 30</a></span>
4041
+<span class="normal"><a href="#__codelineno-0-31"> 31</a></span>
4042
+<span class="normal"><a href="#__codelineno-0-32"> 32</a></span>
4043
+<span class="normal"><a href="#__codelineno-0-33"> 33</a></span>
4044
+<span class="normal"><a href="#__codelineno-0-34"> 34</a></span>
4045
+<span class="normal"><a href="#__codelineno-0-35"> 35</a></span>
4046
+<span class="normal"><a href="#__codelineno-0-36"> 36</a></span>
4047
+<span class="normal"><a href="#__codelineno-0-37"> 37</a></span>
4048
+<span class="normal"><a href="#__codelineno-0-38"> 38</a></span>
4049
+<span class="normal"><a href="#__codelineno-0-39"> 39</a></span>
4050
+<span class="normal"><a href="#__codelineno-0-40"> 40</a></span>
4051
+<span class="normal"><a href="#__codelineno-0-41"> 41</a></span>
4052
+<span class="normal"><a href="#__codelineno-0-42"> 42</a></span>
4053
+<span class="normal"><a href="#__codelineno-0-43"> 43</a></span>
4054
+<span class="normal"><a href="#__codelineno-0-44"> 44</a></span>
4055
+<span class="normal"><a href="#__codelineno-0-45"> 45</a></span>
4056
+<span class="normal"><a href="#__codelineno-0-46"> 46</a></span>
4057
+<span class="normal"><a href="#__codelineno-0-47"> 47</a></span>
4058
+<span class="normal"><a href="#__codelineno-0-48"> 48</a></span>
4059
+<span class="normal"><a href="#__codelineno-0-49"> 49</a></span>
4060
+<span class="normal"><a href="#__codelineno-0-50"> 50</a></span>
4061
+<span class="normal"><a href="#__codelineno-0-51"> 51</a></span>
4062
+<span class="normal"><a href="#__codelineno-0-52"> 52</a></span>
4063
+<span class="normal"><a href="#__codelineno-0-53"> 53</a></span>
4064
+<span class="normal"><a href="#__codelineno-0-54"> 54</a></span>
4065
+<span class="normal"><a href="#__codelineno-0-55"> 55</a></span>
4066
+<span class="normal"><a href="#__codelineno-0-56"> 56</a></span>
4067
+<span class="normal"><a href="#__codelineno-0-57"> 57</a></span>
4068
+<span class="normal"><a href="#__codelineno-0-58"> 58</a></span>
4069
+<span class="normal"><a href="#__codelineno-0-59"> 59</a></span>
4070
+<span class="normal"><a href="#__codelineno-0-60"> 60</a></span>
4071
+<span class="normal"><a href="#__codelineno-0-61"> 61</a></span>
4072
+<span class="normal"><a href="#__codelineno-0-62"> 62</a></span>
4073
+<span class="normal"><a href="#__codelineno-0-63"> 63</a></span>
4074
+<span class="normal"><a href="#__codelineno-0-64"> 64</a></span>
4075
+<span class="normal"><a href="#__codelineno-0-65"> 65</a></span>
4076
+<span class="normal"><a href="#__codelineno-0-66"> 66</a></span>
4077
+<span class="normal"><a href="#__codelineno-0-67"> 67</a></span>
4078
+<span class="normal"><a href="#__codelineno-0-68"> 68</a></span>
4079
+<span class="normal"><a href="#__codelineno-0-69"> 69</a></span>
4080
+<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
4081
+<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
4082
+<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
4083
+<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
4084
+<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
4085
+<span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
4086
+<span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
4087
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
4088
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
4089
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
4090
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
4091
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
4092
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
4093
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
4094
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
4095
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
4096
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
4097
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4098
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4099
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4100
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4101
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4102
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4103
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4104
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4105
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4106
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4107
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4108
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4109
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4110
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4111
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4112
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4113
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4114
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4115
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4116
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4117
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4118
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
4119
+<span class="normal"><a href="#__codelineno-0-109">109</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="k">class</span> <span class="nc">WazuhHttpRequests</span><span class="p">:</span>
4120
+<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">"""</span>
4121
+<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> This class helps to send HTTP requests to the Wazuh API.</span>
4122
+<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
4123
+<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Attributes:</span>
4124
+<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> connector_url (str): The URL of the Wazuh Manager.</span>
4125
+<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
4126
+<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> headers (Dict[str, str]): The headers for HTTP requests.</span>
4127
+<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> """</span>
4128
+<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
4129
+<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
4130
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">"""</span>
4131
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize a WazuhHttpRequests instance.</span>
4132
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
4133
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Args:</span>
4134
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> connector_url (str): The URL of the Wazuh Manager.</span>
4135
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
4136
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> """</span>
4137
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
4138
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
4139
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">"</span><span class="p">}</span>
4140
+<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
4141
+<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">def</span> <span class="nf">get_request</span><span class="p">(</span>
4142
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="p">,</span>
4143
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4144
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4145
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
4146
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="w"> </span><span class="sd">"""</span>
4147
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Send a GET request to the specified endpoint.</span>
4148
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
4149
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
4150
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> endpoint (str): The endpoint to send the GET request to.</span>
4151
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4152
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
4153
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
4154
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Dict[str, Union[str, bool]]: The response from the endpoint. It contains the data from the response or an error message.</span>
4155
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> """</span>
4156
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">try</span><span class="p">:</span>
4157
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
4158
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
4159
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
4160
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4161
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4162
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
4163
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4164
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"data"</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4165
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
4166
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4167
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4168
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span>
4169
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
4170
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4171
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">}</span>
4172
+<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
4173
+<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">def</span> <span class="nf">put_request</span><span class="p">(</span>
4174
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="p">,</span>
4175
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4176
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">data</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4177
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4178
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
4179
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">"""</span>
4180
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Send a PUT request to the specified endpoint.</span>
4181
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
4182
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
4183
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> endpoint (str): The endpoint to send the PUT request to.</span>
4184
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> data (str): The data to be updated in the PUT request.</span>
4185
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4186
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
4187
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
4188
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success or failure of the operation.</span>
4189
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> """</span>
4190
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">try</span><span class="p">:</span>
4191
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">headers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
4192
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">"Content-Type"</span><span class="p">:</span> <span class="s2">"application/octet-stream"</span><span class="p">})</span>
4193
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
4194
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">put</span><span class="p">(</span>
4195
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
4196
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
4197
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4198
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span>
4199
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4200
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="p">)</span>
4201
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4202
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully updated </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4203
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
4204
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4205
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4206
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4207
+</code></pre></div></td></tr></table></div>
4208
+ </details>
4209
+
4210
+
4211
+
4212
+ <div class="doc doc-children">
4213
+
4214
+
4215
+
4216
+
4217
+
4218
+
4219
+
4220
+
4221
+
4222
+<div class="doc doc-object doc-function">
4223
+
4224
+
4225
+
4226
+<h3 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests.__init__" class="doc doc-heading">
4227
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">connector_url</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">)</span></code>
4228
+
4229
+</h3>
4230
+
4231
+
4232
+ <div class="doc doc-contents ">
4233
+
4234
+ <p>Initialize a WazuhHttpRequests instance.</p>
4235
+
4236
+ <p><strong>Parameters:</strong></p>
4237
+ <table>
4238
+ <thead>
4239
+ <tr>
4240
+ <th>Name</th>
4241
+ <th>Type</th>
4242
+ <th>Description</th>
4243
+ <th>Default</th>
4244
+ </tr>
4245
+ </thead>
4246
+ <tbody>
4247
+ <tr>
4248
+ <td><code>connector_url</code></td>
4249
+ <td>
4250
+ <code>str</code>
4251
+ </td>
4252
+ <td>
4253
+ <div class="doc-md-description">
4254
+ <p>The URL of the Wazuh Manager.</p>
4255
+ </div>
4256
+ </td>
4257
+ <td>
4258
+ <em>required</em>
4259
+ </td>
4260
+ </tr>
4261
+ <tr>
4262
+ <td><code>wazuh_auth_token</code></td>
4263
+ <td>
4264
+ <code>str</code>
4265
+ </td>
4266
+ <td>
4267
+ <div class="doc-md-description">
4268
+ <p>The Wazuh API authentication token.</p>
4269
+ </div>
4270
+ </td>
4271
+ <td>
4272
+ <em>required</em>
4273
+ </td>
4274
+ </tr>
4275
+ </tbody>
4276
+ </table>
4277
+
4278
+ <details class="quote">
4279
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4280
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-32">32</a></span>
4281
+<span class="normal"><a href="#__codelineno-0-33">33</a></span>
4282
+<span class="normal"><a href="#__codelineno-0-34">34</a></span>
4283
+<span class="normal"><a href="#__codelineno-0-35">35</a></span>
4284
+<span class="normal"><a href="#__codelineno-0-36">36</a></span>
4285
+<span class="normal"><a href="#__codelineno-0-37">37</a></span>
4286
+<span class="normal"><a href="#__codelineno-0-38">38</a></span>
4287
+<span class="normal"><a href="#__codelineno-0-39">39</a></span>
4288
+<span class="normal"><a href="#__codelineno-0-40">40</a></span>
4289
+<span class="normal"><a href="#__codelineno-0-41">41</a></span>
4290
+<span class="normal"><a href="#__codelineno-0-42">42</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
4291
+<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">"""</span>
4292
+<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Initialize a WazuhHttpRequests instance.</span>
4293
+<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
4294
+<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Args:</span>
4295
+<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> connector_url (str): The URL of the Wazuh Manager.</span>
4296
+<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> wazuh_auth_token (str): The Wazuh API authentication token.</span>
4297
+<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> """</span>
4298
+<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span> <span class="o">=</span> <span class="n">connector_url</span>
4299
+<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_auth_token</span>
4300
+<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">"</span><span class="p">}</span>
4301
+</code></pre></div></td></tr></table></div>
4302
+ </details>
4303
+ </div>
4304
+
4305
+</div>
4306
+
4307
+<div class="doc doc-object doc-function">
4308
+
4309
+
4310
+
4311
+<h3 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests.get_request" class="doc doc-heading">
4312
+<code class="highlight language-python"><span class="n">get_request</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
4313
+
4314
+</h3>
4315
+
4316
+
4317
+ <div class="doc doc-contents ">
4318
+
4319
+ <p>Send a GET request to the specified endpoint.</p>
4320
+
4321
+ <p><strong>Parameters:</strong></p>
4322
+ <table>
4323
+ <thead>
4324
+ <tr>
4325
+ <th>Name</th>
4326
+ <th>Type</th>
4327
+ <th>Description</th>
4328
+ <th>Default</th>
4329
+ </tr>
4330
+ </thead>
4331
+ <tbody>
4332
+ <tr>
4333
+ <td><code>endpoint</code></td>
4334
+ <td>
4335
+ <code>str</code>
4336
+ </td>
4337
+ <td>
4338
+ <div class="doc-md-description">
4339
+ <p>The endpoint to send the GET request to.</p>
4340
+ </div>
4341
+ </td>
4342
+ <td>
4343
+ <em>required</em>
4344
+ </td>
4345
+ </tr>
4346
+ <tr>
4347
+ <td><code>params</code></td>
4348
+ <td>
4349
+ <code><span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>[str, str]]</code>
4350
+ </td>
4351
+ <td>
4352
+ <div class="doc-md-description">
4353
+ <p>Additional parameters to include in the request.</p>
4354
+ </div>
4355
+ </td>
4356
+ <td>
4357
+ <code>None</code>
4358
+ </td>
4359
+ </tr>
4360
+ </tbody>
4361
+ </table>
4362
+
4363
+ <p><strong>Returns:</strong></p>
4364
+ <table>
4365
+ <thead>
4366
+ <tr>
4367
+ <th>Type</th>
4368
+ <th>Description</th>
4369
+ </tr>
4370
+ </thead>
4371
+ <tbody>
4372
+ <tr>
4373
+ <td>
4374
+ <code><span title="typing.Dict">Dict</span>[str, <span title="typing.Union">Union</span>[str, bool]]</code>
4375
+ </td>
4376
+ <td>
4377
+ <div class="doc-md-description">
4378
+ <p>Dict[str, Union[str, bool]]: The response from the endpoint. It contains the data from the response or an error message.</p>
4379
+ </div>
4380
+ </td>
4381
+ </tr>
4382
+ </tbody>
4383
+ </table>
4384
+
4385
+ <details class="quote">
4386
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4387
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-44">44</a></span>
4388
+<span class="normal"><a href="#__codelineno-0-45">45</a></span>
4389
+<span class="normal"><a href="#__codelineno-0-46">46</a></span>
4390
+<span class="normal"><a href="#__codelineno-0-47">47</a></span>
4391
+<span class="normal"><a href="#__codelineno-0-48">48</a></span>
4392
+<span class="normal"><a href="#__codelineno-0-49">49</a></span>
4393
+<span class="normal"><a href="#__codelineno-0-50">50</a></span>
4394
+<span class="normal"><a href="#__codelineno-0-51">51</a></span>
4395
+<span class="normal"><a href="#__codelineno-0-52">52</a></span>
4396
+<span class="normal"><a href="#__codelineno-0-53">53</a></span>
4397
+<span class="normal"><a href="#__codelineno-0-54">54</a></span>
4398
+<span class="normal"><a href="#__codelineno-0-55">55</a></span>
4399
+<span class="normal"><a href="#__codelineno-0-56">56</a></span>
4400
+<span class="normal"><a href="#__codelineno-0-57">57</a></span>
4401
+<span class="normal"><a href="#__codelineno-0-58">58</a></span>
4402
+<span class="normal"><a href="#__codelineno-0-59">59</a></span>
4403
+<span class="normal"><a href="#__codelineno-0-60">60</a></span>
4404
+<span class="normal"><a href="#__codelineno-0-61">61</a></span>
4405
+<span class="normal"><a href="#__codelineno-0-62">62</a></span>
4406
+<span class="normal"><a href="#__codelineno-0-63">63</a></span>
4407
+<span class="normal"><a href="#__codelineno-0-64">64</a></span>
4408
+<span class="normal"><a href="#__codelineno-0-65">65</a></span>
4409
+<span class="normal"><a href="#__codelineno-0-66">66</a></span>
4410
+<span class="normal"><a href="#__codelineno-0-67">67</a></span>
4411
+<span class="normal"><a href="#__codelineno-0-68">68</a></span>
4412
+<span class="normal"><a href="#__codelineno-0-69">69</a></span>
4413
+<span class="normal"><a href="#__codelineno-0-70">70</a></span>
4414
+<span class="normal"><a href="#__codelineno-0-71">71</a></span>
4415
+<span class="normal"><a href="#__codelineno-0-72">72</a></span>
4416
+<span class="normal"><a href="#__codelineno-0-73">73</a></span>
4417
+<span class="normal"><a href="#__codelineno-0-74">74</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="k">def</span> <span class="nf">get_request</span><span class="p">(</span>
4418
+<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="bp">self</span><span class="p">,</span>
4419
+<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4420
+<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4421
+<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
4422
+<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="w"> </span><span class="sd">"""</span>
4423
+<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Send a GET request to the specified endpoint.</span>
4424
+<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
4425
+<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
4426
+<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> endpoint (str): The endpoint to send the GET request to.</span>
4427
+<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4428
+<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
4429
+<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
4430
+<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Dict[str, Union[str, bool]]: The response from the endpoint. It contains the data from the response or an error message.</span>
4431
+<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> """</span>
4432
+<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">try</span><span class="p">:</span>
4433
+<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
4434
+<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
4435
+<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
4436
+<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4437
+<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4438
+<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
4439
+<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4440
+<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"data"</span><span class="p">:</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4441
+<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
4442
+<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4443
+<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4444
+<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span>
4445
+<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"GET request to </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2"> failed: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
4446
+<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
4447
+<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">}</span>
4448
+</code></pre></div></td></tr></table></div>
4449
+ </details>
4450
+ </div>
4451
+
4452
+</div>
4453
+
4454
+<div class="doc doc-object doc-function">
4455
+
4456
+
4457
+
4458
+<h3 id="app.services.WazuhManager.disabled_rule.WazuhHttpRequests.put_request" class="doc doc-heading">
4459
+<code class="highlight language-python"><span class="n">put_request</span><span class="p">(</span><span class="n">endpoint</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
4460
+
4461
+</h3>
4462
+
4463
+
4464
+ <div class="doc doc-contents ">
4465
+
4466
+ <p>Send a PUT request to the specified endpoint.</p>
4467
+
4468
+ <p><strong>Parameters:</strong></p>
4469
+ <table>
4470
+ <thead>
4471
+ <tr>
4472
+ <th>Name</th>
4473
+ <th>Type</th>
4474
+ <th>Description</th>
4475
+ <th>Default</th>
4476
+ </tr>
4477
+ </thead>
4478
+ <tbody>
4479
+ <tr>
4480
+ <td><code>endpoint</code></td>
4481
+ <td>
4482
+ <code>str</code>
4483
+ </td>
4484
+ <td>
4485
+ <div class="doc-md-description">
4486
+ <p>The endpoint to send the PUT request to.</p>
4487
+ </div>
4488
+ </td>
4489
+ <td>
4490
+ <em>required</em>
4491
+ </td>
4492
+ </tr>
4493
+ <tr>
4494
+ <td><code>data</code></td>
4495
+ <td>
4496
+ <code>str</code>
4497
+ </td>
4498
+ <td>
4499
+ <div class="doc-md-description">
4500
+ <p>The data to be updated in the PUT request.</p>
4501
+ </div>
4502
+ </td>
4503
+ <td>
4504
+ <em>required</em>
4505
+ </td>
4506
+ </tr>
4507
+ <tr>
4508
+ <td><code>params</code></td>
4509
+ <td>
4510
+ <code><span title="typing.Optional">Optional</span>[<span title="typing.Dict">Dict</span>[str, str]]</code>
4511
+ </td>
4512
+ <td>
4513
+ <div class="doc-md-description">
4514
+ <p>Additional parameters to include in the request.</p>
4515
+ </div>
4516
+ </td>
4517
+ <td>
4518
+ <code>None</code>
4519
+ </td>
4520
+ </tr>
4521
+ </tbody>
4522
+ </table>
4523
+
4524
+ <p><strong>Returns:</strong></p>
4525
+ <table>
4526
+ <thead>
4527
+ <tr>
4528
+ <th>Type</th>
4529
+ <th>Description</th>
4530
+ </tr>
4531
+ </thead>
4532
+ <tbody>
4533
+ <tr>
4534
+ <td>
4535
+ <code><span title="typing.Dict">Dict</span>[str, bool]</code>
4536
+ </td>
4537
+ <td>
4538
+ <div class="doc-md-description">
4539
+ <p>Dict[str, bool]: A dictionary indicating the success or failure of the operation.</p>
4540
+ </div>
4541
+ </td>
4542
+ </tr>
4543
+ </tbody>
4544
+ </table>
4545
+
4546
+ <details class="quote">
4547
+ <summary>Source code in <code>app\services\WazuhManager\disabled_rule.py</code></summary>
4548
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
4549
+<span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
4550
+<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
4551
+<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
4552
+<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
4553
+<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
4554
+<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
4555
+<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
4556
+<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
4557
+<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
4558
+<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
4559
+<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
4560
+<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
4561
+<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
4562
+<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
4563
+<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
4564
+<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
4565
+<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
4566
+<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
4567
+<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
4568
+<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
4569
+<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
4570
+<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
4571
+<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
4572
+<span class="normal"><a href="#__codelineno-0-100">100</a></span>
4573
+<span class="normal"><a href="#__codelineno-0-101">101</a></span>
4574
+<span class="normal"><a href="#__codelineno-0-102">102</a></span>
4575
+<span class="normal"><a href="#__codelineno-0-103">103</a></span>
4576
+<span class="normal"><a href="#__codelineno-0-104">104</a></span>
4577
+<span class="normal"><a href="#__codelineno-0-105">105</a></span>
4578
+<span class="normal"><a href="#__codelineno-0-106">106</a></span>
4579
+<span class="normal"><a href="#__codelineno-0-107">107</a></span>
4580
+<span class="normal"><a href="#__codelineno-0-108">108</a></span>
4581
+<span class="normal"><a href="#__codelineno-0-109">109</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="k">def</span> <span class="nf">put_request</span><span class="p">(</span>
4582
+<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="bp">self</span><span class="p">,</span>
4583
+<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">endpoint</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4584
+<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">data</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
4585
+<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">params</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
4586
+<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="p">)</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
4587
+<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="w"> </span><span class="sd">"""</span>
4588
+<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Send a PUT request to the specified endpoint.</span>
4589
+<a id="__codelineno-0-84" name="__codelineno-0-84"></a>
4590
+<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
4591
+<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> endpoint (str): The endpoint to send the PUT request to.</span>
4592
+<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> data (str): The data to be updated in the PUT request.</span>
4593
+<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> params (Optional[Dict[str, str]]): Additional parameters to include in the request.</span>
4594
+<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
4595
+<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Returns:</span>
4596
+<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Dict[str, bool]: A dictionary indicating the success or failure of the operation.</span>
4597
+<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> """</span>
4598
+<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">try</span><span class="p">:</span>
4599
+<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">headers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
4600
+<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">"Content-Type"</span><span class="p">:</span> <span class="s2">"application/octet-stream"</span><span class="p">})</span>
4601
+<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
4602
+<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">put</span><span class="p">(</span>
4603
+<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
4604
+<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
4605
+<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
4606
+<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span>
4607
+<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
4608
+<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="p">)</span>
4609
+<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
4610
+<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully updated </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
4611
+<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
4612
+<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
4613
+<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4614
+<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Failed to update </span><span class="si">{</span><span class="n">endpoint</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
4615
+</code></pre></div></td></tr></table></div>
4616
+ </details>
4617
+ </div>
4618
+
4619
+</div>
4620
+
4621
+
4622
+
4623
+ </div>
4624
+
4625
+ </div>
4626
+
4627
+</div>
4628
+
4629
+
4630
+
4631
+
4632
+ </div>
4633
+
4634
+ </div>
4635
+
4636
+</div>
4637
+
4638
+<div class="doc doc-object doc-module">
4639
+
4640
+
4641
+<a id="app.services.WazuhManager.enabled_rule"></a>
4642
+ <div class="doc doc-contents first">
4643
+
4644
+
4645
+
4646
+ <div class="doc doc-children">
4647
+
4648
+
4649
+
4650
+
4651
+
4652
+
4653
+
4654
+
4655
+<div class="doc doc-object doc-class">
4656
+
4657
+
4658
+
4659
+<h2 id="app.services.WazuhManager.enabled_rule.EnableRuleService" class="doc doc-heading">
4660
+ <code>EnableRuleService</code>
4661
+
4662
+
4663
+</h2>
4664
+
4665
+
4666
+ <div class="doc doc-contents ">
4667
+
4668
+
4669
+ <p>A service class to manage rule enabling operations in Wazuh Manager.</p>
4670
+
4671
+ <p><strong>Attributes:</strong></p>
4672
+ <table>
4673
+ <thead>
4674
+ <tr>
4675
+ <th>Name</th>
4676
+ <th>Type</th>
4677
+ <th>Description</th>
4678
+ </tr>
4679
+ </thead>
4680
+ <tbody>
4681
+ <tr>
4682
+ <td><code>universal_service</code></td>
4683
+ <td>
4684
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
4685
+ </td>
4686
+ <td>
4687
+ <div class="doc-md-description">
4688
+ <p>An instance of the UniversalService.</p>
4689
+ </div>
4690
+ </td>
4691
+ </tr>
4692
+ <tr>
4693
+ <td><code>auth_token</code></td>
4694
+ <td>
4695
+ <code>str</code>
4696
+ </td>
4697
+ <td>
4698
+ <div class="doc-md-description">
4699
+ <p>The Wazuh API authentication token.</p>
4700
+ </div>
4701
+ </td>
4702
+ </tr>
4703
+ <tr>
4704
+ <td><code>wazuh_http_requests</code></td>
4705
+ <td>
4706
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.enabled_rule.WazuhHttpRequests" href="#app.services.WazuhManager.enabled_rule.WazuhHttpRequests">WazuhHttpRequests</a></code>
4707
+ </td>
4708
+ <td>
4709
+ <div class="doc-md-description">
4710
+ <p>An instance of WazuhHttpRequests.</p>
4711
+ </div>
4712
+ </td>
4713
+ </tr>
4714
+ </tbody>
4715
+ </table>
4716
+
4717
+
4718
+ <details class="quote">
4719
+ <summary>Source code in <code>app\services\WazuhManager\enabled_rule.py</code></summary>
4720
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-115">115</a></span>
4721
+<span class="normal"><a href="#__codelineno-0-116">116</a></span>
4722
+<span class="normal"><a href="#__codelineno-0-117">117</a></span>
4723
+<span class="normal"><a href="#__codelineno-0-118">118</a></span>
4724
+<span class="normal"><a href="#__codelineno-0-119">119</a></span>
4725
+<span class="normal"><a href="#__codelineno-0-120">120</a></span>
4726
+<span class="normal"><a href="#__codelineno-0-121">121</a></span>
4727
+<span class="normal"><a href="#__codelineno-0-122">122</a></span>
4728
+<span class="normal"><a href="#__codelineno-0-123">123</a></span>
4729
+<span class="normal"><a href="#__codelineno-0-124">124</a></span>
4730
+<span class="normal"><a href="#__codelineno-0-125">125</a></span>
4731
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
4732
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
4733
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
4734
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
4735
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
4736
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
4737
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
4738
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
4739
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
4740
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
4741
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
4742
+<span class="normal"><a href="#__codelineno-0-137">137</a></span>
4743
+<span class="normal"><a href="#__codelineno-0-138">138</a></span>
4744
+<span class="normal"><a href="#__codelineno-0-139">139</a></span>
4745
+<span class="normal"><a href="#__codelineno-0-140">140</a></span>
4746
+<span class="normal"><a href="#__codelineno-0-141">141</a></span>
4747
+<span class="normal"><a href="#__codelineno-0-142">142</a></span>
4748
+<span class="normal"><a href="#__codelineno-0-143">143</a></span>
4749
+<span class="normal"><a href="#__codelineno-0-144">144</a></span>
4750
+<span class="normal"><a href="#__codelineno-0-145">145</a></span>
4751
+<span class="normal"><a href="#__codelineno-0-146">146</a></span>
4752
+<span class="normal"><a href="#__codelineno-0-147">147</a></span>
4753
+<span class="normal"><a href="#__codelineno-0-148">148</a></span>
4754
+<span class="normal"><a href="#__codelineno-0-149">149</a></span>
4755
+<span class="normal"><a href="#__codelineno-0-150">150</a></span>
4756
+<span class="normal"><a href="#__codelineno-0-151">151</a></span>
4757
+<span class="normal"><a href="#__codelineno-0-152">152</a></span>
4758
+<span class="normal"><a href="#__codelineno-0-153">153</a></span>
4759
+<span class="normal"><a href="#__codelineno-0-154">154</a></span>
4760
+<span class="normal"><a href="#__codelineno-0-155">155</a></span>
4761
+<span class="normal"><a href="#__codelineno-0-156">156</a></span>
4762
+<span class="normal"><a href="#__codelineno-0-157">157</a></span>
4763
+<span class="normal"><a href="#__codelineno-0-158">158</a></span>
4764
+<span class="normal"><a href="#__codelineno-0-159">159</a></span>
4765
+<span class="normal"><a href="#__codelineno-0-160">160</a></span>
4766
+<span class="normal"><a href="#__codelineno-0-161">161</a></span>
4767
+<span class="normal"><a href="#__codelineno-0-162">162</a></span>
4768
+<span class="normal"><a href="#__codelineno-0-163">163</a></span>
4769
+<span class="normal"><a href="#__codelineno-0-164">164</a></span>
4770
+<span class="normal"><a href="#__codelineno-0-165">165</a></span>
4771
+<span class="normal"><a href="#__codelineno-0-166">166</a></span>
4772
+<span class="normal"><a href="#__codelineno-0-167">167</a></span>
4773
+<span class="normal"><a href="#__codelineno-0-168">168</a></span>
4774
+<span class="normal"><a href="#__codelineno-0-169">169</a></span>
4775
+<span class="normal"><a href="#__codelineno-0-170">170</a></span>
4776
+<span class="normal"><a href="#__codelineno-0-171">171</a></span>
4777
+<span class="normal"><a href="#__codelineno-0-172">172</a></span>
4778
+<span class="normal"><a href="#__codelineno-0-173">173</a></span>
4779
+<span class="normal"><a href="#__codelineno-0-174">174</a></span>
4780
+<span class="normal"><a href="#__codelineno-0-175">175</a></span>
4781
+<span class="normal"><a href="#__codelineno-0-176">176</a></span>
4782
+<span class="normal"><a href="#__codelineno-0-177">177</a></span>
4783
+<span class="normal"><a href="#__codelineno-0-178">178</a></span>
4784
+<span class="normal"><a href="#__codelineno-0-179">179</a></span>
4785
+<span class="normal"><a href="#__codelineno-0-180">180</a></span>
4786
+<span class="normal"><a href="#__codelineno-0-181">181</a></span>
4787
+<span class="normal"><a href="#__codelineno-0-182">182</a></span>
4788
+<span class="normal"><a href="#__codelineno-0-183">183</a></span>
4789
+<span class="normal"><a href="#__codelineno-0-184">184</a></span>
4790
+<span class="normal"><a href="#__codelineno-0-185">185</a></span>
4791
+<span class="normal"><a href="#__codelineno-0-186">186</a></span>
4792
+<span class="normal"><a href="#__codelineno-0-187">187</a></span>
4793
+<span class="normal"><a href="#__codelineno-0-188">188</a></span>
4794
+<span class="normal"><a href="#__codelineno-0-189">189</a></span>
4795
+<span class="normal"><a href="#__codelineno-0-190">190</a></span>
4796
+<span class="normal"><a href="#__codelineno-0-191">191</a></span>
4797
+<span class="normal"><a href="#__codelineno-0-192">192</a></span>
4798
+<span class="normal"><a href="#__codelineno-0-193">193</a></span>
4799
+<span class="normal"><a href="#__codelineno-0-194">194</a></span>
4800
+<span class="normal"><a href="#__codelineno-0-195">195</a></span>
4801
+<span class="normal"><a href="#__codelineno-0-196">196</a></span>
4802
+<span class="normal"><a href="#__codelineno-0-197">197</a></span>
4803
+<span class="normal"><a href="#__codelineno-0-198">198</a></span>
4804
+<span class="normal"><a href="#__codelineno-0-199">199</a></span>
4805
+<span class="normal"><a href="#__codelineno-0-200">200</a></span>
4806
+<span class="normal"><a href="#__codelineno-0-201">201</a></span>
4807
+<span class="normal"><a href="#__codelineno-0-202">202</a></span>
4808
+<span class="normal"><a href="#__codelineno-0-203">203</a></span>
4809
+<span class="normal"><a href="#__codelineno-0-204">204</a></span>
4810
+<span class="normal"><a href="#__codelineno-0-205">205</a></span>
4811
+<span class="normal"><a href="#__codelineno-0-206">206</a></span>
4812
+<span class="normal"><a href="#__codelineno-0-207">207</a></span>
4813
+<span class="normal"><a href="#__codelineno-0-208">208</a></span>
4814
+<span class="normal"><a href="#__codelineno-0-209">209</a></span>
4815
+<span class="normal"><a href="#__codelineno-0-210">210</a></span>
4816
+<span class="normal"><a href="#__codelineno-0-211">211</a></span>
4817
+<span class="normal"><a href="#__codelineno-0-212">212</a></span>
4818
+<span class="normal"><a href="#__codelineno-0-213">213</a></span>
4819
+<span class="normal"><a href="#__codelineno-0-214">214</a></span>
4820
+<span class="normal"><a href="#__codelineno-0-215">215</a></span>
4821
+<span class="normal"><a href="#__codelineno-0-216">216</a></span>
4822
+<span class="normal"><a href="#__codelineno-0-217">217</a></span>
4823
+<span class="normal"><a href="#__codelineno-0-218">218</a></span>
4824
+<span class="normal"><a href="#__codelineno-0-219">219</a></span>
4825
+<span class="normal"><a href="#__codelineno-0-220">220</a></span>
4826
+<span class="normal"><a href="#__codelineno-0-221">221</a></span>
4827
+<span class="normal"><a href="#__codelineno-0-222">222</a></span>
4828
+<span class="normal"><a href="#__codelineno-0-223">223</a></span>
4829
+<span class="normal"><a href="#__codelineno-0-224">224</a></span>
4830
+<span class="normal"><a href="#__codelineno-0-225">225</a></span>
4831
+<span class="normal"><a href="#__codelineno-0-226">226</a></span>
4832
+<span class="normal"><a href="#__codelineno-0-227">227</a></span>
4833
+<span class="normal"><a href="#__codelineno-0-228">228</a></span>
4834
+<span class="normal"><a href="#__codelineno-0-229">229</a></span>
4835
+<span class="normal"><a href="#__codelineno-0-230">230</a></span>
4836
+<span class="normal"><a href="#__codelineno-0-231">231</a></span>
4837
+<span class="normal"><a href="#__codelineno-0-232">232</a></span>
4838
+<span class="normal"><a href="#__codelineno-0-233">233</a></span>
4839
+<span class="normal"><a href="#__codelineno-0-234">234</a></span>
4840
+<span class="normal"><a href="#__codelineno-0-235">235</a></span>
4841
+<span class="normal"><a href="#__codelineno-0-236">236</a></span>
4842
+<span class="normal"><a href="#__codelineno-0-237">237</a></span>
4843
+<span class="normal"><a href="#__codelineno-0-238">238</a></span>
4844
+<span class="normal"><a href="#__codelineno-0-239">239</a></span>
4845
+<span class="normal"><a href="#__codelineno-0-240">240</a></span>
4846
+<span class="normal"><a href="#__codelineno-0-241">241</a></span>
4847
+<span class="normal"><a href="#__codelineno-0-242">242</a></span>
4848
+<span class="normal"><a href="#__codelineno-0-243">243</a></span>
4849
+<span class="normal"><a href="#__codelineno-0-244">244</a></span>
4850
+<span class="normal"><a href="#__codelineno-0-245">245</a></span>
4851
+<span class="normal"><a href="#__codelineno-0-246">246</a></span>
4852
+<span class="normal"><a href="#__codelineno-0-247">247</a></span>
4853
+<span class="normal"><a href="#__codelineno-0-248">248</a></span>
4854
+<span class="normal"><a href="#__codelineno-0-249">249</a></span>
4855
+<span class="normal"><a href="#__codelineno-0-250">250</a></span>
4856
+<span class="normal"><a href="#__codelineno-0-251">251</a></span>
4857
+<span class="normal"><a href="#__codelineno-0-252">252</a></span>
4858
+<span class="normal"><a href="#__codelineno-0-253">253</a></span>
4859
+<span class="normal"><a href="#__codelineno-0-254">254</a></span>
4860
+<span class="normal"><a href="#__codelineno-0-255">255</a></span>
4861
+<span class="normal"><a href="#__codelineno-0-256">256</a></span>
4862
+<span class="normal"><a href="#__codelineno-0-257">257</a></span>
4863
+<span class="normal"><a href="#__codelineno-0-258">258</a></span>
4864
+<span class="normal"><a href="#__codelineno-0-259">259</a></span>
4865
+<span class="normal"><a href="#__codelineno-0-260">260</a></span>
4866
+<span class="normal"><a href="#__codelineno-0-261">261</a></span>
4867
+<span class="normal"><a href="#__codelineno-0-262">262</a></span>
4868
+<span class="normal"><a href="#__codelineno-0-263">263</a></span>
4869
+<span class="normal"><a href="#__codelineno-0-264">264</a></span>
4870
+<span class="normal"><a href="#__codelineno-0-265">265</a></span>
4871
+<span class="normal"><a href="#__codelineno-0-266">266</a></span>
4872
+<span class="normal"><a href="#__codelineno-0-267">267</a></span>
4873
+<span class="normal"><a href="#__codelineno-0-268">268</a></span>
4874
+<span class="normal"><a href="#__codelineno-0-269">269</a></span>
4875
+<span class="normal"><a href="#__codelineno-0-270">270</a></span>
4876
+<span class="normal"><a href="#__codelineno-0-271">271</a></span>
4877
+<span class="normal"><a href="#__codelineno-0-272">272</a></span>
4878
+<span class="normal"><a href="#__codelineno-0-273">273</a></span>
4879
+<span class="normal"><a href="#__codelineno-0-274">274</a></span>
4880
+<span class="normal"><a href="#__codelineno-0-275">275</a></span>
4881
+<span class="normal"><a href="#__codelineno-0-276">276</a></span>
4882
+<span class="normal"><a href="#__codelineno-0-277">277</a></span>
4883
+<span class="normal"><a href="#__codelineno-0-278">278</a></span>
4884
+<span class="normal"><a href="#__codelineno-0-279">279</a></span>
4885
+<span class="normal"><a href="#__codelineno-0-280">280</a></span>
4886
+<span class="normal"><a href="#__codelineno-0-281">281</a></span>
4887
+<span class="normal"><a href="#__codelineno-0-282">282</a></span>
4888
+<span class="normal"><a href="#__codelineno-0-283">283</a></span>
4889
+<span class="normal"><a href="#__codelineno-0-284">284</a></span>
4890
+<span class="normal"><a href="#__codelineno-0-285">285</a></span>
4891
+<span class="normal"><a href="#__codelineno-0-286">286</a></span>
4892
+<span class="normal"><a href="#__codelineno-0-287">287</a></span>
4893
+<span class="normal"><a href="#__codelineno-0-288">288</a></span>
4894
+<span class="normal"><a href="#__codelineno-0-289">289</a></span>
4895
+<span class="normal"><a href="#__codelineno-0-290">290</a></span>
4896
+<span class="normal"><a href="#__codelineno-0-291">291</a></span>
4897
+<span class="normal"><a href="#__codelineno-0-292">292</a></span>
4898
+<span class="normal"><a href="#__codelineno-0-293">293</a></span>
4899
+<span class="normal"><a href="#__codelineno-0-294">294</a></span>
4900
+<span class="normal"><a href="#__codelineno-0-295">295</a></span>
4901
+<span class="normal"><a href="#__codelineno-0-296">296</a></span>
4902
+<span class="normal"><a href="#__codelineno-0-297">297</a></span>
4903
+<span class="normal"><a href="#__codelineno-0-298">298</a></span>
4904
+<span class="normal"><a href="#__codelineno-0-299">299</a></span>
4905
+<span class="normal"><a href="#__codelineno-0-300">300</a></span>
4906
+<span class="normal"><a href="#__codelineno-0-301">301</a></span>
4907
+<span class="normal"><a href="#__codelineno-0-302">302</a></span>
4908
+<span class="normal"><a href="#__codelineno-0-303">303</a></span>
4909
+<span class="normal"><a href="#__codelineno-0-304">304</a></span>
4910
+<span class="normal"><a href="#__codelineno-0-305">305</a></span>
4911
+<span class="normal"><a href="#__codelineno-0-306">306</a></span>
4912
+<span class="normal"><a href="#__codelineno-0-307">307</a></span>
4913
+<span class="normal"><a href="#__codelineno-0-308">308</a></span>
4914
+<span class="normal"><a href="#__codelineno-0-309">309</a></span>
4915
+<span class="normal"><a href="#__codelineno-0-310">310</a></span>
4916
+<span class="normal"><a href="#__codelineno-0-311">311</a></span>
4917
+<span class="normal"><a href="#__codelineno-0-312">312</a></span>
4918
+<span class="normal"><a href="#__codelineno-0-313">313</a></span>
4919
+<span class="normal"><a href="#__codelineno-0-314">314</a></span>
4920
+<span class="normal"><a href="#__codelineno-0-315">315</a></span>
4921
+<span class="normal"><a href="#__codelineno-0-316">316</a></span>
4922
+<span class="normal"><a href="#__codelineno-0-317">317</a></span>
4923
+<span class="normal"><a href="#__codelineno-0-318">318</a></span>
4924
+<span class="normal"><a href="#__codelineno-0-319">319</a></span>
4925
+<span class="normal"><a href="#__codelineno-0-320">320</a></span>
4926
+<span class="normal"><a href="#__codelineno-0-321">321</a></span>
4927
+<span class="normal"><a href="#__codelineno-0-322">322</a></span>
4928
+<span class="normal"><a href="#__codelineno-0-323">323</a></span>
4929
+<span class="normal"><a href="#__codelineno-0-324">324</a></span>
4930
+<span class="normal"><a href="#__codelineno-0-325">325</a></span>
4931
+<span class="normal"><a href="#__codelineno-0-326">326</a></span>
4932
+<span class="normal"><a href="#__codelineno-0-327">327</a></span>
4933
+<span class="normal"><a href="#__codelineno-0-328">328</a></span>
4934
+<span class="normal"><a href="#__codelineno-0-329">329</a></span>
4935
+<span class="normal"><a href="#__codelineno-0-330">330</a></span>
4936
+<span class="normal"><a href="#__codelineno-0-331">331</a></span>
4937
+<span class="normal"><a href="#__codelineno-0-332">332</a></span>
4938
+<span class="normal"><a href="#__codelineno-0-333">333</a></span>
4939
+<span class="normal"><a href="#__codelineno-0-334">334</a></span>
4940
+<span class="normal"><a href="#__codelineno-0-335">335</a></span>
4941
+<span class="normal"><a href="#__codelineno-0-336">336</a></span>
4942
+<span class="normal"><a href="#__codelineno-0-337">337</a></span>
4943
+<span class="normal"><a href="#__codelineno-0-338">338</a></span>
4944
+<span class="normal"><a href="#__codelineno-0-339">339</a></span>
4945
+<span class="normal"><a href="#__codelineno-0-340">340</a></span>
4946
+<span class="normal"><a href="#__codelineno-0-341">341</a></span>
4947
+<span class="normal"><a href="#__codelineno-0-342">342</a></span>
4948
+<span class="normal"><a href="#__codelineno-0-343">343</a></span>
4949
+<span class="normal"><a href="#__codelineno-0-344">344</a></span>
4950
+<span class="normal"><a href="#__codelineno-0-345">345</a></span>
4951
+<span class="normal"><a href="#__codelineno-0-346">346</a></span>
4952
+<span class="normal"><a href="#__codelineno-0-347">347</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="k">class</span> <span class="nc">EnableRuleService</span><span class="p">:</span>
4953
+<a id="__codelineno-0-116" name="__codelineno-0-116"></a><span class="w"> </span><span class="sd">"""</span>
4954
+<a id="__codelineno-0-117" name="__codelineno-0-117"></a><span class="sd"> A service class to manage rule enabling operations in Wazuh Manager.</span>
4955
+<a id="__codelineno-0-118" name="__codelineno-0-118"></a>
4956
+<a id="__codelineno-0-119" name="__codelineno-0-119"></a><span class="sd"> Attributes:</span>
4957
+<a id="__codelineno-0-120" name="__codelineno-0-120"></a><span class="sd"> universal_service (UniversalService): An instance of the UniversalService.</span>
4958
+<a id="__codelineno-0-121" name="__codelineno-0-121"></a><span class="sd"> auth_token (str): The Wazuh API authentication token.</span>
4959
+<a id="__codelineno-0-122" name="__codelineno-0-122"></a><span class="sd"> wazuh_http_requests (WazuhHttpRequests): An instance of WazuhHttpRequests.</span>
4960
+<a id="__codelineno-0-123" name="__codelineno-0-123"></a><span class="sd"> """</span>
4961
+<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
4962
+<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
4963
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">"""</span>
4964
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Initialize an EnableRuleService instance.</span>
4965
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
4966
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
4967
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> universal_service (UniversalService): An instance of the UniversalService.</span>
4968
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> """</span>
4969
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
4970
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
4971
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
4972
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
4973
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
4974
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="p">)</span>
4975
+<a id="__codelineno-0-138" name="__codelineno-0-138"></a>
4976
+<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">def</span> <span class="nf">enable_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]:</span>
4977
+<a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="w"> </span><span class="sd">"""</span>
4978
+<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="sd"> Enable a rule in Wazuh Manager.</span>
4979
+<a id="__codelineno-0-142" name="__codelineno-0-142"></a>
4980
+<a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="sd"> Args:</span>
4981
+<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> request (Dict[str, str]): A request to enable a rule.</span>
4982
+<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
4983
+<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
4984
+<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Dict[str, Union[str, bool]]: A dictionary indicating the success of the operation.</span>
4985
+<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> """</span>
4986
+<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="k">try</span><span class="p">:</span>
4987
+<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_validate_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
4988
+<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">rule_id</span> <span class="o">=</span> <span class="n">request</span><span class="p">[</span><span class="s2">"rule_id"</span><span class="p">]</span>
4989
+<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_filename</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
4990
+<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Getting file content of </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
4991
+<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fetch_file_content</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
4992
+<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">previous_level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_previous_level</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
4993
+<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="n">updated_file_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_level_previous</span><span class="p">(</span>
4994
+<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="n">file_content</span><span class="p">,</span>
4995
+<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="n">rule_id</span><span class="p">,</span>
4996
+<a id="__codelineno-0-159" name="__codelineno-0-159"></a> <span class="n">previous_level</span><span class="p">,</span>
4997
+<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="p">)</span>
4998
+<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_json_to_xml</span><span class="p">(</span><span class="n">updated_file_content</span><span class="p">)</span>
4999
+<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_delete_rule_from_db</span><span class="p">(</span><span class="n">rule_id</span><span class="p">)</span>
5000
+<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_put_updated_rule</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">)</span>
5001
+<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">UniversalService</span><span class="p">()</span><span class="o">.</span><span class="n">restart_service</span><span class="p">()</span>
5002
+<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="k">return</span> <span class="p">{</span>
5003
+<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> successfully enabled in file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">."</span><span class="p">,</span>
5004
+<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
5005
+<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="p">}</span>
5006
+<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
5007
+<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">"message"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
5008
+<a id="__codelineno-0-171" name="__codelineno-0-171"></a>
5009
+<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">def</span> <span class="nf">_validate_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
5010
+<a id="__codelineno-0-173" name="__codelineno-0-173"></a><span class="w"> </span><span class="sd">"""</span>
5011
+<a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="sd"> Validate a request to enable a rule.</span>
5012
+<a id="__codelineno-0-175" name="__codelineno-0-175"></a>
5013
+<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> Args:</span>
5014
+<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="sd"> request (Dict[str, str]): A request to enable a rule.</span>
5015
+<a id="__codelineno-0-178" name="__codelineno-0-178"></a>
5016
+<a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="sd"> Raises:</span>
5017
+<a id="__codelineno-0-180" name="__codelineno-0-180"></a><span class="sd"> ValueError: If 'rule_id' is not in the request.</span>
5018
+<a id="__codelineno-0-181" name="__codelineno-0-181"></a>
5019
+<a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="sd"> Returns:</span>
5020
+<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> str: The rule id from the request.</span>
5021
+<a id="__codelineno-0-184" name="__codelineno-0-184"></a><span class="sd"> """</span>
5022
+<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Validating enable rule request: </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
5023
+<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">if</span> <span class="s2">"rule_id"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">request</span><span class="p">:</span>
5024
+<a id="__codelineno-0-187" name="__codelineno-0-187"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Request missing rule_id"</span><span class="p">)</span>
5025
+<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">return</span> <span class="n">request</span><span class="p">[</span><span class="s2">"rule_id"</span><span class="p">]</span>
5026
+<a id="__codelineno-0-189" name="__codelineno-0-189"></a>
5027
+<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="k">def</span> <span class="nf">_fetch_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
5028
+<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="w"> </span><span class="sd">"""</span>
5029
+<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> Fetch the filename containing the rule to be enabled.</span>
5030
+<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
5031
+<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> Args:</span>
5032
+<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> rule_id (str): The id of the rule to be enabled.</span>
5033
+<a id="__codelineno-0-196" name="__codelineno-0-196"></a>
5034
+<a id="__codelineno-0-197" name="__codelineno-0-197"></a><span class="sd"> Raises:</span>
5035
+<a id="__codelineno-0-198" name="__codelineno-0-198"></a><span class="sd"> ValueError: If the filename could not be fetched.</span>
5036
+<a id="__codelineno-0-199" name="__codelineno-0-199"></a>
5037
+<a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="sd"> Returns:</span>
5038
+<a id="__codelineno-0-201" name="__codelineno-0-201"></a><span class="sd"> str: The filename containing the rule.</span>
5039
+<a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="sd"> """</span>
5040
+<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">filename_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
5041
+<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="s2">"rules"</span><span class="p">,</span>
5042
+<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="p">{</span><span class="s2">"rule_ids"</span><span class="p">:</span> <span class="n">rule_id</span><span class="p">},</span>
5043
+<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="p">)</span>
5044
+<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
5045
+<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">filename_data</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
5046
+<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="k">return</span> <span class="n">filename_data</span><span class="p">[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"affected_items"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"filename"</span><span class="p">]</span>
5047
+<a id="__codelineno-0-210" name="__codelineno-0-210"></a>
5048
+<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="k">def</span> <span class="nf">_fetch_file_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">Any</span><span class="p">:</span>
5049
+<a id="__codelineno-0-212" name="__codelineno-0-212"></a><span class="w"> </span><span class="sd">"""</span>
5050
+<a id="__codelineno-0-213" name="__codelineno-0-213"></a><span class="sd"> Fetch the content of the file containing the rule to be enabled.</span>
5051
+<a id="__codelineno-0-214" name="__codelineno-0-214"></a>
5052
+<a id="__codelineno-0-215" name="__codelineno-0-215"></a><span class="sd"> Args:</span>
5053
+<a id="__codelineno-0-216" name="__codelineno-0-216"></a><span class="sd"> filename (str): The filename containing the rule to be enabled.</span>
5054
+<a id="__codelineno-0-217" name="__codelineno-0-217"></a>
5055
+<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="sd"> Raises:</span>
5056
+<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="sd"> ValueError: If the file content could not be fetched.</span>
5057
+<a id="__codelineno-0-220" name="__codelineno-0-220"></a>
5058
+<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> Returns:</span>
5059
+<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> Any: The content of the file.</span>
5060
+<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> """</span>
5061
+<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="n">file_content_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">get_request</span><span class="p">(</span>
5062
+<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="sa">f</span><span class="s2">"rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
5063
+<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="p">)</span>
5064
+<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
5065
+<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">file_content_data</span><span class="p">[</span><span class="s2">"message"</span><span class="p">])</span>
5066
+<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="k">return</span> <span class="n">file_content_data</span><span class="p">[</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"data"</span><span class="p">][</span><span class="s2">"affected_items"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s2">"group"</span><span class="p">]</span>
5067
+<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
5068
+<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">def</span> <span class="nf">_get_previous_level</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
5069
+<a id="__codelineno-0-232" name="__codelineno-0-232"></a><span class="w"> </span><span class="sd">"""</span>
5070
+<a id="__codelineno-0-233" name="__codelineno-0-233"></a><span class="sd"> Fetch the previous level of a rule from the `disabled_rules` table.</span>
5071
+<a id="__codelineno-0-234" name="__codelineno-0-234"></a>
5072
+<a id="__codelineno-0-235" name="__codelineno-0-235"></a><span class="sd"> Args:</span>
5073
+<a id="__codelineno-0-236" name="__codelineno-0-236"></a><span class="sd"> rule_id (str): The id of the rule.</span>
5074
+<a id="__codelineno-0-237" name="__codelineno-0-237"></a>
5075
+<a id="__codelineno-0-238" name="__codelineno-0-238"></a><span class="sd"> Raises:</span>
5076
+<a id="__codelineno-0-239" name="__codelineno-0-239"></a><span class="sd"> ValueError: If the rule was not previously disabled.</span>
5077
+<a id="__codelineno-0-240" name="__codelineno-0-240"></a>
5078
+<a id="__codelineno-0-241" name="__codelineno-0-241"></a><span class="sd"> Returns:</span>
5079
+<a id="__codelineno-0-242" name="__codelineno-0-242"></a><span class="sd"> str: The previous level of the rule.</span>
5080
+<a id="__codelineno-0-243" name="__codelineno-0-243"></a><span class="sd"> """</span>
5081
+<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="n">disabled_rule</span> <span class="o">=</span> <span class="n">DisabledRules</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">filter_by</span><span class="p">(</span><span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
5082
+<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">disabled_rule</span><span class="p">:</span>
5083
+<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> is not disabled."</span><span class="p">)</span>
5084
+<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="k">return</span> <span class="n">disabled_rule</span><span class="o">.</span><span class="n">previous_level</span>
5085
+<a id="__codelineno-0-248" name="__codelineno-0-248"></a>
5086
+<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="k">def</span> <span class="nf">_set_level_previous</span><span class="p">(</span>
5087
+<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="bp">self</span><span class="p">,</span>
5088
+<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="n">file_content</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
5089
+<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
5090
+<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="n">previous_level</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
5091
+<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="p">)</span> <span class="o">-></span> <span class="n">Any</span><span class="p">:</span>
5092
+<a id="__codelineno-0-255" name="__codelineno-0-255"></a><span class="w"> </span><span class="sd">"""</span>
5093
+<a id="__codelineno-0-256" name="__codelineno-0-256"></a><span class="sd"> Set the level of a rule to its previous level in the file content.</span>
5094
+<a id="__codelineno-0-257" name="__codelineno-0-257"></a>
5095
+<a id="__codelineno-0-258" name="__codelineno-0-258"></a><span class="sd"> Args:</span>
5096
+<a id="__codelineno-0-259" name="__codelineno-0-259"></a><span class="sd"> file_content (Any): The content of the file containing the rule.</span>
5097
+<a id="__codelineno-0-260" name="__codelineno-0-260"></a><span class="sd"> rule_id (str): The id of the rule.</span>
5098
+<a id="__codelineno-0-261" name="__codelineno-0-261"></a><span class="sd"> previous_level (str): The previous level of the rule.</span>
5099
+<a id="__codelineno-0-262" name="__codelineno-0-262"></a>
5100
+<a id="__codelineno-0-263" name="__codelineno-0-263"></a><span class="sd"> Returns:</span>
5101
+<a id="__codelineno-0-264" name="__codelineno-0-264"></a><span class="sd"> Any: The updated file content with the level of the rule set to the previous level.</span>
5102
+<a id="__codelineno-0-265" name="__codelineno-0-265"></a><span class="sd"> """</span>
5103
+<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
5104
+<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="sa">f</span><span class="s2">"Setting rule </span><span class="si">{</span><span class="n">rule_id</span><span class="si">}</span><span class="s2"> level to </span><span class="si">{</span><span class="n">previous_level</span><span class="si">}</span><span class="s2"> for file_content: </span><span class="si">{</span><span class="n">file_content</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
5105
+<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="p">)</span>
5106
+<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="c1"># If 'file_content' is a dictionary (representing a single group), make it a list of one group</span>
5107
+<a id="__codelineno-0-270" name="__codelineno-0-270"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">file_content</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
5108
+<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="n">file_content</span> <span class="o">=</span> <span class="p">[</span><span class="n">file_content</span><span class="p">]</span>
5109
+<a id="__codelineno-0-272" name="__codelineno-0-272"></a>
5110
+<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="k">for</span> <span class="n">group_block</span> <span class="ow">in</span> <span class="n">file_content</span><span class="p">:</span>
5111
+<a id="__codelineno-0-274" name="__codelineno-0-274"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="n">group_block</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"rule"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
5112
+<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">rule_block</span><span class="p">:</span>
5113
+<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="k">continue</span>
5114
+<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">rule_block</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
5115
+<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="n">rule_block</span> <span class="o">=</span> <span class="p">[</span><span class="n">rule_block</span><span class="p">]</span>
5116
+<a id="__codelineno-0-279" name="__codelineno-0-279"></a>
5117
+<a id="__codelineno-0-280" name="__codelineno-0-280"></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rule_block</span><span class="p">:</span>
5118
+<a id="__codelineno-0-281" name="__codelineno-0-281"></a> <span class="k">if</span> <span class="n">rule</span><span class="p">[</span><span class="s2">"@id"</span><span class="p">]</span> <span class="o">==</span> <span class="n">rule_id</span><span class="p">:</span>
5119
+<a id="__codelineno-0-282" name="__codelineno-0-282"></a> <span class="c1"># Set the rule level to the previous level.</span>
5120
+<a id="__codelineno-0-283" name="__codelineno-0-283"></a> <span class="n">rule</span><span class="p">[</span><span class="s2">"@level"</span><span class="p">]</span> <span class="o">=</span> <span class="n">previous_level</span>
5121
+<a id="__codelineno-0-284" name="__codelineno-0-284"></a> <span class="k">break</span>
5122
+<a id="__codelineno-0-285" name="__codelineno-0-285"></a>
5123
+<a id="__codelineno-0-286" name="__codelineno-0-286"></a> <span class="k">return</span> <span class="n">file_content</span>
5124
+<a id="__codelineno-0-287" name="__codelineno-0-287"></a>
5125
+<a id="__codelineno-0-288" name="__codelineno-0-288"></a> <span class="k">def</span> <span class="nf">_json_to_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_content</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
5126
+<a id="__codelineno-0-289" name="__codelineno-0-289"></a><span class="w"> </span><span class="sd">"""</span>
5127
+<a id="__codelineno-0-290" name="__codelineno-0-290"></a><span class="sd"> Convert file content from JSON to XML format.</span>
5128
+<a id="__codelineno-0-291" name="__codelineno-0-291"></a>
5129
+<a id="__codelineno-0-292" name="__codelineno-0-292"></a><span class="sd"> Args:</span>
5130
+<a id="__codelineno-0-293" name="__codelineno-0-293"></a><span class="sd"> file_content (Any): The content of the file containing the rule.</span>
5131
+<a id="__codelineno-0-294" name="__codelineno-0-294"></a>
5132
+<a id="__codelineno-0-295" name="__codelineno-0-295"></a><span class="sd"> Returns:</span>
5133
+<a id="__codelineno-0-296" name="__codelineno-0-296"></a><span class="sd"> str: The file content in XML format.</span>
5134
+<a id="__codelineno-0-297" name="__codelineno-0-297"></a><span class="sd"> """</span>
5135
+<a id="__codelineno-0-298" name="__codelineno-0-298"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Converting file_content to XML: </span><span class="si">{</span><span class="n">file_content</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
5136
+<a id="__codelineno-0-299" name="__codelineno-0-299"></a>
5137
+<a id="__codelineno-0-300" name="__codelineno-0-300"></a> <span class="n">xml_content_list</span> <span class="o">=</span> <span class="p">[]</span>
5138
+<a id="__codelineno-0-301" name="__codelineno-0-301"></a> <span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="n">file_content</span><span class="p">:</span>
5139
+<a id="__codelineno-0-302" name="__codelineno-0-302"></a> <span class="n">xml_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">}</span>
5140
+<a id="__codelineno-0-303" name="__codelineno-0-303"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xmltodict</span><span class="o">.</span><span class="n">unparse</span><span class="p">(</span><span class="n">xml_dict</span><span class="p">,</span> <span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
5141
+<a id="__codelineno-0-304" name="__codelineno-0-304"></a> <span class="c1"># Remove the `<?xml version="1.0" encoding="utf-8"?>` from the</span>
5142
+<a id="__codelineno-0-305" name="__codelineno-0-305"></a> <span class="c1"># beginning of the XML string.</span>
5143
+<a id="__codelineno-0-306" name="__codelineno-0-306"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
5144
+<a id="__codelineno-0-307" name="__codelineno-0-307"></a> <span class="s1">'<?xml version="1.0" encoding="utf-8"?>'</span><span class="p">,</span>
5145
+<a id="__codelineno-0-308" name="__codelineno-0-308"></a> <span class="s2">""</span><span class="p">,</span>
5146
+<a id="__codelineno-0-309" name="__codelineno-0-309"></a> <span class="p">)</span>
5147
+<a id="__codelineno-0-310" name="__codelineno-0-310"></a> <span class="n">xml_content_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xml_content</span><span class="p">)</span>
5148
+<a id="__codelineno-0-311" name="__codelineno-0-311"></a>
5149
+<a id="__codelineno-0-312" name="__codelineno-0-312"></a> <span class="c1"># Concatenate all XML strings</span>
5150
+<a id="__codelineno-0-313" name="__codelineno-0-313"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">xml_content_list</span><span class="p">)</span>
5151
+<a id="__codelineno-0-314" name="__codelineno-0-314"></a> <span class="c1"># Remove top and bottom line breaks</span>
5152
+<a id="__codelineno-0-315" name="__codelineno-0-315"></a> <span class="n">xml_content</span> <span class="o">=</span> <span class="n">xml_content</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
5153
+<a id="__codelineno-0-316" name="__codelineno-0-316"></a>
5154
+<a id="__codelineno-0-317" name="__codelineno-0-317"></a> <span class="k">return</span> <span class="n">xml_content</span>
5155
+<a id="__codelineno-0-318" name="__codelineno-0-318"></a>
5156
+<a id="__codelineno-0-319" name="__codelineno-0-319"></a> <span class="k">def</span> <span class="nf">_delete_rule_from_db</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
5157
+<a id="__codelineno-0-320" name="__codelineno-0-320"></a><span class="w"> </span><span class="sd">"""</span>
5158
+<a id="__codelineno-0-321" name="__codelineno-0-321"></a><span class="sd"> Delete a rule from the `disabled_rules` table.</span>
5159
+<a id="__codelineno-0-322" name="__codelineno-0-322"></a>
5160
+<a id="__codelineno-0-323" name="__codelineno-0-323"></a><span class="sd"> Args:</span>
5161
+<a id="__codelineno-0-324" name="__codelineno-0-324"></a><span class="sd"> rule_id (str): The id of the rule to be deleted.</span>
5162
+<a id="__codelineno-0-325" name="__codelineno-0-325"></a><span class="sd"> """</span>
5163
+<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="n">disabled_rule</span> <span class="o">=</span> <span class="n">DisabledRules</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">filter_by</span><span class="p">(</span><span class="n">rule_id</span><span class="o">=</span><span class="n">rule_id</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
5164
+<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">disabled_rule</span><span class="p">)</span>
5165
+<a id="__codelineno-0-328" name="__codelineno-0-328"></a> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
5166
+<a id="__codelineno-0-329" name="__codelineno-0-329"></a>
5167
+<a id="__codelineno-0-330" name="__codelineno-0-330"></a> <span class="k">def</span> <span class="nf">_put_updated_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
5168
+<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="w"> </span><span class="sd">"""</span>
5169
+<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="sd"> Upload the updated rule to the Wazuh Manager.</span>
5170
+<a id="__codelineno-0-333" name="__codelineno-0-333"></a>
5171
+<a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="sd"> Args:</span>
5172
+<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="sd"> filename (str): The filename containing the rule.</span>
5173
+<a id="__codelineno-0-336" name="__codelineno-0-336"></a><span class="sd"> xml_content (str): The updated rule in XML format.</span>
5174
+<a id="__codelineno-0-337" name="__codelineno-0-337"></a>
5175
+<a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="sd"> Raises:</span>
5176
+<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="sd"> RuntimeError: If the PUT operation fails.</span>
5177
+<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> """</span>
5178
+<a id="__codelineno-0-341" name="__codelineno-0-341"></a> <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span><span class="o">.</span><span class="n">put_request</span><span class="p">(</span>
5179
+<a id="__codelineno-0-342" name="__codelineno-0-342"></a> <span class="sa">f</span><span class="s2">"rules/files/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
5180
+<a id="__codelineno-0-343" name="__codelineno-0-343"></a> <span class="n">xml_content</span><span class="p">,</span>
5181
+<a id="__codelineno-0-344" name="__codelineno-0-344"></a> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">"overwrite"</span><span class="p">:</span> <span class="s2">"true"</span><span class="p">},</span>
5182
+<a id="__codelineno-0-345" name="__codelineno-0-345"></a> <span class="p">)</span>
5183
+<a id="__codelineno-0-346" name="__codelineno-0-346"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">response</span><span class="p">[</span><span class="s2">"success"</span><span class="p">]:</span>
5184
+<a id="__codelineno-0-347" name="__codelineno-0-347"></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Could not PUT rule </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
5185
+</code></pre></div></td></tr></table></div>
5186
+ </details>
5187
+
5188
+
5189
+
5190
+ <div class="doc doc-children">
5191
+
5192
+
5193
+
5194
+
5195
+
5196
+
5197
+
5198
+
5199
+
5200
+<div class="doc doc-object doc-function">
5201
+
5202
+
5203
+
5204
+<h3 id="app.services.WazuhManager.enabled_rule.EnableRuleService.__init__" class="doc doc-heading">
5205
+<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">universal_service</span><span class="p">)</span></code>
5206
+
5207
+</h3>
5208
+
5209
+
5210
+ <div class="doc doc-contents ">
5211
+
5212
+ <p>Initialize an EnableRuleService instance.</p>
5213
+
5214
+ <p><strong>Parameters:</strong></p>
5215
+ <table>
5216
+ <thead>
5217
+ <tr>
5218
+ <th>Name</th>
5219
+ <th>Type</th>
5220
+ <th>Description</th>
5221
+ <th>Default</th>
5222
+ </tr>
5223
+ </thead>
5224
+ <tbody>
5225
+ <tr>
5226
+ <td><code>universal_service</code></td>
5227
+ <td>
5228
+ <code><a class="autorefs autorefs-internal" title="app.services.WazuhManager.universal.UniversalService" href="#app.services.WazuhManager.universal.UniversalService">UniversalService</a></code>
5229
+ </td>
5230
+ <td>
5231
+ <div class="doc-md-description">
5232
+ <p>An instance of the UniversalService.</p>
5233
+ </div>
5234
+ </td>
5235
+ <td>
5236
+ <em>required</em>
5237
+ </td>
5238
+ </tr>
5239
+ </tbody>
5240
+ </table>
5241
+
5242
+ <details class="quote">
5243
+ <summary>Source code in <code>app\services\WazuhManager\enabled_rule.py</code></summary>
5244
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-125">125</a></span>
5245
+<span class="normal"><a href="#__codelineno-0-126">126</a></span>
5246
+<span class="normal"><a href="#__codelineno-0-127">127</a></span>
5247
+<span class="normal"><a href="#__codelineno-0-128">128</a></span>
5248
+<span class="normal"><a href="#__codelineno-0-129">129</a></span>
5249
+<span class="normal"><a href="#__codelineno-0-130">130</a></span>
5250
+<span class="normal"><a href="#__codelineno-0-131">131</a></span>
5251
+<span class="normal"><a href="#__codelineno-0-132">132</a></span>
5252
+<span class="normal"><a href="#__codelineno-0-133">133</a></span>
5253
+<span class="normal"><a href="#__codelineno-0-134">134</a></span>
5254
+<span class="normal"><a href="#__codelineno-0-135">135</a></span>
5255
+<span class="normal"><a href="#__codelineno-0-136">136</a></span>
5256
+<span class="normal"><a href="#__codelineno-0-137">137</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-125" name="__codelineno-0-125"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">universal_service</span><span class="p">:</span> <span class="n">UniversalService</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
5257
+<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">"""</span>
5258
+<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="sd"> Initialize an EnableRuleService instance.</span>
5259
+<a id="__codelineno-0-128" name="__codelineno-0-128"></a>
5260
+<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> Args:</span>
5261
+<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> universal_service (UniversalService): An instance of the UniversalService.</span>
5262
+<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> """</span>
5263
+<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span> <span class="o">=</span> <span class="n">universal_service</span>
5264
+<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span> <span class="o">=</span> <span class="n">universal_service</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
5265
+<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="bp">self</span><span class="o">.</span><span class="n">wazuh_http_requests</span> <span class="o">=</span> <span class="n">WazuhHttpRequests</span><span class="p">(</span>
5266
+<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
5267
+<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth_token</span><span class="p">,</span>
5268
+<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="p">)</span>
5269
+</code></pre></div></td></tr></table></div>
5270
+ </details>
5271
+ </div>
5272
+
5273
+</div>
5274
+
5275
+<div class="doc doc-object doc-function">
5276
+
5277
+
5278
+
5279
+<h3 id="app.services.WazuhManager.enabled_rule.EnableRuleService.enable_rule" class="doc doc-heading">
5280
+<code class="highlight language-python"><span class="n">enable_rule</span><span class="p">(</span><span class="n">request</span><span class="p">)</span></code>
5281
+
5282
+</h3>
5283
+
5284
+
5285
+ <div class="doc doc-contents ">
5286
+
5287
+ <p>Enable a rule in Wazuh Manager.</p>
This file is too large to show in full.