@cryptotaxi247 / CoPilot / commits / 16451238

mkdocs sites

Taylor committed Jul 11, 2023 at 12:42 UTC 164512381e6ce5c2af2e3263ffccb23ec42b851e
7 files changed +2024 -1950
backend/site/agents/index.html
+659 -627
@@ -1346,11 +1346,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1346
1347 <details class="quote">
1348 <summary>Source code in <code>app\routes\agents.py</code></summary>
1349 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-77">77</a></span>
1350 -<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1351 -<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1352 -<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1353 -<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1349 + <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>
1350 <span class="normal"><a href="#__codelineno-0-82">82</a></span>
1351 <span class="normal"><a href="#__codelineno-0-83">83</a></span>
1352 <span class="normal"><a href="#__codelineno-0-84">84</a></span>
@@ -1362,23 +1358,27 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1358 <span class="normal"><a href="#__codelineno-0-90">90</a></span>
1359 <span class="normal"><a href="#__codelineno-0-91">91</a></span>
1360 <span class="normal"><a href="#__codelineno-0-92">92</a></span>
1365 -<span class="normal"><a href="#__codelineno-0-93">93</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/delete&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1366 -<a id="__codelineno-0-78" name="__codelineno-0-78"></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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1367 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1368 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Endpoint to delete an agent.</span>
1369 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> Args:</span>
1370 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> agent_id (str): The ID of the agent to be deleted.</span>
1371 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> Returns:</span>
1372 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> json: A JSON response indicating whether the deletion was successful.</span>
1373 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> &quot;&quot;&quot;</span>
1374 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1375 -<a id="__codelineno-0-87" name="__codelineno-0-87"></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>
1376 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
1377 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
1378 -<a id="__codelineno-0-90" name="__codelineno-0-90"></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>
1379 -<a id="__codelineno-0-91" name="__codelineno-0-91"></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>
1361 +<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1362 +<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1363 +<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1364 +<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1365 +<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">&quot;/agents/&lt;agent_id&gt;/delete&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1366 +<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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1367 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1368 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Endpoint to delete an agent.</span>
1369 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> Args:</span>
1370 +<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>
1371 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
1372 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> json: A JSON response indicating whether the deletion was successful.</span>
1373 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> &quot;&quot;&quot;</span>
1374 +<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>
1375 +<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>
1376 <a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1381 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="n">result</span>
1377 +<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>
1378 +<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>
1379 +<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>
1380 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
1381 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="n">result</span>
1382 </code></pre></div></td></tr></table></div>
1383 </details>
1384 </div>
@@ -1451,29 +1451,29 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1451
1452 <details class="quote">
1453 <summary>Source code in <code>app\routes\agents.py</code></summary>
1454 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-23">23</a></span>
1455 -<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1456 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1457 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1458 -<span class="normal"><a href="#__codelineno-0-27">27</a></span>
1454 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-27">27</a></span>
1455 <span class="normal"><a href="#__codelineno-0-28">28</a></span>
1456 <span class="normal"><a href="#__codelineno-0-29">29</a></span>
1457 <span class="normal"><a href="#__codelineno-0-30">30</a></span>
1458 <span class="normal"><a href="#__codelineno-0-31">31</a></span>
1459 <span class="normal"><a href="#__codelineno-0-32">32</a></span>
1460 <span class="normal"><a href="#__codelineno-0-33">33</a></span>
1465 -<span class="normal"><a href="#__codelineno-0-34">34</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1466 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="k">def</span> <span class="nf">get_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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1467 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1468 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Endpoint to get the details of a specific agent.</span>
1469 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Args:</span>
1470 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> agent_id (str): The ID of the agent to retrieve.</span>
1471 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> Returns:</span>
1472 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> json: A JSON response containing the details of the agent.</span>
1473 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> &quot;&quot;&quot;</span>
1474 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1475 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_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>
1476 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">return</span> <span class="n">agent</span>
1461 +<span class="normal"><a href="#__codelineno-0-34">34</a></span>
1462 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1463 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1464 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1465 +<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-27" name="__codelineno-0-27"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1466 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="k">def</span> <span class="nf">get_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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1467 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1468 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Endpoint to get the details of a specific agent.</span>
1469 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Args:</span>
1470 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> agent_id (str): The ID of the agent to retrieve.</span>
1471 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1472 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> json: A JSON response containing the details of the agent.</span>
1473 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
1474 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1475 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_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>
1476 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">return</span> <span class="n">agent</span>
1477 </code></pre></div></td></tr></table></div>
1478 </details>
1479 </div>
@@ -1546,11 +1546,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1546
1547 <details class="quote">
1548 <summary>Source code in <code>app\routes\agents.py</code></summary>
1549 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1550 -<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1551 -<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1552 -<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1553 -<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1549 + <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>
1550 <span class="normal"><a href="#__codelineno-0-101">101</a></span>
1551 <span class="normal"><a href="#__codelineno-0-102">102</a></span>
1552 <span class="normal"><a href="#__codelineno-0-103">103</a></span>
@@ -1559,20 +1555,28 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1555 <span class="normal"><a href="#__codelineno-0-106">106</a></span>
1556 <span class="normal"><a href="#__codelineno-0-107">107</a></span>
1557 <span class="normal"><a href="#__codelineno-0-108">108</a></span>
1562 -<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-96" name="__codelineno-0-96"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/vulnerabilities&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1563 -<a id="__codelineno-0-97" name="__codelineno-0-97"></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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1564 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1565 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> Endpoint to get the vulnerabilities of a specific agent.</span>
1566 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Args:</span>
1567 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> agent_id (str): The ID of the agent whose vulnerabilities are to be fetched.</span>
1568 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Returns:</span>
1569 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> json: A JSON response containing the vulnerabilities of the agent.</span>
1570 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> &quot;&quot;&quot;</span>
1571 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="n">universal_service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
1572 -<a id="__codelineno-0-106" name="__codelineno-0-106"></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>
1573 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
1574 -<a id="__codelineno-0-108" name="__codelineno-0-108"></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><span class="n">agent_id</span><span class="o">=</span><span class="n">agent_id</span><span class="p">)</span>
1575 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="k">return</span> <span class="n">agent_vulnerabilities</span>
1558 +<span class="normal"><a href="#__codelineno-0-109">109</a></span>
1559 +<span class="normal"><a href="#__codelineno-0-110">110</a></span>
1560 +<span class="normal"><a href="#__codelineno-0-111">111</a></span>
1561 +<span class="normal"><a href="#__codelineno-0-112">112</a></span>
1562 +<span class="normal"><a href="#__codelineno-0-113">113</a></span>
1563 +<span class="normal"><a href="#__codelineno-0-114">114</a></span>
1564 +<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">&quot;/agents/&lt;agent_id&gt;/vulnerabilities&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1565 +<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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1566 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1567 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> Endpoint to get the vulnerabilities of a specific agent.</span>
1568 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Args:</span>
1569 +<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>
1570 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Returns:</span>
1571 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> json: A JSON response containing the vulnerabilities of the agent.</span>
1572 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> &quot;&quot;&quot;</span>
1573 +<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>
1574 +<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>
1575 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a>
1576 +<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>
1577 +<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>
1578 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="p">)</span>
1579 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">return</span> <span class="n">agent_vulnerabilities</span>
1580 </code></pre></div></td></tr></table></div>
1581 </details>
1582 </div>
@@ -1617,25 +1621,25 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1621
1622 <details class="quote">
1623 <summary>Source code in <code>app\routes\agents.py</code></summary>
1620 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-11">11</a></span>
1621 -<span class="normal"><a href="#__codelineno-0-12">12</a></span>
1622 -<span class="normal"><a href="#__codelineno-0-13">13</a></span>
1623 -<span class="normal"><a href="#__codelineno-0-14">14</a></span>
1624 -<span class="normal"><a href="#__codelineno-0-15">15</a></span>
1624 + <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>
1625 <span class="normal"><a href="#__codelineno-0-16">16</a></span>
1626 <span class="normal"><a href="#__codelineno-0-17">17</a></span>
1627 <span class="normal"><a href="#__codelineno-0-18">18</a></span>
1628 <span class="normal"><a href="#__codelineno-0-19">19</a></span>
1629 -<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-11" name="__codelineno-0-11"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1630 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="k">def</span> <span class="nf">get_agents</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1631 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1632 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> Endpoint to get a list of all agents. It processes each agent and returns the results.</span>
1633 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Returns:</span>
1634 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> json: A JSON response containing the list of all available agents along with their connection verification status.</span>
1635 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
1636 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1637 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="n">agents</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_all_agents</span><span class="p">()</span>
1638 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">return</span> <span class="n">agents</span>
1629 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1630 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1631 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1632 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1633 +<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-15" name="__codelineno-0-15"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1634 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="k">def</span> <span class="nf">get_agents</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1635 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1636 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Endpoint to get a list of all agents. It processes each agent and returns the results.</span>
1637 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> Returns:</span>
1638 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> json: A JSON response containing the list of all available agents along with their connection verification status.</span>
1639 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
1640 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1641 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">agents</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_all_agents</span><span class="p">()</span>
1642 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">agents</span>
1643 </code></pre></div></td></tr></table></div>
1644 </details>
1645 </div>
@@ -1708,29 +1712,29 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1712
1713 <details class="quote">
1714 <summary>Source code in <code>app\routes\agents.py</code></summary>
1711 - <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>
1712 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1713 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1714 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1715 -<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1715 + <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>
1716 <span class="normal"><a href="#__codelineno-0-42">42</a></span>
1717 <span class="normal"><a href="#__codelineno-0-43">43</a></span>
1718 <span class="normal"><a href="#__codelineno-0-44">44</a></span>
1719 <span class="normal"><a href="#__codelineno-0-45">45</a></span>
1720 <span class="normal"><a href="#__codelineno-0-46">46</a></span>
1721 <span class="normal"><a href="#__codelineno-0-47">47</a></span>
1722 -<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-37" name="__codelineno-0-37"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/critical&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1723 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="k">def</span> <span class="nf">mark_as_critical</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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1724 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1725 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Endpoint to mark an agent as critical.</span>
1726 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
1727 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> agent_id (str): The ID of the agent to mark as critical.</span>
1728 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
1729 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> json: A JSON response containing the updated agent information after being marked as critical.</span>
1730 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;&quot;&quot;</span>
1731 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1732 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">mark_agent_as_critical</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>
1733 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="n">result</span>
1722 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
1723 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
1724 +<span class="normal"><a href="#__codelineno-0-50">50</a></span>
1725 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1726 +<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-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">&quot;/agents/&lt;agent_id&gt;/critical&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1727 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="k">def</span> <span class="nf">mark_as_critical</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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1728 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1729 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Endpoint to mark an agent as critical.</span>
1730 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Args:</span>
1731 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> agent_id (str): The ID of the agent to mark as critical.</span>
1732 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Returns:</span>
1733 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> json: A JSON response containing the updated agent information after being marked as critical.</span>
1734 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> &quot;&quot;&quot;</span>
1735 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1736 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">mark_agent_as_critical</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>
1737 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="n">result</span>
1738 </code></pre></div></td></tr></table></div>
1739 </details>
1740 </div>
@@ -1775,25 +1779,25 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1779
1780 <details class="quote">
1781 <summary>Source code in <code>app\routes\agents.py</code></summary>
1778 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-65">65</a></span>
1779 -<span class="normal"><a href="#__codelineno-0-66">66</a></span>
1780 -<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1781 -<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1782 -<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1782 + <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>
1783 <span class="normal"><a href="#__codelineno-0-70">70</a></span>
1784 <span class="normal"><a href="#__codelineno-0-71">71</a></span>
1785 <span class="normal"><a href="#__codelineno-0-72">72</a></span>
1786 <span class="normal"><a href="#__codelineno-0-73">73</a></span>
1787 -<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-65" name="__codelineno-0-65"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/sync&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1788 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="k">def</span> <span class="nf">sync_agents</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1789 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1790 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> Endpoint to synchronize all agents.</span>
1791 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> Returns:</span>
1792 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> json: A JSON response containing the updated information of all synchronized agents.</span>
1793 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> &quot;&quot;&quot;</span>
1794 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentSyncService</span><span class="p">()</span>
1795 -<a id="__codelineno-0-73" name="__codelineno-0-73"></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>
1796 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
1787 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1788 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1789 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1790 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1791 +<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">&quot;/agents/sync&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1792 +<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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1793 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1794 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> Endpoint to synchronize all agents.</span>
1795 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> Returns:</span>
1796 +<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>
1797 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> &quot;&quot;&quot;</span>
1798 +<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>
1799 +<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>
1800 +<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>
1801 </code></pre></div></td></tr></table></div>
1802 </details>
1803 </div>
@@ -1866,29 +1870,29 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1870
1871 <details class="quote">
1872 <summary>Source code in <code>app\routes\agents.py</code></summary>
1869 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-51">51</a></span>
1870 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1871 -<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1872 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1873 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1873 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-55">55</a></span>
1874 <span class="normal"><a href="#__codelineno-0-56">56</a></span>
1875 <span class="normal"><a href="#__codelineno-0-57">57</a></span>
1876 <span class="normal"><a href="#__codelineno-0-58">58</a></span>
1877 <span class="normal"><a href="#__codelineno-0-59">59</a></span>
1878 <span class="normal"><a href="#__codelineno-0-60">60</a></span>
1879 <span class="normal"><a href="#__codelineno-0-61">61</a></span>
1880 -<span class="normal"><a href="#__codelineno-0-62">62</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/noncritical&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1881 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="k">def</span> <span class="nf">unmark_agent_critical</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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1882 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1883 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Endpoint to unmark an agent as critical.</span>
1884 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> Args:</span>
1885 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> agent_id (str): The ID of the agent to unmark as critical.</span>
1886 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Returns:</span>
1887 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> json: A JSON response containing the updated agent information after being unmarked as critical.</span>
1888 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> &quot;&quot;&quot;</span>
1889 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1890 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">mark_agent_as_non_critical</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>
1891 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">return</span> <span class="n">result</span>
1880 +<span class="normal"><a href="#__codelineno-0-62">62</a></span>
1881 +<span class="normal"><a href="#__codelineno-0-63">63</a></span>
1882 +<span class="normal"><a href="#__codelineno-0-64">64</a></span>
1883 +<span class="normal"><a href="#__codelineno-0-65">65</a></span>
1884 +<span class="normal"><a href="#__codelineno-0-66">66</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/agents/&lt;agent_id&gt;/noncritical&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1885 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">def</span> <span class="nf">unmark_agent_critical</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">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
1886 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1887 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Endpoint to unmark an agent as critical.</span>
1888 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Args:</span>
1889 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> agent_id (str): The ID of the agent to unmark as critical.</span>
1890 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns:</span>
1891 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> json: A JSON response containing the updated agent information after being unmarked as critical.</span>
1892 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &quot;&quot;&quot;</span>
1893 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
1894 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">mark_agent_as_non_critical</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>
1895 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">return</span> <span class="n">result</span>
1896 </code></pre></div></td></tr></table></div>
1897 </details>
1898 </div>
@@ -1941,11 +1945,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
1945
1946 <details class="quote">
1947 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
1944 - <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>
1945 -<span class="normal"><a href="#__codelineno-0-18"> 18</a></span>
1946 -<span class="normal"><a href="#__codelineno-0-19"> 19</a></span>
1947 -<span class="normal"><a href="#__codelineno-0-20"> 20</a></span>
1948 -<span class="normal"><a href="#__codelineno-0-21"> 21</a></span>
1948 + <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>
1949 <span class="normal"><a href="#__codelineno-0-22"> 22</a></span>
1950 <span class="normal"><a href="#__codelineno-0-23"> 23</a></span>
1951 <span class="normal"><a href="#__codelineno-0-24"> 24</a></span>
@@ -2087,153 +2087,157 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2087 <span class="normal"><a href="#__codelineno-0-160">160</a></span>
2088 <span class="normal"><a href="#__codelineno-0-161">161</a></span>
2089 <span class="normal"><a href="#__codelineno-0-162">162</a></span>
2090 -<span class="normal"><a href="#__codelineno-0-163">163</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">AgentService</span><span class="p">:</span>
2091 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2092 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> A service class that encapsulates the logic for managing agents.</span>
2093 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> &quot;&quot;&quot;</span>
2094 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
2095 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="nf">get_all_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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>
2096 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2097 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Retrieves all agents from the database.</span>
2090 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2091 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2092 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2093 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2094 +<span class="normal"><a href="#__codelineno-0-167">167</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">class</span> <span class="nc">AgentService</span><span class="p">:</span>
2095 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2096 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> A service class that encapsulates the logic for managing agents.</span>
2097 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> &quot;&quot;&quot;</span>
2098 <a id="__codelineno-0-25" name="__codelineno-0-25"></a>
2099 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Returns:</span>
2100 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> List[dict]: A list of dictionaries where each dictionary represents the serialized data of an agent.</span>
2101 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
2102 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">agents</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
2103 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">return</span> <span class="n">agent_metadatas_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agents</span><span class="p">)</span>
2104 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
2105 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">def</span> <span class="nf">get_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">-&gt;</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>
2106 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2107 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Retrieves a specific agent from the database using its ID.</span>
2099 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">def</span> <span class="nf">get_all_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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>
2100 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2101 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Retrieves all agents from the database.</span>
2102 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
2103 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Returns:</span>
2104 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> List[dict]: A list of dictionaries where each dictionary represents the serialized data of an agent.</span>
2105 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> &quot;&quot;&quot;</span>
2106 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">agents</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
2107 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">return</span> <span class="n">agent_metadatas_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agents</span><span class="p">)</span>
2108 <a id="__codelineno-0-35" name="__codelineno-0-35"></a>
2109 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Args:</span>
2110 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> agent_id (str): The ID of the agent to retrieve.</span>
2111 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
2112 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Returns:</span>
2113 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> dict: A dictionary representing the serialized data of the agent if found, otherwise a message indicating</span>
2114 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> that the agent was not found.</span>
2115 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> &quot;&quot;&quot;</span>
2116 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2117 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2118 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">}</span>
2119 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2120 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
2121 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">def</span> <span class="nf">mark_agent_as_critical</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">-&gt;</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>
2122 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2123 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Marks a specific agent as critical.</span>
2109 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="k">def</span> <span class="nf">get_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">-&gt;</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>
2110 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2111 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Retrieves a specific agent from the database using its ID.</span>
2112 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2113 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2114 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> agent_id (str): The ID of the agent to retrieve.</span>
2115 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
2116 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
2117 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary representing the serialized data of the agent if found, otherwise a message indicating</span>
2118 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> that the agent was not found.</span>
2119 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
2120 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2121 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2122 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">}</span>
2123 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2124 <a id="__codelineno-0-51" name="__codelineno-0-51"></a>
2125 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
2126 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> agent_id (str): The ID of the agent to mark as critical.</span>
2127 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2128 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> Returns:</span>
2129 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2130 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> message.</span>
2131 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
2132 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2133 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
2134 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2135 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2136 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
2137 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_critical</span><span class="p">()</span>
2138 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2139 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
2140 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span>
2141 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as critical&quot;</span><span class="p">,</span>
2142 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2143 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="p">}</span>
2144 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2145 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
2146 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">def</span> <span class="nf">mark_agent_as_non_critical</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">-&gt;</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>
2147 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2148 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Marks a specific agent as non-critical.</span>
2125 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">def</span> <span class="nf">mark_agent_as_critical</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">-&gt;</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>
2126 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2127 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Marks a specific agent as critical.</span>
2128 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2129 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Args:</span>
2130 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> agent_id (str): The ID of the agent to mark as critical.</span>
2131 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
2132 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Returns:</span>
2133 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2134 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> message.</span>
2135 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
2136 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2137 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
2138 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2139 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2140 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
2141 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_critical</span><span class="p">()</span>
2142 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2143 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
2144 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span>
2145 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as critical&quot;</span><span class="p">,</span>
2146 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2147 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">}</span>
2148 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2149 <a id="__codelineno-0-76" name="__codelineno-0-76"></a>
2150 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Args:</span>
2151 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> agent_id (str): The ID of the agent to mark as non-critical.</span>
2152 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
2153 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
2154 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2155 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> message.</span>
2156 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> &quot;&quot;&quot;</span>
2157 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2158 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2159 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2160 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2161 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
2162 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_non_critical</span><span class="p">()</span>
2163 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2164 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
2165 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="p">{</span>
2166 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as non-critical&quot;</span><span class="p">,</span>
2167 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2168 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="p">}</span>
2169 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as non-critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2170 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2171 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">def</span> <span class="nf">create_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent</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">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">AgentMetadata</span><span class="p">]:</span>
2172 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2173 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Creates a new agent in the database.</span>
2150 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">def</span> <span class="nf">mark_agent_as_non_critical</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">-&gt;</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>
2151 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2152 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Marks a specific agent as non-critical.</span>
2153 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a>
2154 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> Args:</span>
2155 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> agent_id (str): The ID of the agent to mark as non-critical.</span>
2156 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
2157 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Returns:</span>
2158 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2159 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> message.</span>
2160 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> &quot;&quot;&quot;</span>
2161 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2162 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
2163 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2164 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2165 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
2166 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_non_critical</span><span class="p">()</span>
2167 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2168 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
2169 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="p">{</span>
2170 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as non-critical&quot;</span><span class="p">,</span>
2171 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2172 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="p">}</span>
2173 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as non-critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2174 <a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2175 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Args:</span>
2176 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> agent (dict): A dictionary containing the information of an agent.</span>
2177 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
2178 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Returns:</span>
2179 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> The agent object if the agent was successfully created, None otherwise.</span>
2180 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> &quot;&quot;&quot;</span>
2181 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">try</span><span class="p">:</span>
2182 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2183 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_last_seen&quot;</span><span class="p">],</span>
2184 -<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2185 -<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="p">)</span> <span class="c1"># Convert to datetime</span>
2186 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
2187 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
2188 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="sa">f</span><span class="s2">&quot;Invalid format for agent_last_seen: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;agent_last_seen&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. Fixing...&quot;</span><span class="p">,</span>
2189 -<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="p">)</span>
2190 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2191 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">&quot;1970-01-01T00:00:00+00:00&quot;</span><span class="p">,</span>
2192 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2193 -<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">)</span> <span class="c1"># Use the epoch time as default</span>
2194 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
2195 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">agent_metadata</span> <span class="o">=</span> <span class="n">AgentMetadata</span><span class="p">(</span>
2196 -<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">agent_id</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_id&quot;</span><span class="p">],</span>
2197 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">hostname</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_name&quot;</span><span class="p">],</span>
2198 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="n">ip_address</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_ip&quot;</span><span class="p">],</span>
2199 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">os</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_os&quot;</span><span class="p">],</span>
2200 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">last_seen</span><span class="o">=</span><span class="n">agent_last_seen</span><span class="p">,</span> <span class="c1"># Use the datetime object</span>
2201 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">critical_asset</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2202 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="p">)</span>
2203 -<a id="__codelineno-0-130" name="__codelineno-0-130"></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">&quot;Agent metadata: </span><span class="si">{</span><span class="n">agent_metadata</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2204 -<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2205 -<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="k">try</span><span class="p">:</span>
2206 -<a id="__codelineno-0-133" name="__codelineno-0-133"></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">agent_metadata</span><span class="p">)</span>
2207 -<a id="__codelineno-0-134" name="__codelineno-0-134"></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>
2208 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">return</span> <span class="n">agent_metadata</span>
2209 -<a id="__codelineno-0-136" name="__codelineno-0-136"></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>
2210 -<a id="__codelineno-0-137" name="__codelineno-0-137"></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">&quot;Failed to create agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2211 -<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">return</span> <span class="kc">None</span>
2212 -<a id="__codelineno-0-139" name="__codelineno-0-139"></a>
2213 -<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="k">def</span> <span class="nf">delete_agent_db</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">-&gt;</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>
2214 -<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2215 -<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="sd"> Deletes a specific agent from the database using its ID.</span>
2175 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">def</span> <span class="nf">create_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent</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">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">AgentMetadata</span><span class="p">]:</span>
2176 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2177 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Creates a new agent in the database.</span>
2178 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2179 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Args:</span>
2180 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> agent (dict): A dictionary containing the information of an agent.</span>
2181 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
2182 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Returns:</span>
2183 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> The agent object if the agent was successfully created, None otherwise.</span>
2184 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> &quot;&quot;&quot;</span>
2185 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">try</span><span class="p">:</span>
2186 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2187 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_last_seen&quot;</span><span class="p">],</span>
2188 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2189 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="p">)</span> <span class="c1"># Convert to datetime</span>
2190 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
2191 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
2192 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="sa">f</span><span class="s2">&quot;Invalid format for agent_last_seen: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;agent_last_seen&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. Fixing...&quot;</span><span class="p">,</span>
2193 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">)</span>
2194 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2195 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="s2">&quot;1970-01-01T00:00:00+00:00&quot;</span><span class="p">,</span>
2196 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2197 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="p">)</span> <span class="c1"># Use the epoch time as default</span>
2198 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
2199 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">agent_metadata</span> <span class="o">=</span> <span class="n">AgentMetadata</span><span class="p">(</span>
2200 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">agent_id</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_id&quot;</span><span class="p">],</span>
2201 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">hostname</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_name&quot;</span><span class="p">],</span>
2202 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="n">ip_address</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_ip&quot;</span><span class="p">],</span>
2203 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="n">os</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_os&quot;</span><span class="p">],</span>
2204 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">last_seen</span><span class="o">=</span><span class="n">agent_last_seen</span><span class="p">,</span> <span class="c1"># Use the datetime object</span>
2205 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">critical_asset</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2206 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="p">)</span>
2207 +<a id="__codelineno-0-134" name="__codelineno-0-134"></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">&quot;Agent metadata: </span><span class="si">{</span><span class="n">agent_metadata</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2208 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
2209 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">try</span><span class="p">:</span>
2210 +<a id="__codelineno-0-137" name="__codelineno-0-137"></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">agent_metadata</span><span class="p">)</span>
2211 +<a id="__codelineno-0-138" name="__codelineno-0-138"></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>
2212 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">return</span> <span class="n">agent_metadata</span>
2213 +<a id="__codelineno-0-140" name="__codelineno-0-140"></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>
2214 +<a id="__codelineno-0-141" name="__codelineno-0-141"></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">&quot;Failed to create agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2215 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">return</span> <span class="kc">None</span>
2216 <a id="__codelineno-0-143" name="__codelineno-0-143"></a>
2217 -<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> Args:</span>
2218 -<a id="__codelineno-0-145" name="__codelineno-0-145"></a><span class="sd"> agent_id (str): The ID of the agent to delete.</span>
2219 -<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
2220 -<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Returns:</span>
2221 -<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2222 -<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> message.</span>
2223 -<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> &quot;&quot;&quot;</span>
2224 -<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2225 -<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2226 -<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2227 -<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="k">try</span><span class="p">:</span>
2228 -<a id="__codelineno-0-155" name="__codelineno-0-155"></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">agent</span><span class="p">)</span>
2229 -<a id="__codelineno-0-156" name="__codelineno-0-156"></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>
2230 -<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> deleted&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2231 -<a id="__codelineno-0-158" name="__codelineno-0-158"></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>
2232 -<a id="__codelineno-0-159" name="__codelineno-0-159"></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">&quot;Failed to delete agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2233 -<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="k">return</span> <span class="p">{</span>
2234 -<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to delete agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2235 -<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2236 -<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="p">}</span>
2217 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">def</span> <span class="nf">delete_agent_db</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">-&gt;</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>
2218 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2219 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Deletes a specific agent from the database using its ID.</span>
2220 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a>
2221 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> Args:</span>
2222 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> agent_id (str): The ID of the agent to delete.</span>
2223 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
2224 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> Returns:</span>
2225 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2226 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> message.</span>
2227 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> &quot;&quot;&quot;</span>
2228 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2229 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2230 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2231 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="k">try</span><span class="p">:</span>
2232 +<a id="__codelineno-0-159" name="__codelineno-0-159"></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">agent</span><span class="p">)</span>
2233 +<a id="__codelineno-0-160" name="__codelineno-0-160"></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>
2234 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> deleted&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2235 +<a id="__codelineno-0-162" name="__codelineno-0-162"></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>
2236 +<a id="__codelineno-0-163" name="__codelineno-0-163"></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">&quot;Failed to delete agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2237 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">return</span> <span class="p">{</span>
2238 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to delete agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2239 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2240 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">}</span>
2241 </code></pre></div></td></tr></table></div>
2242 </details>
2243
@@ -2315,11 +2319,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2319
2320 <details class="quote">
2321 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2318 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2319 -<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2320 -<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2321 -<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2322 -<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2322 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-102">102</a></span>
2323 <span class="normal"><a href="#__codelineno-0-103">103</a></span>
2324 <span class="normal"><a href="#__codelineno-0-104">104</a></span>
2325 <span class="normal"><a href="#__codelineno-0-105">105</a></span>
@@ -2355,47 +2355,51 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2355 <span class="normal"><a href="#__codelineno-0-135">135</a></span>
2356 <span class="normal"><a href="#__codelineno-0-136">136</a></span>
2357 <span class="normal"><a href="#__codelineno-0-137">137</a></span>
2358 -<span class="normal"><a href="#__codelineno-0-138">138</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="k">def</span> <span class="nf">create_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent</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">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">AgentMetadata</span><span class="p">]:</span>
2359 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2360 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Creates a new agent in the database.</span>
2361 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2362 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Args:</span>
2363 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> agent (dict): A dictionary containing the information of an agent.</span>
2364 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
2365 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Returns:</span>
2366 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> The agent object if the agent was successfully created, None otherwise.</span>
2367 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> &quot;&quot;&quot;</span>
2368 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">try</span><span class="p">:</span>
2369 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2370 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_last_seen&quot;</span><span class="p">],</span>
2371 -<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2372 -<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="p">)</span> <span class="c1"># Convert to datetime</span>
2373 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
2374 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
2375 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="sa">f</span><span class="s2">&quot;Invalid format for agent_last_seen: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;agent_last_seen&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. Fixing...&quot;</span><span class="p">,</span>
2376 -<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="p">)</span>
2377 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2378 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">&quot;1970-01-01T00:00:00+00:00&quot;</span><span class="p">,</span>
2379 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2380 -<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">)</span> <span class="c1"># Use the epoch time as default</span>
2381 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
2382 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">agent_metadata</span> <span class="o">=</span> <span class="n">AgentMetadata</span><span class="p">(</span>
2383 -<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">agent_id</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_id&quot;</span><span class="p">],</span>
2384 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">hostname</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_name&quot;</span><span class="p">],</span>
2385 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="n">ip_address</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_ip&quot;</span><span class="p">],</span>
2386 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">os</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_os&quot;</span><span class="p">],</span>
2387 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">last_seen</span><span class="o">=</span><span class="n">agent_last_seen</span><span class="p">,</span> <span class="c1"># Use the datetime object</span>
2388 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">critical_asset</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2389 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="p">)</span>
2390 -<a id="__codelineno-0-130" name="__codelineno-0-130"></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">&quot;Agent metadata: </span><span class="si">{</span><span class="n">agent_metadata</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2391 -<a id="__codelineno-0-131" name="__codelineno-0-131"></a>
2392 -<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="k">try</span><span class="p">:</span>
2393 -<a id="__codelineno-0-133" name="__codelineno-0-133"></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">agent_metadata</span><span class="p">)</span>
2394 -<a id="__codelineno-0-134" name="__codelineno-0-134"></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>
2395 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">return</span> <span class="n">agent_metadata</span>
2396 -<a id="__codelineno-0-136" name="__codelineno-0-136"></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>
2397 -<a id="__codelineno-0-137" name="__codelineno-0-137"></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">&quot;Failed to create agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2398 -<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">return</span> <span class="kc">None</span>
2358 +<span class="normal"><a href="#__codelineno-0-138">138</a></span>
2359 +<span class="normal"><a href="#__codelineno-0-139">139</a></span>
2360 +<span class="normal"><a href="#__codelineno-0-140">140</a></span>
2361 +<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2362 +<span class="normal"><a href="#__codelineno-0-142">142</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="k">def</span> <span class="nf">create_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agent</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">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">AgentMetadata</span><span class="p">]:</span>
2363 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2364 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Creates a new agent in the database.</span>
2365 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2366 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Args:</span>
2367 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> agent (dict): A dictionary containing the information of an agent.</span>
2368 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a>
2369 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> Returns:</span>
2370 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> The agent object if the agent was successfully created, None otherwise.</span>
2371 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> &quot;&quot;&quot;</span>
2372 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">try</span><span class="p">:</span>
2373 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2374 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_last_seen&quot;</span><span class="p">],</span>
2375 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2376 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="p">)</span> <span class="c1"># Convert to datetime</span>
2377 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
2378 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
2379 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="sa">f</span><span class="s2">&quot;Invalid format for agent_last_seen: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;agent_last_seen&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. Fixing...&quot;</span><span class="p">,</span>
2380 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">)</span>
2381 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">agent_last_seen</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span>
2382 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="s2">&quot;1970-01-01T00:00:00+00:00&quot;</span><span class="p">,</span>
2383 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S+00:00&quot;</span><span class="p">,</span>
2384 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="p">)</span> <span class="c1"># Use the epoch time as default</span>
2385 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
2386 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">agent_metadata</span> <span class="o">=</span> <span class="n">AgentMetadata</span><span class="p">(</span>
2387 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">agent_id</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_id&quot;</span><span class="p">],</span>
2388 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">hostname</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_name&quot;</span><span class="p">],</span>
2389 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="n">ip_address</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_ip&quot;</span><span class="p">],</span>
2390 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="n">os</span><span class="o">=</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_os&quot;</span><span class="p">],</span>
2391 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="n">last_seen</span><span class="o">=</span><span class="n">agent_last_seen</span><span class="p">,</span> <span class="c1"># Use the datetime object</span>
2392 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="n">critical_asset</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2393 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="p">)</span>
2394 +<a id="__codelineno-0-134" name="__codelineno-0-134"></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">&quot;Agent metadata: </span><span class="si">{</span><span class="n">agent_metadata</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2395 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a>
2396 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="k">try</span><span class="p">:</span>
2397 +<a id="__codelineno-0-137" name="__codelineno-0-137"></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">agent_metadata</span><span class="p">)</span>
2398 +<a id="__codelineno-0-138" name="__codelineno-0-138"></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>
2399 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">return</span> <span class="n">agent_metadata</span>
2400 +<a id="__codelineno-0-140" name="__codelineno-0-140"></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>
2401 +<a id="__codelineno-0-141" name="__codelineno-0-141"></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">&quot;Failed to create agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2402 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="k">return</span> <span class="kc">None</span>
2403 </code></pre></div></td></tr></table></div>
2404 </details>
2405 </div>
@@ -2478,11 +2482,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2482
2483 <details class="quote">
2484 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2481 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-140">140</a></span>
2482 -<span class="normal"><a href="#__codelineno-0-141">141</a></span>
2483 -<span class="normal"><a href="#__codelineno-0-142">142</a></span>
2484 -<span class="normal"><a href="#__codelineno-0-143">143</a></span>
2485 -<span class="normal"><a href="#__codelineno-0-144">144</a></span>
2485 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-144">144</a></span>
2486 <span class="normal"><a href="#__codelineno-0-145">145</a></span>
2487 <span class="normal"><a href="#__codelineno-0-146">146</a></span>
2488 <span class="normal"><a href="#__codelineno-0-147">147</a></span>
@@ -2501,30 +2501,34 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2501 <span class="normal"><a href="#__codelineno-0-160">160</a></span>
2502 <span class="normal"><a href="#__codelineno-0-161">161</a></span>
2503 <span class="normal"><a href="#__codelineno-0-162">162</a></span>
2504 -<span class="normal"><a href="#__codelineno-0-163">163</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-140" name="__codelineno-0-140"></a><span class="k">def</span> <span class="nf">delete_agent_db</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">-&gt;</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>
2505 -<a id="__codelineno-0-141" name="__codelineno-0-141"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2506 -<a id="__codelineno-0-142" name="__codelineno-0-142"></a><span class="sd"> Deletes a specific agent from the database using its ID.</span>
2507 -<a id="__codelineno-0-143" name="__codelineno-0-143"></a>
2508 -<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="sd"> Args:</span>
2509 -<a id="__codelineno-0-145" name="__codelineno-0-145"></a><span class="sd"> agent_id (str): The ID of the agent to delete.</span>
2510 -<a id="__codelineno-0-146" name="__codelineno-0-146"></a>
2511 -<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> Returns:</span>
2512 -<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2513 -<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> message.</span>
2514 -<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="sd"> &quot;&quot;&quot;</span>
2515 -<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2516 -<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2517 -<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2518 -<a id="__codelineno-0-154" name="__codelineno-0-154"></a> <span class="k">try</span><span class="p">:</span>
2519 -<a id="__codelineno-0-155" name="__codelineno-0-155"></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">agent</span><span class="p">)</span>
2520 -<a id="__codelineno-0-156" name="__codelineno-0-156"></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>
2521 -<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> deleted&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2522 -<a id="__codelineno-0-158" name="__codelineno-0-158"></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>
2523 -<a id="__codelineno-0-159" name="__codelineno-0-159"></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">&quot;Failed to delete agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2524 -<a id="__codelineno-0-160" name="__codelineno-0-160"></a> <span class="k">return</span> <span class="p">{</span>
2525 -<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to delete agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2526 -<a id="__codelineno-0-162" name="__codelineno-0-162"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2527 -<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="p">}</span>
2504 +<span class="normal"><a href="#__codelineno-0-163">163</a></span>
2505 +<span class="normal"><a href="#__codelineno-0-164">164</a></span>
2506 +<span class="normal"><a href="#__codelineno-0-165">165</a></span>
2507 +<span class="normal"><a href="#__codelineno-0-166">166</a></span>
2508 +<span class="normal"><a href="#__codelineno-0-167">167</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="k">def</span> <span class="nf">delete_agent_db</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">-&gt;</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>
2509 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2510 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Deletes a specific agent from the database using its ID.</span>
2511 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a>
2512 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> Args:</span>
2513 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a><span class="sd"> agent_id (str): The ID of the agent to delete.</span>
2514 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a>
2515 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> Returns:</span>
2516 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2517 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> message.</span>
2518 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> &quot;&quot;&quot;</span>
2519 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2520 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2521 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2522 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a> <span class="k">try</span><span class="p">:</span>
2523 +<a id="__codelineno-0-159" name="__codelineno-0-159"></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">agent</span><span class="p">)</span>
2524 +<a id="__codelineno-0-160" name="__codelineno-0-160"></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>
2525 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> deleted&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2526 +<a id="__codelineno-0-162" name="__codelineno-0-162"></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>
2527 +<a id="__codelineno-0-163" name="__codelineno-0-163"></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">&quot;Failed to delete agent: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2528 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="k">return</span> <span class="p">{</span>
2529 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Failed to delete agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2530 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2531 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="p">}</span>
2532 </code></pre></div></td></tr></table></div>
2533 </details>
2534 </div>
@@ -2607,11 +2611,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2611
2612 <details class="quote">
2613 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2610 - <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>
2611 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2612 -<span class="normal"><a href="#__codelineno-0-34">34</a></span>
2613 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
2614 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
2614 + <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>
2615 <span class="normal"><a href="#__codelineno-0-37">37</a></span>
2616 <span class="normal"><a href="#__codelineno-0-38">38</a></span>
2617 <span class="normal"><a href="#__codelineno-0-39">39</a></span>
@@ -2621,21 +2621,25 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2621 <span class="normal"><a href="#__codelineno-0-43">43</a></span>
2622 <span class="normal"><a href="#__codelineno-0-44">44</a></span>
2623 <span class="normal"><a href="#__codelineno-0-45">45</a></span>
2624 -<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-32" name="__codelineno-0-32"></a><span class="k">def</span> <span class="nf">get_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">-&gt;</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>
2625 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2626 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Retrieves a specific agent from the database using its ID.</span>
2627 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a>
2628 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> Args:</span>
2629 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> agent_id (str): The ID of the agent to retrieve.</span>
2630 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
2631 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Returns:</span>
2632 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> dict: A dictionary representing the serialized data of the agent if found, otherwise a message indicating</span>
2633 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> that the agent was not found.</span>
2634 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> &quot;&quot;&quot;</span>
2635 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2636 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2637 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">}</span>
2638 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="k">return</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2624 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
2625 +<span class="normal"><a href="#__codelineno-0-47">47</a></span>
2626 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2627 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2628 +<span class="normal"><a href="#__codelineno-0-50">50</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="nf">get_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">-&gt;</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>
2629 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2630 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> Retrieves a specific agent from the database using its ID.</span>
2631 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a>
2632 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Args:</span>
2633 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> agent_id (str): The ID of the agent to retrieve.</span>
2634 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
2635 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
2636 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary representing the serialized data of the agent if found, otherwise a message indicating</span>
2637 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> that the agent was not found.</span>
2638 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
2639 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2640 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2641 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent with ID </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">}</span>
2642 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2643 </code></pre></div></td></tr></table></div>
2644 </details>
2645 </div>
@@ -2680,23 +2684,23 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2684
2685 <details class="quote">
2686 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2683 - <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>
2684 -<span class="normal"><a href="#__codelineno-0-23">23</a></span>
2685 -<span class="normal"><a href="#__codelineno-0-24">24</a></span>
2686 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
2687 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
2687 + <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>
2688 <span class="normal"><a href="#__codelineno-0-27">27</a></span>
2689 <span class="normal"><a href="#__codelineno-0-28">28</a></span>
2690 <span class="normal"><a href="#__codelineno-0-29">29</a></span>
2691 -<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-22" name="__codelineno-0-22"></a><span class="k">def</span> <span class="nf">get_all_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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>
2692 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2693 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="sd"> Retrieves all agents from the database.</span>
2694 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
2695 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Returns:</span>
2696 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> List[dict]: A list of dictionaries where each dictionary represents the serialized data of an agent.</span>
2697 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
2698 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">agents</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
2699 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">return</span> <span class="n">agent_metadatas_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agents</span><span class="p">)</span>
2691 +<span class="normal"><a href="#__codelineno-0-30">30</a></span>
2692 +<span class="normal"><a href="#__codelineno-0-31">31</a></span>
2693 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
2694 +<span class="normal"><a href="#__codelineno-0-33">33</a></span>
2695 +<span class="normal"><a href="#__codelineno-0-34">34</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="nf">get_all_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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>
2696 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2697 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Retrieves all agents from the database.</span>
2698 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
2699 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Returns:</span>
2700 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> List[dict]: A list of dictionaries where each dictionary represents the serialized data of an agent.</span>
2701 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> &quot;&quot;&quot;</span>
2702 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">agents</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
2703 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">return</span> <span class="n">agent_metadatas_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agents</span><span class="p">)</span>
2704 </code></pre></div></td></tr></table></div>
2705 </details>
2706 </div>
@@ -2779,11 +2783,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2783
2784 <details class="quote">
2785 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2782 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-48">48</a></span>
2783 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2784 -<span class="normal"><a href="#__codelineno-0-50">50</a></span>
2785 -<span class="normal"><a href="#__codelineno-0-51">51</a></span>
2786 -<span class="normal"><a href="#__codelineno-0-52">52</a></span>
2786 + <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>
2787 <span class="normal"><a href="#__codelineno-0-53">53</a></span>
2788 <span class="normal"><a href="#__codelineno-0-54">54</a></span>
2789 <span class="normal"><a href="#__codelineno-0-55">55</a></span>
@@ -2802,30 +2802,34 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2802 <span class="normal"><a href="#__codelineno-0-68">68</a></span>
2803 <span class="normal"><a href="#__codelineno-0-69">69</a></span>
2804 <span class="normal"><a href="#__codelineno-0-70">70</a></span>
2805 -<span class="normal"><a href="#__codelineno-0-71">71</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="k">def</span> <span class="nf">mark_agent_as_critical</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">-&gt;</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>
2806 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2807 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Marks a specific agent as critical.</span>
2808 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
2809 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Args:</span>
2810 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> agent_id (str): The ID of the agent to mark as critical.</span>
2811 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a>
2812 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> Returns:</span>
2813 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2814 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> message.</span>
2815 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
2816 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2817 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
2818 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2819 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2820 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
2821 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_critical</span><span class="p">()</span>
2822 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2823 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
2824 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span>
2825 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as critical&quot;</span><span class="p">,</span>
2826 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2827 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="p">}</span>
2828 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2805 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2806 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2807 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
2808 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2809 +<span class="normal"><a href="#__codelineno-0-75">75</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="k">def</span> <span class="nf">mark_agent_as_critical</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">-&gt;</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>
2810 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2811 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Marks a specific agent as critical.</span>
2812 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2813 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Args:</span>
2814 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> agent_id (str): The ID of the agent to mark as critical.</span>
2815 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a>
2816 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Returns:</span>
2817 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2818 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> message.</span>
2819 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> &quot;&quot;&quot;</span>
2820 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2821 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
2822 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2823 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2824 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a>
2825 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_critical</span><span class="p">()</span>
2826 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2827 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
2828 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="p">{</span>
2829 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as critical&quot;</span><span class="p">,</span>
2830 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2831 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">}</span>
2832 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2833 </code></pre></div></td></tr></table></div>
2834 </details>
2835 </div>
@@ -2908,53 +2912,53 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2912
2913 <details class="quote">
2914 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2911 - <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>
2912 -<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2913 -<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2914 -<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2915 -<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2916 -<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2917 -<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2918 -<span class="normal"><a href="#__codelineno-0-80">80</a></span>
2919 -<span class="normal"><a href="#__codelineno-0-81">81</a></span>
2920 -<span class="normal"><a href="#__codelineno-0-82">82</a></span>
2921 -<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2922 -<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2923 -<span class="normal"><a href="#__codelineno-0-85">85</a></span>
2924 -<span class="normal"><a href="#__codelineno-0-86">86</a></span>
2925 -<span class="normal"><a href="#__codelineno-0-87">87</a></span>
2926 -<span class="normal"><a href="#__codelineno-0-88">88</a></span>
2927 -<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2928 -<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2929 -<span class="normal"><a href="#__codelineno-0-91">91</a></span>
2930 -<span class="normal"><a href="#__codelineno-0-92">92</a></span>
2931 -<span class="normal"><a href="#__codelineno-0-93">93</a></span>
2932 -<span class="normal"><a href="#__codelineno-0-94">94</a></span>
2933 -<span class="normal"><a href="#__codelineno-0-95">95</a></span>
2934 -<span class="normal"><a href="#__codelineno-0-96">96</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">def</span> <span class="nf">mark_agent_as_non_critical</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">-&gt;</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>
2935 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2936 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Marks a specific agent as non-critical.</span>
2937 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
2938 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Args:</span>
2939 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> agent_id (str): The ID of the agent to mark as non-critical.</span>
2940 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
2941 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
2942 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2943 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> message.</span>
2944 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="sd"> &quot;&quot;&quot;</span>
2945 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2946 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2947 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2948 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2949 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
2950 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_non_critical</span><span class="p">()</span>
2951 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2952 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
2953 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="p">{</span>
2954 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as non-critical&quot;</span><span class="p">,</span>
2955 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2956 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="p">}</span>
2957 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as non-critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2915 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
2916 +<span class="normal"><a href="#__codelineno-0-78"> 78</a></span>
2917 +<span class="normal"><a href="#__codelineno-0-79"> 79</a></span>
2918 +<span class="normal"><a href="#__codelineno-0-80"> 80</a></span>
2919 +<span class="normal"><a href="#__codelineno-0-81"> 81</a></span>
2920 +<span class="normal"><a href="#__codelineno-0-82"> 82</a></span>
2921 +<span class="normal"><a href="#__codelineno-0-83"> 83</a></span>
2922 +<span class="normal"><a href="#__codelineno-0-84"> 84</a></span>
2923 +<span class="normal"><a href="#__codelineno-0-85"> 85</a></span>
2924 +<span class="normal"><a href="#__codelineno-0-86"> 86</a></span>
2925 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2926 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2927 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2928 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2929 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2930 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2931 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2932 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2933 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2934 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2935 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2936 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2937 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2938 +<span class="normal"><a href="#__codelineno-0-100">100</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="k">def</span> <span class="nf">mark_agent_as_non_critical</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">-&gt;</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>
2939 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2940 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Marks a specific agent as non-critical.</span>
2941 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a>
2942 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> Args:</span>
2943 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> agent_id (str): The ID of the agent to mark as non-critical.</span>
2944 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
2945 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Returns:</span>
2946 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="sd"> dict: A dictionary representing a success message if the operation was successful, otherwise an error</span>
2947 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> message.</span>
2948 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> &quot;&quot;&quot;</span>
2949 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="n">agent</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">AgentMetadata</span><span class="p">)</span><span class="o">.</span><span class="n">filter_by</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><span class="o">.</span><span class="n">first</span><span class="p">()</span>
2950 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a>
2951 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="n">agent</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
2952 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> not found&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2953 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
2954 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="n">agent</span><span class="o">.</span><span class="n">mark_as_non_critical</span><span class="p">()</span>
2955 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">agent_details</span> <span class="o">=</span> <span class="n">agent_metadata_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
2956 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="n">agent_details</span><span class="p">[</span><span class="s2">&quot;critical_asset&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
2957 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="p">{</span>
2958 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> failed to mark agent as non-critical&quot;</span><span class="p">,</span>
2959 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2960 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="p">}</span>
2961 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Agent </span><span class="si">{</span><span class="n">agent_id</span><span class="si">}</span><span class="s2"> marked as non-critical&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
2962 </code></pre></div></td></tr></table></div>
2963 </details>
2964 </div>
@@ -2986,11 +2990,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
2990
2991 <details class="quote">
2992 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
2989 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-166">166</a></span>
2990 -<span class="normal"><a href="#__codelineno-0-167">167</a></span>
2991 -<span class="normal"><a href="#__codelineno-0-168">168</a></span>
2992 -<span class="normal"><a href="#__codelineno-0-169">169</a></span>
2993 -<span class="normal"><a href="#__codelineno-0-170">170</a></span>
2993 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-170">170</a></span>
2994 <span class="normal"><a href="#__codelineno-0-171">171</a></span>
2995 <span class="normal"><a href="#__codelineno-0-172">172</a></span>
2996 <span class="normal"><a href="#__codelineno-0-173">173</a></span>
@@ -3088,109 +3088,127 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
3088 <span class="normal"><a href="#__codelineno-0-265">265</a></span>
3089 <span class="normal"><a href="#__codelineno-0-266">266</a></span>
3090 <span class="normal"><a href="#__codelineno-0-267">267</a></span>
3091 -<span class="normal"><a href="#__codelineno-0-268">268</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-166" name="__codelineno-0-166"></a><span class="k">class</span> <span class="nc">AgentSyncService</span><span class="p">:</span>
3092 -<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3093 -<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
3094 -<a id="__codelineno-0-169" name="__codelineno-0-169"></a>
3095 -<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">def</span> <span class="nf">collect_wazuh_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">-&gt;</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> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
3096 -<a id="__codelineno-0-171" name="__codelineno-0-171"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3097 -<a id="__codelineno-0-172" name="__codelineno-0-172"></a><span class="sd"> Collects the information of all Wazuh API credentials using the WazuhIndexerConnector class details.</span>
3091 +<span class="normal"><a href="#__codelineno-0-268">268</a></span>
3092 +<span class="normal"><a href="#__codelineno-0-269">269</a></span>
3093 +<span class="normal"><a href="#__codelineno-0-270">270</a></span>
3094 +<span class="normal"><a href="#__codelineno-0-271">271</a></span>
3095 +<span class="normal"><a href="#__codelineno-0-272">272</a></span>
3096 +<span class="normal"><a href="#__codelineno-0-273">273</a></span>
3097 +<span class="normal"><a href="#__codelineno-0-274">274</a></span>
3098 +<span class="normal"><a href="#__codelineno-0-275">275</a></span>
3099 +<span class="normal"><a href="#__codelineno-0-276">276</a></span>
3100 +<span class="normal"><a href="#__codelineno-0-277">277</a></span>
3101 +<span class="normal"><a href="#__codelineno-0-278">278</a></span>
3102 +<span class="normal"><a href="#__codelineno-0-279">279</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-170" name="__codelineno-0-170"></a><span class="k">class</span> <span class="nc">AgentSyncService</span><span class="p">:</span>
3103 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3104 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_service</span> <span class="o">=</span> <span class="n">AgentService</span><span class="p">()</span>
3105 <a id="__codelineno-0-173" name="__codelineno-0-173"></a>
3099 -<a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="sd"> Returns:</span>
3100 -<a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3101 -<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> &quot;&quot;&quot;</span>
3102 -<a id="__codelineno-0-177" name="__codelineno-0-177"></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>
3103 -<a id="__codelineno-0-178" name="__codelineno-0-178"></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>
3104 -<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3105 -<a id="__codelineno-0-180" name="__codelineno-0-180"></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>
3106 -<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="k">return</span> <span class="p">(</span>
3107 -<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3108 -<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3109 -<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3110 -<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="p">)</span>
3111 -<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">else</span><span class="p">:</span>
3112 -<a id="__codelineno-0-187" name="__codelineno-0-187"></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>
3113 -<a id="__codelineno-0-188" name="__codelineno-0-188"></a>
3114 -<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="k">def</span> <span class="nf">collect_wazuh_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connection_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">-&gt;</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>
3115 -<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3116 -<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> Collects the information of all agents from the Wazuh API.</span>
3117 -<a id="__codelineno-0-192" name="__codelineno-0-192"></a>
3118 -<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> Returns:</span>
3119 -<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> list: A list containing the information of all Wazuh agents.</span>
3120 -<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> &quot;&quot;&quot;</span>
3121 -<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting Wazuh Agents&quot;</span><span class="p">)</span>
3122 -<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">try</span><span class="p">:</span>
3123 -<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
3124 -<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">limit</span> <span class="o">=</span> <span class="mi">1000</span>
3125 -<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="n">agents_collected</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3126 -<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connection_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">&quot;</span><span class="p">,</span>
3127 -<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3128 -<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3129 -<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">)</span>
3130 -<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="k">if</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
3131 -<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="p">[]</span>
3132 -<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">]:</span>
3133 -<a id="__codelineno-0-208" name="__codelineno-0-208"></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">&quot;os&quot;</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">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3134 -<a id="__codelineno-0-209" name="__codelineno-0-209"></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">&quot;lastKeepAlive&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3135 -<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">wazuh_agents_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
3136 -<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">{</span>
3137 -<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span>
3138 -<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="s2">&quot;agent_name&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
3139 -<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="s2">&quot;agent_ip&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;ip&quot;</span><span class="p">],</span>
3140 -<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="s2">&quot;agent_os&quot;</span><span class="p">:</span> <span class="n">os_name</span><span class="p">,</span>
3141 -<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="s2">&quot;agent_last_seen&quot;</span><span class="p">:</span> <span class="n">last_keep_alive</span><span class="p">,</span>
3142 -<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="p">},</span>
3143 -<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="p">)</span>
3144 -<a id="__codelineno-0-219" name="__codelineno-0-219"></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">&quot;Collected Wazuh Agent: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3145 -<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
3146 -<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="k">else</span><span class="p">:</span>
3147 -<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="k">return</span> <span class="kc">None</span>
3148 -<a id="__codelineno-0-223" name="__codelineno-0-223"></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>
3149 -<a id="__codelineno-0-224" name="__codelineno-0-224"></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">&quot;Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3150 -<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="k">return</span> <span class="kc">None</span>
3151 -<a id="__codelineno-0-226" name="__codelineno-0-226"></a>
3152 -<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">def</span> <span class="nf">sync_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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>
3153 -<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="p">(</span>
3154 -<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="n">connection_url</span><span class="p">,</span>
3155 -<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">connection_username</span><span class="p">,</span>
3156 -<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="n">connection_password</span><span class="p">,</span>
3157 -<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuh_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Manager&quot;</span><span class="p">)</span>
3158 -<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">if</span> <span class="n">connection_url</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3159 -<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">return</span> <span class="p">{</span>
3160 -<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to get Wazuh-Manager API details&quot;</span><span class="p">,</span>
3161 -<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3162 -<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="p">}</span>
3163 -<a id="__codelineno-0-238" name="__codelineno-0-238"></a>
3164 -<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="n">wazuh_manager_connector</span> <span class="o">=</span> <span class="n">WazuhManagerConnector</span><span class="p">(</span><span class="s2">&quot;Wazuh-Manager&quot;</span><span class="p">)</span>
3165 -<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_manager_connector</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
3166 -<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="k">if</span> <span class="n">wazuh_auth_token</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3167 -<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="k">return</span> <span class="p">{</span>
3168 -<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to get Wazuh-Manager API Auth Token&quot;</span><span class="p">,</span>
3169 -<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3170 -<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="p">}</span>
3171 -<a id="__codelineno-0-246" name="__codelineno-0-246"></a>
3172 -<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuh_agents</span><span class="p">(</span><span class="n">connection_url</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">)</span>
3173 -<a id="__codelineno-0-248" name="__codelineno-0-248"></a> <span class="k">if</span> <span class="n">wazuh_agents_list</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3174 -<a id="__codelineno-0-249" name="__codelineno-0-249"></a> <span class="k">return</span> <span class="p">{</span>
3175 -<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Manager Agents&quot;</span><span class="p">,</span>
3176 -<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3177 -<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="p">}</span>
3178 -<a id="__codelineno-0-253" name="__codelineno-0-253"></a>
3179 -<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><span class="sa">f</span><span class="s2">&quot;Collected </span><span class="si">{</span><span class="n">wazuh_agents_list</span><span class="si">}</span><span class="s2"> Wazuh Agents&quot;</span><span class="p">)</span>
3180 -<a id="__codelineno-0-255" name="__codelineno-0-255"></a>
3181 -<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="n">agents_added_list</span> <span class="o">=</span> <span class="p">[]</span>
3182 -<a id="__codelineno-0-257" name="__codelineno-0-257"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">wazuh_agents_list</span><span class="p">:</span>
3183 -<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">agent_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">agent_service</span><span class="o">.</span><span class="n">get_agent</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_id&quot;</span><span class="p">])</span>
3184 -<a id="__codelineno-0-259" name="__codelineno-0-259"></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">&quot;Agent info: </span><span class="si">{</span><span class="n">agent_info</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3185 -<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="k">if</span> <span class="s2">&quot;message&quot;</span> <span class="ow">in</span> <span class="n">agent_info</span><span class="p">:</span>
3186 -<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_service</span><span class="o">.</span><span class="n">create_agent</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
3187 -<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="n">agents_added_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
3188 -<a id="__codelineno-0-263" name="__codelineno-0-263"></a>
3189 -<a id="__codelineno-0-264" name="__codelineno-0-264"></a> <span class="k">return</span> <span class="p">{</span>
3190 -<a id="__codelineno-0-265" name="__codelineno-0-265"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully synced agents.&quot;</span><span class="p">,</span>
3191 -<a id="__codelineno-0-266" name="__codelineno-0-266"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3192 -<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="s2">&quot;agents_added&quot;</span><span class="p">:</span> <span class="n">agents_added_list</span><span class="p">,</span>
3193 -<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="p">}</span>
3106 +<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="k">def</span> <span class="nf">collect_wazuh_details</span><span class="p">(</span>
3107 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="bp">self</span><span class="p">,</span>
3108 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3109 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="p">)</span> <span class="o">-&gt;</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> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
3110 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3111 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="sd"> Collects the information of all Wazuh API credentials using the WazuhIndexerConnector class details.</span>
3112 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a>
3113 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="sd"> Returns:</span>
3114 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3115 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> &quot;&quot;&quot;</span>
3116 +<a id="__codelineno-0-184" name="__codelineno-0-184"></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>
3117 +<a id="__codelineno-0-185" name="__codelineno-0-185"></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>
3118 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3119 +<a id="__codelineno-0-187" name="__codelineno-0-187"></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>
3120 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">return</span> <span class="p">(</span>
3121 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3122 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3123 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3124 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="p">)</span>
3125 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="k">else</span><span class="p">:</span>
3126 +<a id="__codelineno-0-194" name="__codelineno-0-194"></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>
3127 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
3128 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="k">def</span> <span class="nf">collect_wazuh_agents</span><span class="p">(</span>
3129 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="bp">self</span><span class="p">,</span>
3130 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="n">connection_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3131 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3132 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="p">)</span> <span class="o">-&gt;</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>
3133 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3134 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="sd"> Collects the information of all agents from the Wazuh API.</span>
3135 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a>
3136 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a><span class="sd"> Returns:</span>
3137 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a><span class="sd"> list: A list containing the information of all Wazuh agents.</span>
3138 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> &quot;&quot;&quot;</span>
3139 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting Wazuh Agents&quot;</span><span class="p">)</span>
3140 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">try</span><span class="p">:</span>
3141 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
3142 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">limit</span> <span class="o">=</span> <span class="mi">1000</span>
3143 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="n">agents_collected</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3144 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connection_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">&quot;</span><span class="p">,</span>
3145 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3146 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3147 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="p">)</span>
3148 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">if</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
3149 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="p">[]</span>
3150 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">]:</span>
3151 +<a id="__codelineno-0-219" name="__codelineno-0-219"></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">&quot;os&quot;</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">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3152 +<a id="__codelineno-0-220" name="__codelineno-0-220"></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">&quot;lastKeepAlive&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3153 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="n">wazuh_agents_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
3154 +<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="p">{</span>
3155 +<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span>
3156 +<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="s2">&quot;agent_name&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
3157 +<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="s2">&quot;agent_ip&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;ip&quot;</span><span class="p">],</span>
3158 +<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="s2">&quot;agent_os&quot;</span><span class="p">:</span> <span class="n">os_name</span><span class="p">,</span>
3159 +<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="s2">&quot;agent_last_seen&quot;</span><span class="p">:</span> <span class="n">last_keep_alive</span><span class="p">,</span>
3160 +<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="p">},</span>
3161 +<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="p">)</span>
3162 +<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">&quot;Collected Wazuh Agent: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3163 +<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
3164 +<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="k">else</span><span class="p">:</span>
3165 +<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">return</span> <span class="kc">None</span>
3166 +<a id="__codelineno-0-234" name="__codelineno-0-234"></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>
3167 +<a id="__codelineno-0-235" name="__codelineno-0-235"></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">&quot;Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3168 +<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">return</span> <span class="kc">None</span>
3169 +<a id="__codelineno-0-237" name="__codelineno-0-237"></a>
3170 +<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="k">def</span> <span class="nf">sync_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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>
3171 +<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="p">(</span>
3172 +<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="n">connection_url</span><span class="p">,</span>
3173 +<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="n">connection_username</span><span class="p">,</span>
3174 +<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="n">connection_password</span><span class="p">,</span>
3175 +<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuh_details</span><span class="p">(</span><span class="s2">&quot;Wazuh-Manager&quot;</span><span class="p">)</span>
3176 +<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="k">if</span> <span class="n">connection_url</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3177 +<a id="__codelineno-0-245" name="__codelineno-0-245"></a> <span class="k">return</span> <span class="p">{</span>
3178 +<a id="__codelineno-0-246" name="__codelineno-0-246"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to get Wazuh-Manager API details&quot;</span><span class="p">,</span>
3179 +<a id="__codelineno-0-247" name="__codelineno-0-247"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3180 +<a id="__codelineno-0-248" name="__codelineno-0-248"></a> <span class="p">}</span>
3181 +<a id="__codelineno-0-249" name="__codelineno-0-249"></a>
3182 +<a id="__codelineno-0-250" name="__codelineno-0-250"></a> <span class="n">wazuh_manager_connector</span> <span class="o">=</span> <span class="n">WazuhManagerConnector</span><span class="p">(</span><span class="s2">&quot;Wazuh-Manager&quot;</span><span class="p">)</span>
3183 +<a id="__codelineno-0-251" name="__codelineno-0-251"></a> <span class="n">wazuh_auth_token</span> <span class="o">=</span> <span class="n">wazuh_manager_connector</span><span class="o">.</span><span class="n">get_auth_token</span><span class="p">()</span>
3184 +<a id="__codelineno-0-252" name="__codelineno-0-252"></a> <span class="k">if</span> <span class="n">wazuh_auth_token</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3185 +<a id="__codelineno-0-253" name="__codelineno-0-253"></a> <span class="k">return</span> <span class="p">{</span>
3186 +<a id="__codelineno-0-254" name="__codelineno-0-254"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to get Wazuh-Manager API Auth Token&quot;</span><span class="p">,</span>
3187 +<a id="__codelineno-0-255" name="__codelineno-0-255"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3188 +<a id="__codelineno-0-256" name="__codelineno-0-256"></a> <span class="p">}</span>
3189 +<a id="__codelineno-0-257" name="__codelineno-0-257"></a>
3190 +<a id="__codelineno-0-258" name="__codelineno-0-258"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_wazuh_agents</span><span class="p">(</span><span class="n">connection_url</span><span class="p">,</span> <span class="n">wazuh_auth_token</span><span class="p">)</span>
3191 +<a id="__codelineno-0-259" name="__codelineno-0-259"></a> <span class="k">if</span> <span class="n">wazuh_agents_list</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
3192 +<a id="__codelineno-0-260" name="__codelineno-0-260"></a> <span class="k">return</span> <span class="p">{</span>
3193 +<a id="__codelineno-0-261" name="__codelineno-0-261"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Manager Agents&quot;</span><span class="p">,</span>
3194 +<a id="__codelineno-0-262" name="__codelineno-0-262"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3195 +<a id="__codelineno-0-263" name="__codelineno-0-263"></a> <span class="p">}</span>
3196 +<a id="__codelineno-0-264" name="__codelineno-0-264"></a>
3197 +<a id="__codelineno-0-265" name="__codelineno-0-265"></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">&quot;Collected </span><span class="si">{</span><span class="n">wazuh_agents_list</span><span class="si">}</span><span class="s2"> Wazuh Agents&quot;</span><span class="p">)</span>
3198 +<a id="__codelineno-0-266" name="__codelineno-0-266"></a>
3199 +<a id="__codelineno-0-267" name="__codelineno-0-267"></a> <span class="n">agents_added_list</span> <span class="o">=</span> <span class="p">[]</span>
3200 +<a id="__codelineno-0-268" name="__codelineno-0-268"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">wazuh_agents_list</span><span class="p">:</span>
3201 +<a id="__codelineno-0-269" name="__codelineno-0-269"></a> <span class="n">agent_info</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">agent_service</span><span class="o">.</span><span class="n">get_agent</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s2">&quot;agent_id&quot;</span><span class="p">])</span>
3202 +<a id="__codelineno-0-270" name="__codelineno-0-270"></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">&quot;Agent info: </span><span class="si">{</span><span class="n">agent_info</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3203 +<a id="__codelineno-0-271" name="__codelineno-0-271"></a> <span class="k">if</span> <span class="s2">&quot;message&quot;</span> <span class="ow">in</span> <span class="n">agent_info</span><span class="p">:</span>
3204 +<a id="__codelineno-0-272" name="__codelineno-0-272"></a> <span class="bp">self</span><span class="o">.</span><span class="n">agent_service</span><span class="o">.</span><span class="n">create_agent</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
3205 +<a id="__codelineno-0-273" name="__codelineno-0-273"></a> <span class="n">agents_added_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
3206 +<a id="__codelineno-0-274" name="__codelineno-0-274"></a>
3207 +<a id="__codelineno-0-275" name="__codelineno-0-275"></a> <span class="k">return</span> <span class="p">{</span>
3208 +<a id="__codelineno-0-276" name="__codelineno-0-276"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully synced agents.&quot;</span><span class="p">,</span>
3209 +<a id="__codelineno-0-277" name="__codelineno-0-277"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3210 +<a id="__codelineno-0-278" name="__codelineno-0-278"></a> <span class="s2">&quot;agents_added&quot;</span><span class="p">:</span> <span class="n">agents_added_list</span><span class="p">,</span>
3211 +<a id="__codelineno-0-279" name="__codelineno-0-279"></a> <span class="p">}</span>
3212 </code></pre></div></td></tr></table></div>
3213 </details>
3214
@@ -3244,14 +3262,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
3262
3263 <details class="quote">
3264 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
3247 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-189">189</a></span>
3248 -<span class="normal"><a href="#__codelineno-0-190">190</a></span>
3249 -<span class="normal"><a href="#__codelineno-0-191">191</a></span>
3250 -<span class="normal"><a href="#__codelineno-0-192">192</a></span>
3251 -<span class="normal"><a href="#__codelineno-0-193">193</a></span>
3252 -<span class="normal"><a href="#__codelineno-0-194">194</a></span>
3253 -<span class="normal"><a href="#__codelineno-0-195">195</a></span>
3254 -<span class="normal"><a href="#__codelineno-0-196">196</a></span>
3265 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-196">196</a></span>
3266 <span class="normal"><a href="#__codelineno-0-197">197</a></span>
3267 <span class="normal"><a href="#__codelineno-0-198">198</a></span>
3268 <span class="normal"><a href="#__codelineno-0-199">199</a></span>
@@ -3280,43 +3291,58 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
3291 <span class="normal"><a href="#__codelineno-0-222">222</a></span>
3292 <span class="normal"><a href="#__codelineno-0-223">223</a></span>
3293 <span class="normal"><a href="#__codelineno-0-224">224</a></span>
3283 -<span class="normal"><a href="#__codelineno-0-225">225</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="k">def</span> <span class="nf">collect_wazuh_agents</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connection_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">-&gt;</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>
3284 -<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3285 -<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> Collects the information of all agents from the Wazuh API.</span>
3286 -<a id="__codelineno-0-192" name="__codelineno-0-192"></a>
3287 -<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> Returns:</span>
3288 -<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> list: A list containing the information of all Wazuh agents.</span>
3289 -<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> &quot;&quot;&quot;</span>
3290 -<a id="__codelineno-0-196" name="__codelineno-0-196"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting Wazuh Agents&quot;</span><span class="p">)</span>
3291 -<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="k">try</span><span class="p">:</span>
3292 -<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
3293 -<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">limit</span> <span class="o">=</span> <span class="mi">1000</span>
3294 -<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="n">agents_collected</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3295 -<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connection_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">&quot;</span><span class="p">,</span>
3296 -<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3297 -<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3298 -<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">)</span>
3299 -<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="k">if</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
3300 -<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="p">[]</span>
3301 -<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">]:</span>
3302 -<a id="__codelineno-0-208" name="__codelineno-0-208"></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">&quot;os&quot;</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">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3303 -<a id="__codelineno-0-209" name="__codelineno-0-209"></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">&quot;lastKeepAlive&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3304 -<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">wazuh_agents_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
3305 -<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="p">{</span>
3306 -<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span>
3307 -<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="s2">&quot;agent_name&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
3308 -<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="s2">&quot;agent_ip&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;ip&quot;</span><span class="p">],</span>
3309 -<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="s2">&quot;agent_os&quot;</span><span class="p">:</span> <span class="n">os_name</span><span class="p">,</span>
3310 -<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="s2">&quot;agent_last_seen&quot;</span><span class="p">:</span> <span class="n">last_keep_alive</span><span class="p">,</span>
3311 -<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="p">},</span>
3312 -<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="p">)</span>
3313 -<a id="__codelineno-0-219" name="__codelineno-0-219"></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">&quot;Collected Wazuh Agent: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3314 -<a id="__codelineno-0-220" name="__codelineno-0-220"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
3315 -<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="k">else</span><span class="p">:</span>
3316 -<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="k">return</span> <span class="kc">None</span>
3317 -<a id="__codelineno-0-223" name="__codelineno-0-223"></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>
3318 -<a id="__codelineno-0-224" name="__codelineno-0-224"></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">&quot;Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3319 -<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="k">return</span> <span class="kc">None</span>
3294 +<span class="normal"><a href="#__codelineno-0-225">225</a></span>
3295 +<span class="normal"><a href="#__codelineno-0-226">226</a></span>
3296 +<span class="normal"><a href="#__codelineno-0-227">227</a></span>
3297 +<span class="normal"><a href="#__codelineno-0-228">228</a></span>
3298 +<span class="normal"><a href="#__codelineno-0-229">229</a></span>
3299 +<span class="normal"><a href="#__codelineno-0-230">230</a></span>
3300 +<span class="normal"><a href="#__codelineno-0-231">231</a></span>
3301 +<span class="normal"><a href="#__codelineno-0-232">232</a></span>
3302 +<span class="normal"><a href="#__codelineno-0-233">233</a></span>
3303 +<span class="normal"><a href="#__codelineno-0-234">234</a></span>
3304 +<span class="normal"><a href="#__codelineno-0-235">235</a></span>
3305 +<span class="normal"><a href="#__codelineno-0-236">236</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="k">def</span> <span class="nf">collect_wazuh_agents</span><span class="p">(</span>
3306 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="bp">self</span><span class="p">,</span>
3307 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="n">connection_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3308 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">wazuh_auth_token</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3309 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a><span class="p">)</span> <span class="o">-&gt;</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>
3310 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3311 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a><span class="sd"> Collects the information of all agents from the Wazuh API.</span>
3312 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a>
3313 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a><span class="sd"> Returns:</span>
3314 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a><span class="sd"> list: A list containing the information of all Wazuh agents.</span>
3315 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a><span class="sd"> &quot;&quot;&quot;</span>
3316 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting Wazuh Agents&quot;</span><span class="p">)</span>
3317 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">try</span><span class="p">:</span>
3318 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Bearer </span><span class="si">{</span><span class="n">wazuh_auth_token</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">}</span>
3319 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="n">limit</span> <span class="o">=</span> <span class="mi">1000</span>
3320 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="n">agents_collected</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3321 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connection_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">&quot;</span><span class="p">,</span>
3322 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3323 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3324 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="p">)</span>
3325 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a> <span class="k">if</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
3326 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a> <span class="n">wazuh_agents_list</span> <span class="o">=</span> <span class="p">[]</span>
3327 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a> <span class="k">for</span> <span class="n">agent</span> <span class="ow">in</span> <span class="n">agents_collected</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;data&quot;</span><span class="p">][</span><span class="s2">&quot;affected_items&quot;</span><span class="p">]:</span>
3328 +<a id="__codelineno-0-219" name="__codelineno-0-219"></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">&quot;os&quot;</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">&quot;name&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3329 +<a id="__codelineno-0-220" name="__codelineno-0-220"></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">&quot;lastKeepAlive&quot;</span><span class="p">,</span> <span class="s2">&quot;Unknown&quot;</span><span class="p">)</span>
3330 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a> <span class="n">wazuh_agents_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
3331 +<a id="__codelineno-0-222" name="__codelineno-0-222"></a> <span class="p">{</span>
3332 +<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="s2">&quot;agent_id&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span>
3333 +<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="s2">&quot;agent_name&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
3334 +<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="s2">&quot;agent_ip&quot;</span><span class="p">:</span> <span class="n">agent</span><span class="p">[</span><span class="s2">&quot;ip&quot;</span><span class="p">],</span>
3335 +<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="s2">&quot;agent_os&quot;</span><span class="p">:</span> <span class="n">os_name</span><span class="p">,</span>
3336 +<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="s2">&quot;agent_last_seen&quot;</span><span class="p">:</span> <span class="n">last_keep_alive</span><span class="p">,</span>
3337 +<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="p">},</span>
3338 +<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="p">)</span>
3339 +<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">&quot;Collected Wazuh Agent: </span><span class="si">{</span><span class="n">agent</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3340 +<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="k">return</span> <span class="n">wazuh_agents_list</span>
3341 +<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="k">else</span><span class="p">:</span>
3342 +<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="k">return</span> <span class="kc">None</span>
3343 +<a id="__codelineno-0-234" name="__codelineno-0-234"></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>
3344 +<a id="__codelineno-0-235" name="__codelineno-0-235"></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">&quot;Failed to collect Wazuh Agents: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3345 +<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="k">return</span> <span class="kc">None</span>
3346 </code></pre></div></td></tr></table></div>
3347 </details>
3348 </div>
@@ -3361,11 +3387,7 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
3387
3388 <details class="quote">
3389 <summary>Source code in <code>app\services\agents\agents.py</code></summary>
3364 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-170">170</a></span>
3365 -<span class="normal"><a href="#__codelineno-0-171">171</a></span>
3366 -<span class="normal"><a href="#__codelineno-0-172">172</a></span>
3367 -<span class="normal"><a href="#__codelineno-0-173">173</a></span>
3368 -<span class="normal"><a href="#__codelineno-0-174">174</a></span>
3390 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-174">174</a></span>
3391 <span class="normal"><a href="#__codelineno-0-175">175</a></span>
3392 <span class="normal"><a href="#__codelineno-0-176">176</a></span>
3393 <span class="normal"><a href="#__codelineno-0-177">177</a></span>
@@ -3378,24 +3400,34 @@ and boolean for critical asset. This class inherits from SQLAlchemy's Model clas
3400 <span class="normal"><a href="#__codelineno-0-184">184</a></span>
3401 <span class="normal"><a href="#__codelineno-0-185">185</a></span>
3402 <span class="normal"><a href="#__codelineno-0-186">186</a></span>
3381 -<span class="normal"><a href="#__codelineno-0-187">187</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-170" name="__codelineno-0-170"></a><span class="k">def</span> <span class="nf">collect_wazuh_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">-&gt;</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> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
3382 -<a id="__codelineno-0-171" name="__codelineno-0-171"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3383 -<a id="__codelineno-0-172" name="__codelineno-0-172"></a><span class="sd"> Collects the information of all Wazuh API credentials using the WazuhIndexerConnector class details.</span>
3384 -<a id="__codelineno-0-173" name="__codelineno-0-173"></a>
3385 -<a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="sd"> Returns:</span>
3386 -<a id="__codelineno-0-175" name="__codelineno-0-175"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3387 -<a id="__codelineno-0-176" name="__codelineno-0-176"></a><span class="sd"> &quot;&quot;&quot;</span>
3388 -<a id="__codelineno-0-177" name="__codelineno-0-177"></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>
3389 -<a id="__codelineno-0-178" name="__codelineno-0-178"></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>
3390 -<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3391 -<a id="__codelineno-0-180" name="__codelineno-0-180"></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>
3392 -<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="k">return</span> <span class="p">(</span>
3393 -<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3394 -<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3395 -<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3396 -<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="p">)</span>
3397 -<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">else</span><span class="p">:</span>
3398 -<a id="__codelineno-0-187" name="__codelineno-0-187"></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>
3403 +<span class="normal"><a href="#__codelineno-0-187">187</a></span>
3404 +<span class="normal"><a href="#__codelineno-0-188">188</a></span>
3405 +<span class="normal"><a href="#__codelineno-0-189">189</a></span>
3406 +<span class="normal"><a href="#__codelineno-0-190">190</a></span>
3407 +<span class="normal"><a href="#__codelineno-0-191">191</a></span>
3408 +<span class="normal"><a href="#__codelineno-0-192">192</a></span>
3409 +<span class="normal"><a href="#__codelineno-0-193">193</a></span>
3410 +<span class="normal"><a href="#__codelineno-0-194">194</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-174" name="__codelineno-0-174"></a><span class="k">def</span> <span class="nf">collect_wazuh_details</span><span class="p">(</span>
3411 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="bp">self</span><span class="p">,</span>
3412 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="n">connector_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3413 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a><span class="p">)</span> <span class="o">-&gt;</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> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
3414 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3415 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a><span class="sd"> Collects the information of all Wazuh API credentials using the WazuhIndexerConnector class details.</span>
3416 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a>
3417 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a><span class="sd"> Returns:</span>
3418 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3419 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a><span class="sd"> &quot;&quot;&quot;</span>
3420 +<a id="__codelineno-0-184" name="__codelineno-0-184"></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>
3421 +<a id="__codelineno-0-185" name="__codelineno-0-185"></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>
3422 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3423 +<a id="__codelineno-0-187" name="__codelineno-0-187"></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>
3424 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a> <span class="k">return</span> <span class="p">(</span>
3425 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3426 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3427 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3428 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a> <span class="p">)</span>
3429 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a> <span class="k">else</span><span class="p">:</span>
3430 +<a id="__codelineno-0-194" name="__codelineno-0-194"></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>
3431 </code></pre></div></td></tr></table></div>
3432 </details>
3433 </div>
backend/site/alerts/index.html
+236 -236
@@ -589,10 +589,7 @@ available.</p>
589
590 <details class="quote">
591 <summary>Source code in <code>app\routes\alerts.py</code></summary>
592 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
593 -<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
594 -<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
595 -<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
592 + <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>
593 <span class="normal"><a href="#__codelineno-0-10">10</a></span>
594 <span class="normal"><a href="#__codelineno-0-11">11</a></span>
595 <span class="normal"><a href="#__codelineno-0-12">12</a></span>
@@ -604,22 +601,25 @@ available.</p>
601 <span class="normal"><a href="#__codelineno-0-18">18</a></span>
602 <span class="normal"><a href="#__codelineno-0-19">19</a></span>
603 <span class="normal"><a href="#__codelineno-0-20">20</a></span>
607 -<span class="normal"><a href="#__codelineno-0-21">21</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
608 -<a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
609 -<a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
610 -<a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="sd"> Retrieves all alerts from the AlertsService.</span>
611 -<a id="__codelineno-0-10" name="__codelineno-0-10"></a>
612 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="sd"> This endpoint retrieves all available alerts from the AlertsService. It does this by creating an instance of</span>
613 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> the AlertsService class and calling its `collect_alerts` method. The result is a list of all alerts currently</span>
614 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> available.</span>
615 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
616 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Returns:</span>
617 -<a id="__codelineno-0-16" name="__codelineno-0-16"></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>
618 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> containing all its associated data.</span>
619 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
620 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
621 -<a id="__codelineno-0-20" name="__codelineno-0-20"></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>
622 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">alerts</span><span class="p">)</span>
604 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
605 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
606 +<span class="normal"><a href="#__codelineno-0-23">23</a></span>
607 +<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">&quot;/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
608 +<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">-&gt;</span> <span class="n">jsonify</span><span class="p">:</span>
609 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
610 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Retrieves all alerts from the AlertsService.</span>
611 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
612 +<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>
613 +<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>
614 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> available.</span>
615 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
616 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Returns:</span>
617 +<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>
618 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> containing all its associated data.</span>
619 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
620 +<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>
621 +<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>
622 +<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>
623 </code></pre></div></td></tr></table></div>
624 </details>
625 </div>
@@ -729,8 +729,7 @@ available.</p>
729
730 <details class="quote">
731 <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
732 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
733 -<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
732 + <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>
733 <span class="normal"><a href="#__codelineno-0-10"> 10</a></span>
734 <span class="normal"><a href="#__codelineno-0-11"> 11</a></span>
735 <span class="normal"><a href="#__codelineno-0-12"> 12</a></span>
@@ -864,142 +863,143 @@ available.</p>
863 <span class="normal"><a href="#__codelineno-0-140">140</a></span>
864 <span class="normal"><a href="#__codelineno-0-141">141</a></span>
865 <span class="normal"><a href="#__codelineno-0-142">142</a></span>
867 -<span class="normal"><a href="#__codelineno-0-143">143</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="k">class</span> <span class="nc">AlertsService</span><span class="p">:</span>
868 -<a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
869 -<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="sd"> A service class that encapsulates the logic for pulling alerts from the Wazuh-Indexer.</span>
870 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a>
871 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> Attributes:</span>
872 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> connector_url (str): The url to the Wazuh-Indexer.</span>
873 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_username (str): The username for the Wazuh-Indexer.</span>
874 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_password (str): The password for the Wazuh-Indexer.</span>
875 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> es (Elasticsearch): The Elasticsearch client.</span>
876 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
877 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
878 -<a id="__codelineno-0-19" name="__codelineno-0-19"></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>
879 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="s2">&quot;wazuh-statistics&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
880 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="s2">&quot;wazuh-monitoring&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
881 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="p">}</span>
882 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
883 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
884 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
885 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
886 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> &quot;&quot;&quot;</span>
887 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="p">(</span>
888 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
889 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
890 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
891 -<a id="__codelineno-0-32" name="__codelineno-0-32"></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">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
892 -<a id="__codelineno-0-33" name="__codelineno-0-33"></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>
893 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
894 -<a id="__codelineno-0-35" name="__codelineno-0-35"></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>
895 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
896 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
897 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
898 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
899 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">)</span>
900 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
901 -<a id="__codelineno-0-42" name="__codelineno-0-42"></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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
902 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
903 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
904 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
905 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
906 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> index_name (str): The name of the index.</span>
907 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
908 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
909 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
910 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
911 -<a id="__codelineno-0-52" name="__codelineno-0-52"></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>
912 -<a id="__codelineno-0-53" name="__codelineno-0-53"></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>
913 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="kc">True</span>
914 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">False</span>
915 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a>
916 -<a id="__codelineno-0-57" name="__codelineno-0-57"></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">-&gt;</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>
917 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
918 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with &quot;wazuh_&quot;</span>
919 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
920 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
921 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
922 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Returns:</span>
923 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
924 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> &quot;&quot;&quot;</span>
925 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
926 -<a id="__codelineno-0-67" name="__codelineno-0-67"></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>
927 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">):</span>
928 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
929 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
930 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
931 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
932 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
933 -<a id="__codelineno-0-74" name="__codelineno-0-74"></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>
934 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
935 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
936 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a>
937 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
938 -<a id="__codelineno-0-79" name="__codelineno-0-79"></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">&quot;indices_list&quot;</span><span class="p">]:</span>
939 -<a id="__codelineno-0-80" name="__codelineno-0-80"></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">&quot;wazuh_&quot;</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>
940 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">continue</span>
941 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
942 -<a id="__codelineno-0-83" name="__codelineno-0-83"></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>
943 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;success&quot;</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">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
944 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
945 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">{</span>
946 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
947 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;total_alerts&quot;</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">&quot;alerts&quot;</span><span class="p">]),</span>
948 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
949 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="p">},</span>
950 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">)</span>
951 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
952 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="p">{</span>
953 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
954 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
955 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
956 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">}</span>
957 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a>
958 -<a id="__codelineno-0-99" name="__codelineno-0-99"></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">-&gt;</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>
959 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
960 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> Elasticsearch query to get the 10 most recent alerts where the `rule_level` is 12 or higher or the</span>
961 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> `syslog_level` field is `ALERT` and return the results in descending order by the `timestamp_utc` field.</span>
962 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
963 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Args:</span>
964 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> index_name (str): The name of the index to query.</span>
965 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
966 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> Returns:</span>
967 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
968 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> &quot;&quot;&quot;</span>
969 -<a id="__codelineno-0-110" name="__codelineno-0-110"></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">&quot;Collecting alerts from </span><span class="si">{</span><span class="n">index_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
970 -<a id="__codelineno-0-111" name="__codelineno-0-111"></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>
971 -<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="k">try</span><span class="p">:</span>
972 -<a id="__codelineno-0-113" name="__codelineno-0-113"></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>
973 -<a id="__codelineno-0-114" name="__codelineno-0-114"></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">&quot;hits&quot;</span><span class="p">][</span><span class="s2">&quot;hits&quot;</span><span class="p">]]</span>
974 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="k">return</span> <span class="p">{</span>
975 -<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
976 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
977 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">&quot;alerts&quot;</span><span class="p">:</span> <span class="n">alerts_list</span><span class="p">,</span>
978 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="p">}</span>
979 -<a id="__codelineno-0-120" name="__codelineno-0-120"></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>
980 -<a id="__codelineno-0-121" name="__codelineno-0-121"></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">&quot;Failed to collect alerts: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
981 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect alerts&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
982 -<a id="__codelineno-0-123" name="__codelineno-0-123"></a>
983 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="nd">@staticmethod</span>
984 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="k">def</span> <span class="nf">_build_query</span><span class="p">()</span> <span class="o">-&gt;</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>
985 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
986 -<a id="__codelineno-0-127" name="__codelineno-0-127"></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>
987 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a><span class="sd"> the `syslog_level` field is `ALERT`.</span>
988 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a>
989 -<a id="__codelineno-0-130" name="__codelineno-0-130"></a><span class="sd"> Returns:</span>
990 -<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> Dict[str, object]: A dictionary representing the Elasticsearch query.</span>
991 -<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> &quot;&quot;&quot;</span>
992 -<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">return</span> <span class="p">{</span>
993 -<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="p">{</span>
994 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;bool&quot;</span><span class="p">:</span> <span class="p">{</span>
995 -<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;should&quot;</span><span class="p">:</span> <span class="p">[</span>
996 -<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="p">{</span><span class="s2">&quot;range&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;rule_level&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;gte&quot;</span><span class="p">:</span> <span class="mi">12</span><span class="p">}}},</span>
997 -<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">{</span><span class="s2">&quot;match&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;syslog_level&quot;</span><span class="p">:</span> <span class="s2">&quot;ALERT&quot;</span><span class="p">}},</span>
998 -<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">],</span>
999 -<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">},</span>
1000 -<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">},</span>
1001 -<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;timestamp_utc&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="s2">&quot;desc&quot;</span><span class="p">}}],</span>
1002 -<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="p">}</span>
866 +<span class="normal"><a href="#__codelineno-0-143">143</a></span>
867 +<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>
868 +<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
869 +<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>
870 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
871 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Attributes:</span>
872 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> connector_url (str): The url to the Wazuh-Indexer.</span>
873 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> connector_username (str): The username for the Wazuh-Indexer.</span>
874 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> connector_password (str): The password for the Wazuh-Indexer.</span>
875 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> es (Elasticsearch): The Elasticsearch client.</span>
876 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
877 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
878 +<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>
879 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="s2">&quot;wazuh-statistics&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
880 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="s2">&quot;wazuh-monitoring&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
881 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="p">}</span>
882 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
883 +<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>
884 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
885 +<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>
886 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
887 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
888 +<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>
889 +<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>
890 +<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>
891 +<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">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
892 +<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>
893 +<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>
894 +<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>
895 +<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>
896 +<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>
897 +<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>
898 +<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>
899 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
900 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
901 +<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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
902 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
903 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
904 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
905 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
906 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
907 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
908 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
909 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
910 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
911 +<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>
912 +<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>
913 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
914 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
915 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
916 +<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">-&gt;</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>
917 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
918 +<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 &quot;wazuh_&quot;</span>
919 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
920 +<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>
921 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
922 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
923 +<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>
924 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
925 +<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>
926 +<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>
927 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
928 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
929 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
930 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
931 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
932 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
933 +<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>
934 +<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">&quot;success&quot;</span><span class="p">]:</span>
935 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
936 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
937 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
938 +<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">&quot;indices_list&quot;</span><span class="p">]:</span>
939 +<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">&quot;wazuh_&quot;</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>
940 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
941 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
942 +<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>
943 +<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">&quot;success&quot;</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">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
944 +<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>
945 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
946 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
947 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;total_alerts&quot;</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">&quot;alerts&quot;</span><span class="p">]),</span>
948 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
949 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
950 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
951 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
952 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
953 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
954 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
955 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
956 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
957 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
958 +<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">-&gt;</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>
959 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
960 +<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>
961 +<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>
962 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
963 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Args:</span>
964 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> index_name (str): The name of the index to query.</span>
965 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
966 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
967 +<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>
968 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> &quot;&quot;&quot;</span>
969 +<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">&quot;Collecting alerts from </span><span class="si">{</span><span class="n">index_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
970 +<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>
971 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
972 +<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>
973 +<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">&quot;hits&quot;</span><span class="p">][</span><span class="s2">&quot;hits&quot;</span><span class="p">]]</span>
974 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">return</span> <span class="p">{</span>
975 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
976 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
977 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;alerts&quot;</span><span class="p">:</span> <span class="n">alerts_list</span><span class="p">,</span>
978 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="p">}</span>
979 +<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>
980 +<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">&quot;Failed to collect alerts: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
981 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect alerts&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
982 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
983 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="nd">@staticmethod</span>
984 +<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">-&gt;</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>
985 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
986 +<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>
987 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a><span class="sd"> the `syslog_level` field is `ALERT`.</span>
988 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a>
989 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a><span class="sd"> Returns:</span>
990 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a><span class="sd"> Dict[str, object]: A dictionary representing the Elasticsearch query.</span>
991 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a><span class="sd"> &quot;&quot;&quot;</span>
992 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="k">return</span> <span class="p">{</span>
993 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="p">{</span>
994 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;bool&quot;</span><span class="p">:</span> <span class="p">{</span>
995 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;should&quot;</span><span class="p">:</span> <span class="p">[</span>
996 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">{</span><span class="s2">&quot;range&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;rule_level&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;gte&quot;</span><span class="p">:</span> <span class="mi">12</span><span class="p">}}},</span>
997 +<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="p">{</span><span class="s2">&quot;match&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;syslog_level&quot;</span><span class="p">:</span> <span class="s2">&quot;ALERT&quot;</span><span class="p">}},</span>
998 +<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="p">],</span>
999 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="p">},</span>
1000 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="p">},</span>
1001 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;timestamp_utc&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="s2">&quot;desc&quot;</span><span class="p">}}],</span>
1002 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="p">}</span>
1003 </code></pre></div></td></tr></table></div>
1004 </details>
1005
@@ -1031,8 +1031,7 @@ available.</p>
1031
1032 <details class="quote">
1033 <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1034 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-24">24</a></span>
1035 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1034 + <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>
1035 <span class="normal"><a href="#__codelineno-0-26">26</a></span>
1036 <span class="normal"><a href="#__codelineno-0-27">27</a></span>
1037 <span class="normal"><a href="#__codelineno-0-28">28</a></span>
@@ -1047,23 +1046,24 @@ available.</p>
1046 <span class="normal"><a href="#__codelineno-0-37">37</a></span>
1047 <span class="normal"><a href="#__codelineno-0-38">38</a></span>
1048 <span class="normal"><a href="#__codelineno-0-39">39</a></span>
1050 -<span class="normal"><a href="#__codelineno-0-40">40</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1051 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1052 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Initializes the service by collecting Wazuh-Indexer details and creating an Elasticsearch client.</span>
1053 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> &quot;&quot;&quot;</span>
1054 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="p">(</span>
1055 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
1056 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
1057 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
1058 -<a id="__codelineno-0-32" name="__codelineno-0-32"></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">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
1059 -<a id="__codelineno-0-33" name="__codelineno-0-33"></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>
1060 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">],</span>
1061 -<a id="__codelineno-0-35" name="__codelineno-0-35"></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>
1062 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1063 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
1064 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">max_retries</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
1065 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">retry_on_timeout</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
1066 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="p">)</span>
1049 +<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1050 +<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>
1051 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1052 +<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>
1053 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> &quot;&quot;&quot;</span>
1054 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="p">(</span>
1055 +<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>
1056 +<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>
1057 +<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>
1058 +<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">&quot;Wazuh-Indexer&quot;</span><span class="p">)</span>
1059 +<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>
1060 +<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>
1061 +<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>
1062 +<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>
1063 +<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>
1064 +<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>
1065 +<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>
1066 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="p">)</span>
1067 </code></pre></div></td></tr></table></div>
1068 </details>
1069 </div>
@@ -1110,8 +1110,7 @@ Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p
1110
1111 <details class="quote">
1112 <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1113 - <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>
1114 -<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1113 + <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>
1114 <span class="normal"><a href="#__codelineno-0-59">59</a></span>
1115 <span class="normal"><a href="#__codelineno-0-60">60</a></span>
1116 <span class="normal"><a href="#__codelineno-0-61">61</a></span>
@@ -1150,47 +1149,48 @@ Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p
1149 <span class="normal"><a href="#__codelineno-0-94">94</a></span>
1150 <span class="normal"><a href="#__codelineno-0-95">95</a></span>
1151 <span class="normal"><a href="#__codelineno-0-96">96</a></span>
1153 -<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-57" name="__codelineno-0-57"></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">-&gt;</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>
1154 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1155 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> Collects the alerts from the Wazuh-Indexer where the index name starts with &quot;wazuh_&quot;</span>
1156 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1157 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns the 10 previous alerts based on the `timestamp_utc` field.</span>
1158 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
1159 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Returns:</span>
1160 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Dict[str, object]: A dictionary containing success status and alerts or an error message.</span>
1161 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> &quot;&quot;&quot;</span>
1162 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span>
1163 -<a id="__codelineno-0-67" name="__codelineno-0-67"></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>
1164 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">):</span>
1165 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
1166 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
1167 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1168 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
1169 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a>
1170 -<a id="__codelineno-0-74" name="__codelineno-0-74"></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>
1171 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">indices_list</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1172 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1173 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a>
1174 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1175 -<a id="__codelineno-0-79" name="__codelineno-0-79"></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">&quot;indices_list&quot;</span><span class="p">]:</span>
1176 -<a id="__codelineno-0-80" name="__codelineno-0-80"></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">&quot;wazuh_&quot;</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>
1177 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">continue</span>
1178 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a>
1179 -<a id="__codelineno-0-83" name="__codelineno-0-83"></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>
1180 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">if</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;success&quot;</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">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1181 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="n">alerts_summary</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
1182 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">{</span>
1183 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1184 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;total_alerts&quot;</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">&quot;alerts&quot;</span><span class="p">]),</span>
1185 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
1186 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="p">},</span>
1187 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">)</span>
1188 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1189 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">return</span> <span class="p">{</span>
1190 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1191 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1192 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1193 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">}</span>
1152 +<span class="normal"><a href="#__codelineno-0-97">97</a></span>
1153 +<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">-&gt;</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>
1154 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1155 +<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 &quot;wazuh_&quot;</span>
1156 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> and is not in the SKIP_INDEX_NAMES list.</span>
1157 +<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>
1158 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a>
1159 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> Returns:</span>
1160 +<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>
1161 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
1162 +<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>
1163 +<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>
1164 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="p">):</span>
1165 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="k">return</span> <span class="p">{</span>
1166 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Wazuh-Indexer details&quot;</span><span class="p">,</span>
1167 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1168 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1169 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1170 +<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>
1171 +<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">&quot;success&quot;</span><span class="p">]:</span>
1172 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect indices&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
1173 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1174 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">alerts_summary</span> <span class="o">=</span> <span class="p">[]</span>
1175 +<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">&quot;indices_list&quot;</span><span class="p">]:</span>
1176 +<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">&quot;wazuh_&quot;</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>
1177 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">continue</span>
1178 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1179 +<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>
1180 +<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">&quot;success&quot;</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">&quot;alerts&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1181 +<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>
1182 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="p">{</span>
1183 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;index_name&quot;</span><span class="p">:</span> <span class="n">index_name</span><span class="p">,</span>
1184 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;total_alerts&quot;</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">&quot;alerts&quot;</span><span class="p">]),</span>
1185 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;last_10_alerts&quot;</span><span class="p">:</span> <span class="n">alerts</span><span class="p">[</span><span class="s2">&quot;alerts&quot;</span><span class="p">],</span>
1186 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">},</span>
1187 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">)</span>
1188 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a>
1189 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span>
1190 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected alerts&quot;</span><span class="p">,</span>
1191 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1192 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="s2">&quot;alerts_summary&quot;</span><span class="p">:</span> <span class="n">alerts_summary</span><span class="p">,</span>
1193 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">}</span>
1194 </code></pre></div></td></tr></table></div>
1195 </details>
1196 </div>
@@ -1263,8 +1263,7 @@ Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p
1263
1264 <details class="quote">
1265 <summary>Source code in <code>app\services\WazuhIndexer\alerts.py</code></summary>
1266 - <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>
1267 -<span class="normal"><a href="#__codelineno-0-43">43</a></span>
1266 + <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>
1267 <span class="normal"><a href="#__codelineno-0-44">44</a></span>
1268 <span class="normal"><a href="#__codelineno-0-45">45</a></span>
1269 <span class="normal"><a href="#__codelineno-0-46">46</a></span>
@@ -1276,20 +1275,21 @@ Returns the 10 previous alerts based on the <code>timestamp_utc</code> field.</p
1275 <span class="normal"><a href="#__codelineno-0-52">52</a></span>
1276 <span class="normal"><a href="#__codelineno-0-53">53</a></span>
1277 <span class="normal"><a href="#__codelineno-0-54">54</a></span>
1279 -<span class="normal"><a href="#__codelineno-0-55">55</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">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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1280 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1281 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1282 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1283 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
1284 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> index_name (str): The name of the index.</span>
1285 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1286 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1287 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1288 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
1289 -<a id="__codelineno-0-52" name="__codelineno-0-52"></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>
1290 -<a id="__codelineno-0-53" name="__codelineno-0-53"></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>
1291 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="kc">True</span>
1292 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">False</span>
1278 +<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1279 +<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">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
1280 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1281 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Checks whether the given index name should be skipped.</span>
1282 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1283 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> Args:</span>
1284 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> index_name (str): The name of the index.</span>
1285 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
1286 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> Returns:</span>
1287 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> bool: True if the index should be skipped, False otherwise.</span>
1288 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1289 +<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>
1290 +<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>
1291 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="kc">True</span>
1292 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="kc">False</span>
1293 </code></pre></div></td></tr></table></div>
1294 </details>
1295 </div>
backend/site/artifacts/index.html
+362 -362
@@ -1038,12 +1038,7 @@ It collects the artifact name and client name from the request body and returns
1038
1039 <details class="quote">
1040 <summary>Source code in <code>app\routes\velociraptor.py</code></summary>
1041 - <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>
1042 -<span class="normal"><a href="#__codelineno-0-70"> 70</a></span>
1043 -<span class="normal"><a href="#__codelineno-0-71"> 71</a></span>
1044 -<span class="normal"><a href="#__codelineno-0-72"> 72</a></span>
1045 -<span class="normal"><a href="#__codelineno-0-73"> 73</a></span>
1046 -<span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1041 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-74"> 74</a></span>
1042 <span class="normal"><a href="#__codelineno-0-75"> 75</a></span>
1043 <span class="normal"><a href="#__codelineno-0-76"> 76</a></span>
1044 <span class="normal"><a href="#__codelineno-0-77"> 77</a></span>
@@ -1071,40 +1066,45 @@ It collects the artifact name and client name from the request body and returns
1066 <span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1067 <span class="normal"><a href="#__codelineno-0-100">100</a></span>
1068 <span class="normal"><a href="#__codelineno-0-101">101</a></span>
1074 -<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-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">&quot;/velociraptor/artifacts/collection&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1075 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="k">def</span> <span class="nf">collect_artifact</span><span class="p">():</span>
1076 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1077 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> Endpoint to collect an artifact.</span>
1078 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> It collects the artifact name and client name from the request body and returns the results.</span>
1079 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1080 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Returns:</span>
1081 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> json: A JSON response containing the result of the artifact collection operation.</span>
1082 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> &quot;&quot;&quot;</span>
1083 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">req_data</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">get_json</span><span class="p">()</span>
1084 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="n">artifact_name</span> <span class="o">=</span> <span class="n">req_data</span><span class="p">[</span><span class="s2">&quot;artifact_name&quot;</span><span class="p">]</span>
1085 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">client_name</span> <span class="o">=</span> <span class="n">req_data</span><span class="p">[</span><span class="s2">&quot;client_name&quot;</span><span class="p">]</span>
1086 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
1087 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">client_id</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_client_id</span><span class="p">(</span><span class="n">client_name</span><span class="o">=</span><span class="n">client_name</span><span class="p">)[</span><span class="s2">&quot;results&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span>
1088 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="s2">&quot;client_id&quot;</span>
1089 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">]</span>
1090 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">if</span> <span class="n">client_id</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1091 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">return</span> <span class="p">(</span>
1092 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">jsonify</span><span class="p">(</span>
1093 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="p">{</span>
1094 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">client_name</span><span class="si">}</span><span class="s2"> has not been seen in the last 30 seconds and may not be online with the &quot;</span>
1095 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="s2">&quot;Velociraptor server.&quot;</span><span class="p">,</span>
1096 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1097 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="p">},</span>
1098 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">),</span>
1099 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="mi">500</span><span class="p">,</span>
1100 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="p">)</span>
1101 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
1102 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="n">artifact_service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1103 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="n">artifact_results</span> <span class="o">=</span> <span class="n">artifact_service</span><span class="o">.</span><span class="n">run_artifact_collection</span><span class="p">(</span>
1104 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">client_id</span><span class="o">=</span><span class="n">client_id</span><span class="p">,</span>
1105 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">artifact</span><span class="o">=</span><span class="n">artifact_name</span><span class="p">,</span>
1106 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="p">)</span>
1107 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">return</span> <span class="n">artifact_results</span>
1069 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1070 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1071 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1072 +<span class="normal"><a href="#__codelineno-0-105">105</a></span>
1073 +<span class="normal"><a href="#__codelineno-0-106">106</a></span>
1074 +<span class="normal"><a href="#__codelineno-0-107">107</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/collection&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1075 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="k">def</span> <span class="nf">collect_artifact</span><span class="p">():</span>
1076 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1077 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Endpoint to collect an artifact.</span>
1078 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> It collects the artifact name and client name from the request body and returns the results.</span>
1079 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a>
1080 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> Returns:</span>
1081 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> json: A JSON response containing the result of the artifact collection operation.</span>
1082 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="sd"> &quot;&quot;&quot;</span>
1083 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="n">req_data</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">get_json</span><span class="p">()</span>
1084 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">artifact_name</span> <span class="o">=</span> <span class="n">req_data</span><span class="p">[</span><span class="s2">&quot;artifact_name&quot;</span><span class="p">]</span>
1085 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="n">client_name</span> <span class="o">=</span> <span class="n">req_data</span><span class="p">[</span><span class="s2">&quot;client_name&quot;</span><span class="p">]</span>
1086 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">UniversalService</span><span class="p">()</span>
1087 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">client_id</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">get_client_id</span><span class="p">(</span><span class="n">client_name</span><span class="o">=</span><span class="n">client_name</span><span class="p">)[</span><span class="s2">&quot;results&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span>
1088 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="s2">&quot;client_id&quot;</span>
1089 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="p">]</span>
1090 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">if</span> <span class="n">client_id</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1091 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="p">(</span>
1092 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="n">jsonify</span><span class="p">(</span>
1093 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">{</span>
1094 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">client_name</span><span class="si">}</span><span class="s2"> has not been seen in the last 30 seconds and may not be online with the &quot;</span>
1095 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="s2">&quot;Velociraptor server.&quot;</span><span class="p">,</span>
1096 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1097 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="p">},</span>
1098 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="p">),</span>
1099 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="mi">500</span><span class="p">,</span>
1100 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="p">)</span>
1101 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
1102 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">artifact_service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1103 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">artifact_results</span> <span class="o">=</span> <span class="n">artifact_service</span><span class="o">.</span><span class="n">run_artifact_collection</span><span class="p">(</span>
1104 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="n">client_id</span><span class="o">=</span><span class="n">client_id</span><span class="p">,</span>
1105 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="n">artifact</span><span class="o">=</span><span class="n">artifact_name</span><span class="p">,</span>
1106 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a> <span class="p">)</span>
1107 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">return</span> <span class="n">artifact_results</span>
1108 </code></pre></div></td></tr></table></div>
1109 </details>
1110 </div>
@@ -1158,8 +1158,7 @@ It processes each artifact to verify the connection and returns the results.</p>
1158
1159 <details class="quote">
1160 <summary>Source code in <code>app\routes\velociraptor.py</code></summary>
1161 - <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>
1162 -<span class="normal"><a href="#__codelineno-0-11">11</a></span>
1161 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-11">11</a></span>
1162 <span class="normal"><a href="#__codelineno-0-12">12</a></span>
1163 <span class="normal"><a href="#__codelineno-0-13">13</a></span>
1164 <span class="normal"><a href="#__codelineno-0-14">14</a></span>
@@ -1170,19 +1169,20 @@ It processes each artifact to verify the connection and returns the results.</p>
1169 <span class="normal"><a href="#__codelineno-0-19">19</a></span>
1170 <span class="normal"><a href="#__codelineno-0-20">20</a></span>
1171 <span class="normal"><a href="#__codelineno-0-21">21</a></span>
1173 -<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-10" name="__codelineno-0-10"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1174 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="k">def</span> <span class="nf">get_artifacts</span><span class="p">():</span>
1175 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1176 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Endpoint to list all available artifacts.</span>
1177 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> It processes each artifact to verify the connection and returns the results.</span>
1178 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
1179 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Returns:</span>
1180 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> json: A JSON response containing the list of all available artifacts along with their connection verification</span>
1181 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> status.</span>
1182 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> &quot;&quot;&quot;</span>
1183 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1184 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts</span><span class="p">()</span>
1185 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">artifacts</span>
1172 +<span class="normal"><a href="#__codelineno-0-22">22</a></span>
1173 +<span class="normal"><a href="#__codelineno-0-23">23</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1174 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="k">def</span> <span class="nf">get_artifacts</span><span class="p">():</span>
1175 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1176 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> Endpoint to list all available artifacts.</span>
1177 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> It processes each artifact to verify the connection and returns the results.</span>
1178 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
1179 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Returns:</span>
1180 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> json: A JSON response containing the list of all available artifacts along with their connection verification</span>
1181 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> status.</span>
1182 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> &quot;&quot;&quot;</span>
1183 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1184 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts</span><span class="p">()</span>
1185 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="k">return</span> <span class="n">artifacts</span>
1186 </code></pre></div></td></tr></table></div>
1187 </details>
1188 </div>
@@ -1237,9 +1237,7 @@ begins with <code>Linux</code>.</p>
1237
1238 <details class="quote">
1239 <summary>Source code in <code>app\routes\velociraptor.py</code></summary>
1240 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-24">24</a></span>
1241 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1242 -<span class="normal"><a href="#__codelineno-0-26">26</a></span>
1240 + <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>
1241 <span class="normal"><a href="#__codelineno-0-27">27</a></span>
1242 <span class="normal"><a href="#__codelineno-0-28">28</a></span>
1243 <span class="normal"><a href="#__codelineno-0-29">29</a></span>
@@ -1250,20 +1248,22 @@ begins with <code>Linux</code>.</p>
1248 <span class="normal"><a href="#__codelineno-0-34">34</a></span>
1249 <span class="normal"><a href="#__codelineno-0-35">35</a></span>
1250 <span class="normal"><a href="#__codelineno-0-36">36</a></span>
1253 -<span class="normal"><a href="#__codelineno-0-37">37</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/linux&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1254 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="k">def</span> <span class="nf">get_artifacts_linux</span><span class="p">():</span>
1255 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1256 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Endpoint to list all available Linux artifacts.</span>
1257 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> It processes each artifact to verify the connection and returns the results where the name</span>
1258 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> begins with `Linux`.</span>
1259 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a>
1260 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> Returns:</span>
1261 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> json: A JSON response containing the list of all available Linux artifacts along with their connection verification</span>
1262 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> status.</span>
1263 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> &quot;&quot;&quot;</span>
1264 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1265 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="n">linux_artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts_linux</span><span class="p">()</span>
1266 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="n">linux_artifacts</span>
1251 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1252 +<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1253 +<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-26" name="__codelineno-0-26"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/linux&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1254 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="k">def</span> <span class="nf">get_artifacts_linux</span><span class="p">():</span>
1255 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1256 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> Endpoint to list all available Linux artifacts.</span>
1257 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> It processes each artifact to verify the connection and returns the results where the name</span>
1258 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> begins with `Linux`.</span>
1259 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1260 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1261 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> json: A JSON response containing the list of all available Linux artifacts along with their connection verification</span>
1262 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> status.</span>
1263 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> &quot;&quot;&quot;</span>
1264 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1265 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">linux_artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts_linux</span><span class="p">()</span>
1266 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="n">linux_artifacts</span>
1267 </code></pre></div></td></tr></table></div>
1268 </details>
1269 </div>
@@ -1318,11 +1318,7 @@ begins with <code>MacOS</code>.</p>
1318
1319 <details class="quote">
1320 <summary>Source code in <code>app\routes\velociraptor.py</code></summary>
1321 - <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>
1322 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1323 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1324 -<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1325 -<span class="normal"><a href="#__codelineno-0-58">58</a></span>
1321 + <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>
1322 <span class="normal"><a href="#__codelineno-0-59">59</a></span>
1323 <span class="normal"><a href="#__codelineno-0-60">60</a></span>
1324 <span class="normal"><a href="#__codelineno-0-61">61</a></span>
@@ -1331,20 +1327,24 @@ begins with <code>MacOS</code>.</p>
1327 <span class="normal"><a href="#__codelineno-0-64">64</a></span>
1328 <span class="normal"><a href="#__codelineno-0-65">65</a></span>
1329 <span class="normal"><a href="#__codelineno-0-66">66</a></span>
1334 -<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-54" name="__codelineno-0-54"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/mac&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1335 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="k">def</span> <span class="nf">get_artifacts_mac</span><span class="p">():</span>
1336 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1337 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> Endpoint to list all available MacOS artifacts.</span>
1338 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> It processes each artifact to verify the connection and returns the results where the name</span>
1339 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> begins with `MacOS`.</span>
1340 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1341 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns:</span>
1342 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> json: A JSON response containing the list of all available MacOS artifacts along with their connection verification</span>
1343 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> status.</span>
1344 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> &quot;&quot;&quot;</span>
1345 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1346 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">mac_artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts_macos</span><span class="p">()</span>
1347 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="n">mac_artifacts</span>
1330 +<span class="normal"><a href="#__codelineno-0-67">67</a></span>
1331 +<span class="normal"><a href="#__codelineno-0-68">68</a></span>
1332 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1333 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1334 +<span class="normal"><a href="#__codelineno-0-71">71</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="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/mac&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1335 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="k">def</span> <span class="nf">get_artifacts_mac</span><span class="p">():</span>
1336 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1337 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Endpoint to list all available MacOS artifacts.</span>
1338 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> It processes each artifact to verify the connection and returns the results where the name</span>
1339 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> begins with `MacOS`.</span>
1340 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1341 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1342 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> json: A JSON response containing the list of all available MacOS artifacts along with their connection verification</span>
1343 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> status.</span>
1344 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> &quot;&quot;&quot;</span>
1345 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1346 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">mac_artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts_macos</span><span class="p">()</span>
1347 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">return</span> <span class="n">mac_artifacts</span>
1348 </code></pre></div></td></tr></table></div>
1349 </details>
1350 </div>
@@ -1399,10 +1399,7 @@ begins with <code>Windows</code>.</p>
1399
1400 <details class="quote">
1401 <summary>Source code in <code>app\routes\velociraptor.py</code></summary>
1402 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-39">39</a></span>
1403 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1404 -<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1405 -<span class="normal"><a href="#__codelineno-0-42">42</a></span>
1402 + <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>
1403 <span class="normal"><a href="#__codelineno-0-43">43</a></span>
1404 <span class="normal"><a href="#__codelineno-0-44">44</a></span>
1405 <span class="normal"><a href="#__codelineno-0-45">45</a></span>
@@ -1412,20 +1409,23 @@ begins with <code>Windows</code>.</p>
1409 <span class="normal"><a href="#__codelineno-0-49">49</a></span>
1410 <span class="normal"><a href="#__codelineno-0-50">50</a></span>
1411 <span class="normal"><a href="#__codelineno-0-51">51</a></span>
1415 -<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-39" name="__codelineno-0-39"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/windows&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1416 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="k">def</span> <span class="nf">get_artifacts_windows</span><span class="p">():</span>
1417 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1418 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> Endpoint to list all available Windows artifacts.</span>
1419 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> It processes each artifact to verify the connection and returns the results where the name</span>
1420 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> begins with `Windows`.</span>
1421 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1422 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Returns:</span>
1423 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> json: A JSON response containing the list of all available Windows artifacts along with their connection verification</span>
1424 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> status.</span>
1425 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> &quot;&quot;&quot;</span>
1426 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1427 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">windows_artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts_windows</span><span class="p">()</span>
1428 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">return</span> <span class="n">windows_artifacts</span>
1412 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1413 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1414 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1415 +<span class="normal"><a href="#__codelineno-0-55">55</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="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/velociraptor/artifacts/windows&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1416 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="k">def</span> <span class="nf">get_artifacts_windows</span><span class="p">():</span>
1417 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1418 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Endpoint to list all available Windows artifacts.</span>
1419 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> It processes each artifact to verify the connection and returns the results where the name</span>
1420 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> begins with `Windows`.</span>
1421 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1422 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1423 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> json: A JSON response containing the list of all available Windows artifacts along with their connection verification</span>
1424 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> status.</span>
1425 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> &quot;&quot;&quot;</span>
1426 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ArtifactsService</span><span class="p">()</span>
1427 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">windows_artifacts</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">collect_artifacts_windows</span><span class="p">()</span>
1428 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="n">windows_artifacts</span>
1429 </code></pre></div></td></tr></table></div>
1430 </details>
1431 </div>
@@ -1478,9 +1478,7 @@ begins with <code>Windows</code>.</p>
1478
1479 <details class="quote">
1480 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
1481 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
1482 -<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
1483 -<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
1481 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
1482 <span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
1483 <span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
1484 <span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
@@ -1610,139 +1608,141 @@ begins with <code>Windows</code>.</p>
1608 <span class="normal"><a href="#__codelineno-0-133">133</a></span>
1609 <span class="normal"><a href="#__codelineno-0-134">134</a></span>
1610 <span class="normal"><a href="#__codelineno-0-135">135</a></span>
1613 -<span class="normal"><a href="#__codelineno-0-136">136</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-4" name="__codelineno-0-4"></a><span class="k">class</span> <span class="nc">ArtifactsService</span><span class="p">:</span>
1614 -<a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1615 -<a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="sd"> A service class that encapsulates the logic for pulling artifacts from Velociraptor.</span>
1616 -<a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="sd"> &quot;&quot;&quot;</span>
1617 -<a id="__codelineno-0-8" name="__codelineno-0-8"></a>
1618 -<a id="__codelineno-0-9" name="__codelineno-0-9"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1619 -<a id="__codelineno-0-10" name="__codelineno-0-10"></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>
1620 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a>
1621 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a> <span class="k">def</span> <span class="nf">_create_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1622 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1623 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="sd"> Create a query string.</span>
1624 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a>
1625 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Args:</span>
1626 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> query (str): The query to be executed.</span>
1627 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
1628 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> Returns:</span>
1629 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> str: The created query string.</span>
1630 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
1631 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">query</span>
1632 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
1633 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">def</span> <span class="nf">_get_artifact_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">artifact</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1634 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1635 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="sd"> Construct the artifact key.</span>
1636 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a>
1637 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Args:</span>
1638 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="sd"> client_id (str): The ID of the client.</span>
1639 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> artifact (str): The name of the artifact.</span>
1640 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
1641 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> Returns:</span>
1642 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> str: The constructed artifact key.</span>
1643 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> &quot;&quot;&quot;</span>
1644 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;collect_client(client_id=&#39;</span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">&#39;, artifacts=[&#39;</span><span class="si">{</span><span class="n">artifact</span><span class="si">}</span><span class="s2">&#39;])&quot;</span>
1645 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
1646 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">def</span> <span class="nf">collect_artifacts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1647 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1648 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Collect the artifacts from Velociraptor.</span>
1649 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
1650 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Returns:</span>
1651 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1652 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> &quot;&quot;&quot;</span>
1653 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_query</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM artifact_definitions()&quot;</span><span class="p">)</span>
1654 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
1655 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a>
1656 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">def</span> <span class="nf">collect_artifacts_prefixed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1657 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1658 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with a specific prefix.</span>
1659 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
1660 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> Args:</span>
1661 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> prefix (str): The prefix to filter the artifacts.</span>
1662 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
1663 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Returns:</span>
1664 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1665 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> &quot;&quot;&quot;</span>
1666 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">artifacts_response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts</span><span class="p">()</span>
1667 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1668 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="n">artifacts_response</span>
1669 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1670 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">filtered_artifacts</span> <span class="o">=</span> <span class="p">[</span>
1671 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">artifact</span>
1672 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">for</span> <span class="n">artifact</span> <span class="ow">in</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">]</span>
1673 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">if</span> <span class="n">artifact</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
1674 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">]</span>
1675 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
1676 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span>
1677 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1678 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected </span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2"> artifacts&quot;</span><span class="p">,</span>
1679 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;artifacts&quot;</span><span class="p">:</span> <span class="n">filtered_artifacts</span><span class="p">,</span>
1680 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">}</span>
1681 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
1682 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">def</span> <span class="nf">collect_artifacts_linux</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1683 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1684 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Linux`.</span>
1685 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
1686 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Returns:</span>
1687 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1688 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> &quot;&quot;&quot;</span>
1689 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Linux.&quot;</span><span class="p">)</span>
1690 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
1691 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">def</span> <span class="nf">collect_artifacts_windows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1692 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1693 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Windows`.</span>
1694 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
1695 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Returns:</span>
1696 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1697 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> &quot;&quot;&quot;</span>
1698 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Windows.&quot;</span><span class="p">)</span>
1699 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
1700 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">def</span> <span class="nf">collect_artifacts_macos</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1701 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1702 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `MacOS`.</span>
1703 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a>
1704 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sd"> Returns:</span>
1705 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1706 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> &quot;&quot;&quot;</span>
1707 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;MacOS.&quot;</span><span class="p">)</span>
1708 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1709 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">def</span> <span class="nf">run_artifact_collection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">artifact</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1710 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1711 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Run an artifact collection on a specific client.</span>
1712 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
1713 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Args:</span>
1714 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> client_id (str): The ID of the client.</span>
1715 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> artifact (str): The name of the artifact.</span>
1716 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
1717 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
1718 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the results.</span>
1719 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> &quot;&quot;&quot;</span>
1720 -<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">try</span><span class="p">:</span>
1721 -<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">_create_query</span><span class="p">(</span>
1722 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="sa">f</span><span class="s2">&quot;SELECT collect_client(client_id=&#39;</span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">&#39;, artifacts=[&#39;</span><span class="si">{</span><span class="n">artifact</span><span class="si">}</span><span class="s2">&#39;]) FROM scope()&quot;</span><span class="p">,</span>
1723 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="p">)</span>
1724 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">flow</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">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
1725 -<a id="__codelineno-0-116" name="__codelineno-0-116"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1726 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
1727 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">artifact_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_artifact_key</span><span class="p">(</span><span class="n">client_id</span><span class="p">,</span> <span class="n">artifact</span><span class="p">)</span>
1728 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="n">flow_id</span> <span class="o">=</span> <span class="n">flow</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="n">artifact_key</span><span class="p">][</span><span class="s2">&quot;flow_id&quot;</span><span class="p">]</span>
1729 -<a id="__codelineno-0-120" name="__codelineno-0-120"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1730 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
1731 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">completed</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">watch_flow_completion</span><span class="p">(</span><span class="n">flow_id</span><span class="p">)</span>
1732 -<a id="__codelineno-0-123" name="__codelineno-0-123"></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">&quot;Successfully watched flow completion on </span><span class="si">{</span><span class="n">completed</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1733 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
1734 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="n">results</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">read_collection_results</span><span class="p">(</span>
1735 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">client_id</span><span class="p">,</span>
1736 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">flow_id</span><span class="p">,</span>
1737 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">artifact</span><span class="p">,</span>
1738 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="p">)</span>
1739 -<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="k">return</span> <span class="n">results</span>
1740 -<a id="__codelineno-0-131" name="__codelineno-0-131"></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>
1741 -<a id="__codelineno-0-132" name="__codelineno-0-132"></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">&quot;Failed to run artifact collection: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1742 -<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">return</span> <span class="p">{</span>
1743 -<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to run artifact collection&quot;</span><span class="p">,</span>
1744 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1745 -<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="p">}</span>
1611 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
1612 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
1613 +<span class="normal"><a href="#__codelineno-0-138">138</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="k">class</span> <span class="nc">ArtifactsService</span><span class="p">:</span>
1614 +<a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1615 +<a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="sd"> A service class that encapsulates the logic for pulling artifacts from Velociraptor.</span>
1616 +<a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="sd"> &quot;&quot;&quot;</span>
1617 +<a id="__codelineno-0-10" name="__codelineno-0-10"></a>
1618 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1619 +<a id="__codelineno-0-12" name="__codelineno-0-12"></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>
1620 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
1621 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a> <span class="k">def</span> <span class="nf">_create_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1622 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1623 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Create a query string.</span>
1624 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
1625 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Args:</span>
1626 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> query (str): The query to be executed.</span>
1627 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
1628 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Returns:</span>
1629 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> str: The created query string.</span>
1630 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
1631 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">query</span>
1632 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
1633 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">def</span> <span class="nf">_get_artifact_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">artifact</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
1634 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1635 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Construct the artifact key.</span>
1636 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
1637 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
1638 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> client_id (str): The ID of the client.</span>
1639 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> artifact (str): The name of the artifact.</span>
1640 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a>
1641 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> Returns:</span>
1642 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> str: The constructed artifact key.</span>
1643 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> &quot;&quot;&quot;</span>
1644 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;collect_client(client_id=&#39;</span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">&#39;, artifacts=[&#39;</span><span class="si">{</span><span class="n">artifact</span><span class="si">}</span><span class="s2">&#39;])&quot;</span>
1645 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
1646 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">def</span> <span class="nf">collect_artifacts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1647 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1648 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Collect the artifacts from Velociraptor.</span>
1649 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
1650 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
1651 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1652 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;&quot;&quot;</span>
1653 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_query</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM artifact_definitions()&quot;</span><span class="p">)</span>
1654 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
1655 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1656 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">def</span> <span class="nf">collect_artifacts_prefixed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1657 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1658 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with a specific prefix.</span>
1659 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a>
1660 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> Args:</span>
1661 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> prefix (str): The prefix to filter the artifacts.</span>
1662 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
1663 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
1664 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1665 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
1666 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">artifacts_response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts</span><span class="p">()</span>
1667 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
1668 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="n">artifacts_response</span>
1669 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
1670 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">filtered_artifacts</span> <span class="o">=</span> <span class="p">[</span>
1671 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">artifact</span>
1672 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">for</span> <span class="n">artifact</span> <span class="ow">in</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">]</span>
1673 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">if</span> <span class="n">artifact</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
1674 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">]</span>
1675 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
1676 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
1677 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
1678 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected </span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2"> artifacts&quot;</span><span class="p">,</span>
1679 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;artifacts&quot;</span><span class="p">:</span> <span class="n">filtered_artifacts</span><span class="p">,</span>
1680 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
1681 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a>
1682 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">def</span> <span class="nf">collect_artifacts_linux</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1683 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1684 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Linux`.</span>
1685 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1686 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Returns:</span>
1687 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1688 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> &quot;&quot;&quot;</span>
1689 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Linux.&quot;</span><span class="p">)</span>
1690 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1691 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">def</span> <span class="nf">collect_artifacts_windows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1692 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1693 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Windows`.</span>
1694 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
1695 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Returns:</span>
1696 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1697 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> &quot;&quot;&quot;</span>
1698 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Windows.&quot;</span><span class="p">)</span>
1699 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
1700 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">def</span> <span class="nf">collect_artifacts_macos</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1701 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1702 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `MacOS`.</span>
1703 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
1704 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> Returns:</span>
1705 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1706 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> &quot;&quot;&quot;</span>
1707 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;MacOS.&quot;</span><span class="p">)</span>
1708 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
1709 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="k">def</span> <span class="nf">run_artifact_collection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">artifact</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1710 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1711 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Run an artifact collection on a specific client.</span>
1712 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
1713 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Args:</span>
1714 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> client_id (str): The ID of the client.</span>
1715 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> artifact (str): The name of the artifact.</span>
1716 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
1717 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> Returns:</span>
1718 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the results.</span>
1719 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &quot;&quot;&quot;</span>
1720 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
1721 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_query</span><span class="p">(</span>
1722 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="sa">f</span><span class="s2">&quot;SELECT collect_client(client_id=&#39;</span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">&#39;, artifacts=[&#39;</span><span class="si">{</span><span class="n">artifact</span><span class="si">}</span><span class="s2">&#39;]) FROM scope()&quot;</span><span class="p">,</span>
1723 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="p">)</span>
1724 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">flow</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">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
1725 +<a id="__codelineno-0-118" name="__codelineno-0-118"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1726 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a>
1727 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="n">artifact_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_artifact_key</span><span class="p">(</span><span class="n">client_id</span><span class="p">,</span> <span class="n">artifact</span><span class="p">)</span>
1728 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">flow_id</span> <span class="o">=</span> <span class="n">flow</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="n">artifact_key</span><span class="p">][</span><span class="s2">&quot;flow_id&quot;</span><span class="p">]</span>
1729 +<a id="__codelineno-0-122" name="__codelineno-0-122"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1730 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a>
1731 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">completed</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">watch_flow_completion</span><span class="p">(</span><span class="n">flow_id</span><span class="p">)</span>
1732 +<a id="__codelineno-0-125" name="__codelineno-0-125"></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">&quot;Successfully watched flow completion on </span><span class="si">{</span><span class="n">completed</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1733 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a>
1734 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">results</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">read_collection_results</span><span class="p">(</span>
1735 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">client_id</span><span class="p">,</span>
1736 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="n">flow_id</span><span class="p">,</span>
1737 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="n">artifact</span><span class="p">,</span>
1738 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="p">)</span>
1739 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="k">return</span> <span class="n">results</span>
1740 +<a id="__codelineno-0-133" name="__codelineno-0-133"></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>
1741 +<a id="__codelineno-0-134" name="__codelineno-0-134"></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">&quot;Failed to run artifact collection: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
1742 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">return</span> <span class="p">{</span>
1743 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to run artifact collection&quot;</span><span class="p">,</span>
1744 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
1745 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">}</span>
1746 </code></pre></div></td></tr></table></div>
1747 </details>
1748
@@ -1796,23 +1796,23 @@ begins with <code>Windows</code>.</p>
1796
1797 <details class="quote">
1798 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
1799 - <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>
1800 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1801 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1799 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-39">39</a></span>
1800 <span class="normal"><a href="#__codelineno-0-40">40</a></span>
1801 <span class="normal"><a href="#__codelineno-0-41">41</a></span>
1802 <span class="normal"><a href="#__codelineno-0-42">42</a></span>
1803 <span class="normal"><a href="#__codelineno-0-43">43</a></span>
1804 <span class="normal"><a href="#__codelineno-0-44">44</a></span>
1807 -<span class="normal"><a href="#__codelineno-0-45">45</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_artifacts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1808 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1809 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Collect the artifacts from Velociraptor.</span>
1810 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
1811 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Returns:</span>
1812 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1813 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> &quot;&quot;&quot;</span>
1814 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_query</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM artifact_definitions()&quot;</span><span class="p">)</span>
1815 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
1805 +<span class="normal"><a href="#__codelineno-0-45">45</a></span>
1806 +<span class="normal"><a href="#__codelineno-0-46">46</a></span>
1807 +<span class="normal"><a href="#__codelineno-0-47">47</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="k">def</span> <span class="nf">collect_artifacts</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1808 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1809 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Collect the artifacts from Velociraptor.</span>
1810 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a>
1811 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> Returns:</span>
1812 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1813 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> &quot;&quot;&quot;</span>
1814 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_query</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM artifact_definitions()&quot;</span><span class="p">)</span>
1815 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">universal_service</span><span class="o">.</span><span class="n">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
1816 </code></pre></div></td></tr></table></div>
1817 </details>
1818 </div>
@@ -1857,21 +1857,21 @@ begins with <code>Windows</code>.</p>
1857
1858 <details class="quote">
1859 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
1860 - <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>
1861 -<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1862 -<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1860 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-75">75</a></span>
1861 <span class="normal"><a href="#__codelineno-0-76">76</a></span>
1862 <span class="normal"><a href="#__codelineno-0-77">77</a></span>
1863 <span class="normal"><a href="#__codelineno-0-78">78</a></span>
1864 <span class="normal"><a href="#__codelineno-0-79">79</a></span>
1867 -<span class="normal"><a href="#__codelineno-0-80">80</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">def</span> <span class="nf">collect_artifacts_linux</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1868 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1869 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Linux`.</span>
1870 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
1871 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Returns:</span>
1872 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1873 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> &quot;&quot;&quot;</span>
1874 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Linux.&quot;</span><span class="p">)</span>
1865 +<span class="normal"><a href="#__codelineno-0-80">80</a></span>
1866 +<span class="normal"><a href="#__codelineno-0-81">81</a></span>
1867 +<span class="normal"><a href="#__codelineno-0-82">82</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="k">def</span> <span class="nf">collect_artifacts_linux</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1868 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1869 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Linux`.</span>
1870 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1871 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Returns:</span>
1872 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1873 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> &quot;&quot;&quot;</span>
1874 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Linux.&quot;</span><span class="p">)</span>
1875 </code></pre></div></td></tr></table></div>
1876 </details>
1877 </div>
@@ -1916,21 +1916,21 @@ begins with <code>Windows</code>.</p>
1916
1917 <details class="quote">
1918 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
1919 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-91">91</a></span>
1920 -<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1921 -<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1922 -<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1923 -<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1924 -<span class="normal"><a href="#__codelineno-0-96">96</a></span>
1925 -<span class="normal"><a href="#__codelineno-0-97">97</a></span>
1926 -<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-91" name="__codelineno-0-91"></a><span class="k">def</span> <span class="nf">collect_artifacts_macos</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1927 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1928 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `MacOS`.</span>
1929 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a>
1930 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sd"> Returns:</span>
1931 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1932 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> &quot;&quot;&quot;</span>
1933 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;MacOS.&quot;</span><span class="p">)</span>
1919 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
1920 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
1921 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
1922 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1923 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1924 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1925 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1926 +<span class="normal"><a href="#__codelineno-0-100">100</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="k">def</span> <span class="nf">collect_artifacts_macos</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
1927 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1928 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `MacOS`.</span>
1929 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
1930 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="sd"> Returns:</span>
1931 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
1932 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a><span class="sd"> &quot;&quot;&quot;</span>
1933 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;MacOS.&quot;</span><span class="p">)</span>
1934 </code></pre></div></td></tr></table></div>
1935 </details>
1936 </div>
@@ -2003,9 +2003,7 @@ begins with <code>Windows</code>.</p>
2003
2004 <details class="quote">
2005 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
2006 - <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>
2007 -<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2008 -<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2006 + <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>
2007 <span class="normal"><a href="#__codelineno-0-50">50</a></span>
2008 <span class="normal"><a href="#__codelineno-0-51">51</a></span>
2009 <span class="normal"><a href="#__codelineno-0-52">52</a></span>
@@ -2027,31 +2025,33 @@ begins with <code>Windows</code>.</p>
2025 <span class="normal"><a href="#__codelineno-0-68">68</a></span>
2026 <span class="normal"><a href="#__codelineno-0-69">69</a></span>
2027 <span class="normal"><a href="#__codelineno-0-70">70</a></span>
2030 -<span class="normal"><a href="#__codelineno-0-71">71</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">def</span> <span class="nf">collect_artifacts_prefixed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
2031 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2032 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with a specific prefix.</span>
2033 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a>
2034 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> Args:</span>
2035 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> prefix (str): The prefix to filter the artifacts.</span>
2036 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
2037 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Returns:</span>
2038 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
2039 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> &quot;&quot;&quot;</span>
2040 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="n">artifacts_response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts</span><span class="p">()</span>
2041 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2042 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="k">return</span> <span class="n">artifacts_response</span>
2043 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
2044 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">filtered_artifacts</span> <span class="o">=</span> <span class="p">[</span>
2045 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">artifact</span>
2046 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">for</span> <span class="n">artifact</span> <span class="ow">in</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">]</span>
2047 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">if</span> <span class="n">artifact</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
2048 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">]</span>
2049 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a>
2050 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="k">return</span> <span class="p">{</span>
2051 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2052 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected </span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2"> artifacts&quot;</span><span class="p">,</span>
2053 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;artifacts&quot;</span><span class="p">:</span> <span class="n">filtered_artifacts</span><span class="p">,</span>
2054 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">}</span>
2028 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
2029 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
2030 +<span class="normal"><a href="#__codelineno-0-73">73</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="k">def</span> <span class="nf">collect_artifacts_prefixed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
2031 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2032 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with a specific prefix.</span>
2033 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a>
2034 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="sd"> Args:</span>
2035 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> prefix (str): The prefix to filter the artifacts.</span>
2036 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2037 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Returns:</span>
2038 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
2039 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> &quot;&quot;&quot;</span>
2040 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">artifacts_response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts</span><span class="p">()</span>
2041 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2042 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">return</span> <span class="n">artifacts_response</span>
2043 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a>
2044 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">filtered_artifacts</span> <span class="o">=</span> <span class="p">[</span>
2045 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">artifact</span>
2046 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">for</span> <span class="n">artifact</span> <span class="ow">in</span> <span class="n">artifacts_response</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">]</span>
2047 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">if</span> <span class="n">artifact</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span>
2048 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">]</span>
2049 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
2050 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2051 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2052 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Successfully collected </span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2"> artifacts&quot;</span><span class="p">,</span>
2053 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;artifacts&quot;</span><span class="p">:</span> <span class="n">filtered_artifacts</span><span class="p">,</span>
2054 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="p">}</span>
2055 </code></pre></div></td></tr></table></div>
2056 </details>
2057 </div>
@@ -2096,21 +2096,21 @@ begins with <code>Windows</code>.</p>
2096
2097 <details class="quote">
2098 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
2099 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-82">82</a></span>
2100 -<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2101 -<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2099 + <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>
2100 <span class="normal"><a href="#__codelineno-0-85">85</a></span>
2101 <span class="normal"><a href="#__codelineno-0-86">86</a></span>
2102 <span class="normal"><a href="#__codelineno-0-87">87</a></span>
2103 <span class="normal"><a href="#__codelineno-0-88">88</a></span>
2106 -<span class="normal"><a href="#__codelineno-0-89">89</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="k">def</span> <span class="nf">collect_artifacts_windows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
2107 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2108 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Windows`.</span>
2109 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2110 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Returns:</span>
2111 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
2112 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> &quot;&quot;&quot;</span>
2113 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Windows.&quot;</span><span class="p">)</span>
2104 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2105 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2106 +<span class="normal"><a href="#__codelineno-0-91">91</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">def</span> <span class="nf">collect_artifacts_windows</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
2107 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2108 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Collect the artifacts from Velociraptor that have a name beginning with `Windows`.</span>
2109 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a>
2110 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> Returns:</span>
2111 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the artifacts.</span>
2112 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> &quot;&quot;&quot;</span>
2113 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_artifacts_prefixed</span><span class="p">(</span><span class="s2">&quot;Windows.&quot;</span><span class="p">)</span>
2114 </code></pre></div></td></tr></table></div>
2115 </details>
2116 </div>
@@ -2197,9 +2197,7 @@ begins with <code>Windows</code>.</p>
2197
2198 <details class="quote">
2199 <summary>Source code in <code>app\services\Velociraptor\artifacts.py</code></summary>
2200 - <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>
2201 -<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2202 -<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2200 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-102">102</a></span>
2201 <span class="normal"><a href="#__codelineno-0-103">103</a></span>
2202 <span class="normal"><a href="#__codelineno-0-104">104</a></span>
2203 <span class="normal"><a href="#__codelineno-0-105">105</a></span>
@@ -2233,43 +2231,45 @@ begins with <code>Windows</code>.</p>
2231 <span class="normal"><a href="#__codelineno-0-133">133</a></span>
2232 <span class="normal"><a href="#__codelineno-0-134">134</a></span>
2233 <span class="normal"><a href="#__codelineno-0-135">135</a></span>
2236 -<span class="normal"><a href="#__codelineno-0-136">136</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="k">def</span> <span class="nf">run_artifact_collection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">artifact</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
2237 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2238 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> Run an artifact collection on a specific client.</span>
2239 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
2240 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Args:</span>
2241 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> client_id (str): The ID of the client.</span>
2242 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> artifact (str): The name of the artifact.</span>
2243 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
2244 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Returns:</span>
2245 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the results.</span>
2246 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> &quot;&quot;&quot;</span>
2247 -<a id="__codelineno-0-111" name="__codelineno-0-111"></a> <span class="k">try</span><span class="p">:</span>
2248 -<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">_create_query</span><span class="p">(</span>
2249 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="sa">f</span><span class="s2">&quot;SELECT collect_client(client_id=&#39;</span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">&#39;, artifacts=[&#39;</span><span class="si">{</span><span class="n">artifact</span><span class="si">}</span><span class="s2">&#39;]) FROM scope()&quot;</span><span class="p">,</span>
2250 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="p">)</span>
2251 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">flow</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">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
2252 -<a id="__codelineno-0-116" name="__codelineno-0-116"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2253 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a>
2254 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">artifact_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_artifact_key</span><span class="p">(</span><span class="n">client_id</span><span class="p">,</span> <span class="n">artifact</span><span class="p">)</span>
2255 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="n">flow_id</span> <span class="o">=</span> <span class="n">flow</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="n">artifact_key</span><span class="p">][</span><span class="s2">&quot;flow_id&quot;</span><span class="p">]</span>
2256 -<a id="__codelineno-0-120" name="__codelineno-0-120"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2257 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a>
2258 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">completed</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">watch_flow_completion</span><span class="p">(</span><span class="n">flow_id</span><span class="p">)</span>
2259 -<a id="__codelineno-0-123" name="__codelineno-0-123"></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">&quot;Successfully watched flow completion on </span><span class="si">{</span><span class="n">completed</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2260 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a>
2261 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="n">results</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">read_collection_results</span><span class="p">(</span>
2262 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">client_id</span><span class="p">,</span>
2263 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">flow_id</span><span class="p">,</span>
2264 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">artifact</span><span class="p">,</span>
2265 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="p">)</span>
2266 -<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="k">return</span> <span class="n">results</span>
2267 -<a id="__codelineno-0-131" name="__codelineno-0-131"></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>
2268 -<a id="__codelineno-0-132" name="__codelineno-0-132"></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">&quot;Failed to run artifact collection: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2269 -<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="k">return</span> <span class="p">{</span>
2270 -<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to run artifact collection&quot;</span><span class="p">,</span>
2271 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2272 -<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="p">}</span>
2234 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2235 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2236 +<span class="normal"><a href="#__codelineno-0-138">138</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="k">def</span> <span class="nf">run_artifact_collection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">artifact</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
2237 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2238 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Run an artifact collection on a specific client.</span>
2239 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
2240 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Args:</span>
2241 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> client_id (str): The ID of the client.</span>
2242 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> artifact (str): The name of the artifact.</span>
2243 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a>
2244 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> Returns:</span>
2245 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> dict: A dictionary with the success status, a message, and potentially the results.</span>
2246 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> &quot;&quot;&quot;</span>
2247 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="k">try</span><span class="p">:</span>
2248 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_query</span><span class="p">(</span>
2249 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="sa">f</span><span class="s2">&quot;SELECT collect_client(client_id=&#39;</span><span class="si">{</span><span class="n">client_id</span><span class="si">}</span><span class="s2">&#39;, artifacts=[&#39;</span><span class="si">{</span><span class="n">artifact</span><span class="si">}</span><span class="s2">&#39;]) FROM scope()&quot;</span><span class="p">,</span>
2250 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="p">)</span>
2251 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">flow</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">execute_query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
2252 +<a id="__codelineno-0-118" name="__codelineno-0-118"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2253 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a>
2254 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="n">artifact_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_artifact_key</span><span class="p">(</span><span class="n">client_id</span><span class="p">,</span> <span class="n">artifact</span><span class="p">)</span>
2255 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">flow_id</span> <span class="o">=</span> <span class="n">flow</span><span class="p">[</span><span class="s2">&quot;results&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="n">artifact_key</span><span class="p">][</span><span class="s2">&quot;flow_id&quot;</span><span class="p">]</span>
2256 +<a id="__codelineno-0-122" name="__codelineno-0-122"></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">&quot;Successfully ran artifact collection on </span><span class="si">{</span><span class="n">flow_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2257 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a>
2258 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">completed</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">watch_flow_completion</span><span class="p">(</span><span class="n">flow_id</span><span class="p">)</span>
2259 +<a id="__codelineno-0-125" name="__codelineno-0-125"></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">&quot;Successfully watched flow completion on </span><span class="si">{</span><span class="n">completed</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2260 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a>
2261 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="n">results</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">read_collection_results</span><span class="p">(</span>
2262 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">client_id</span><span class="p">,</span>
2263 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="n">flow_id</span><span class="p">,</span>
2264 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="n">artifact</span><span class="p">,</span>
2265 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="p">)</span>
2266 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="k">return</span> <span class="n">results</span>
2267 +<a id="__codelineno-0-133" name="__codelineno-0-133"></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>
2268 +<a id="__codelineno-0-134" name="__codelineno-0-134"></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">&quot;Failed to run artifact collection: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2269 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="k">return</span> <span class="p">{</span>
2270 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to run artifact collection&quot;</span><span class="p">,</span>
2271 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2272 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">}</span>
2273 </code></pre></div></td></tr></table></div>
2274 </details>
2275 </div>
backend/site/cases/index.html
+121 -117
@@ -1051,11 +1051,7 @@ This class inherits from SQLAlchemy's Model class.</p>
1051
1052 <details class="quote">
1053 <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1054 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-53">53</a></span>
1055 -<span class="normal"><a href="#__codelineno-0-54">54</a></span>
1056 -<span class="normal"><a href="#__codelineno-0-55">55</a></span>
1057 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
1058 -<span class="normal"><a href="#__codelineno-0-57">57</a></span>
1054 + <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>
1055 <span class="normal"><a href="#__codelineno-0-58">58</a></span>
1056 <span class="normal"><a href="#__codelineno-0-59">59</a></span>
1057 <span class="normal"><a href="#__codelineno-0-60">60</a></span>
@@ -1067,23 +1063,33 @@ This class inherits from SQLAlchemy's Model class.</p>
1063 <span class="normal"><a href="#__codelineno-0-66">66</a></span>
1064 <span class="normal"><a href="#__codelineno-0-67">67</a></span>
1065 <span class="normal"><a href="#__codelineno-0-68">68</a></span>
1070 -<span class="normal"><a href="#__codelineno-0-69">69</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-53" name="__codelineno-0-53"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/note&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1071 -<a id="__codelineno-0-54" name="__codelineno-0-54"></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>
1072 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1073 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Endpoint to create a note for a specific case in DFIR IRIS.</span>
1074 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
1075 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Args:</span>
1076 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> case_id (str): The ID of the case to create a note for.</span>
1077 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a>
1078 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Returns:</span>
1079 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> json: A JSON response containing the result of the note creation operation.</span>
1080 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> &quot;&quot;&quot;</span>
1081 -<a id="__codelineno-0-64" name="__codelineno-0-64"></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">&quot;note_title&quot;</span><span class="p">]</span>
1082 -<a id="__codelineno-0-65" name="__codelineno-0-65"></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">&quot;note_content&quot;</span><span class="p">]</span>
1083 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">case_service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1084 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1085 -<a id="__codelineno-0-68" name="__codelineno-0-68"></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><span class="n">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">,</span> <span class="n">note_title</span><span class="o">=</span><span class="n">note_title</span><span class="p">,</span> <span class="n">note_content</span><span class="o">=</span><span class="n">note_content</span><span class="p">)</span>
1086 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="n">created_note</span>
1066 +<span class="normal"><a href="#__codelineno-0-69">69</a></span>
1067 +<span class="normal"><a href="#__codelineno-0-70">70</a></span>
1068 +<span class="normal"><a href="#__codelineno-0-71">71</a></span>
1069 +<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1070 +<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1071 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1072 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1073 +<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">&quot;/dfir_iris/cases/&lt;case_id&gt;/note&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">])</span>
1074 +<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>
1075 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1076 +<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>
1077 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
1078 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a><span class="sd"> Args:</span>
1079 +<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>
1080 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a>
1081 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> Returns:</span>
1082 +<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>
1083 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> &quot;&quot;&quot;</span>
1084 +<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">&quot;note_title&quot;</span><span class="p">]</span>
1085 +<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">&quot;note_content&quot;</span><span class="p">]</span>
1086 +<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>
1087 +<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>
1088 +<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>
1089 +<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>
1090 +<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>
1091 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">)</span>
1092 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">return</span> <span class="n">created_note</span>
1093 </code></pre></div></td></tr></table></div>
1094 </details>
1095 </div>
@@ -1127,27 +1133,27 @@ This class inherits from SQLAlchemy's Model class.</p>
1133
1134 <details class="quote">
1135 <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1130 - <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>
1131 -<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1132 -<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1133 -<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1134 -<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1135 -<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1136 -<span class="normal"><a href="#__codelineno-0-92">92</a></span>
1137 -<span class="normal"><a href="#__codelineno-0-93">93</a></span>
1138 -<span class="normal"><a href="#__codelineno-0-94">94</a></span>
1139 -<span class="normal"><a href="#__codelineno-0-95">95</a></span>
1140 -<span class="normal"><a href="#__codelineno-0-96">96</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="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1141 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="k">def</span> <span class="nf">get_alerts</span><span class="p">():</span>
1142 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1143 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> Endpoint to retrieve all alerts from DFIR IRIS.</span>
1144 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a>
1145 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a><span class="sd"> Returns:</span>
1146 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> json: A JSON response containing the list of alerts.</span>
1147 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> &quot;&quot;&quot;</span>
1148 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">AlertsService</span><span class="p">()</span>
1149 -<a id="__codelineno-0-95" name="__codelineno-0-95"></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>
1150 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="n">alerts</span>
1136 + <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>
1137 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
1138 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
1139 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
1140 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
1141 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
1142 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
1143 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
1144 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
1145 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
1146 +<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">&quot;/dfir_iris/alerts&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1147 +<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>
1148 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1149 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a><span class="sd"> Endpoint to retrieve all alerts from DFIR IRIS.</span>
1150 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a>
1151 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a><span class="sd"> Returns:</span>
1152 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a><span class="sd"> json: A JSON response containing the list of alerts.</span>
1153 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="sd"> &quot;&quot;&quot;</span>
1154 +<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>
1155 +<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>
1156 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">alerts</span>
1157 </code></pre></div></td></tr></table></div>
1158 </details>
1159 </div>
@@ -1219,10 +1225,7 @@ This class inherits from SQLAlchemy's Model class.</p>
1225
1226 <details class="quote">
1227 <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1222 - <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>
1223 -<span class="normal"><a href="#__codelineno-0-23">23</a></span>
1224 -<span class="normal"><a href="#__codelineno-0-24">24</a></span>
1225 -<span class="normal"><a href="#__codelineno-0-25">25</a></span>
1228 + <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>
1229 <span class="normal"><a href="#__codelineno-0-26">26</a></span>
1230 <span class="normal"><a href="#__codelineno-0-27">27</a></span>
1231 <span class="normal"><a href="#__codelineno-0-28">28</a></span>
@@ -1232,20 +1235,23 @@ This class inherits from SQLAlchemy's Model class.</p>
1235 <span class="normal"><a href="#__codelineno-0-32">32</a></span>
1236 <span class="normal"><a href="#__codelineno-0-33">33</a></span>
1237 <span class="normal"><a href="#__codelineno-0-34">34</a></span>
1235 -<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-22" name="__codelineno-0-22"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1236 -<a id="__codelineno-0-23" name="__codelineno-0-23"></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>
1237 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1238 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="sd"> Endpoint to retrieve a specific case from DFIR IRIS.</span>
1239 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a>
1240 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="sd"> Args:</span>
1241 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> case_id (str): The ID of the case to retrieve.</span>
1238 +<span class="normal"><a href="#__codelineno-0-35">35</a></span>
1239 +<span class="normal"><a href="#__codelineno-0-36">36</a></span>
1240 +<span class="normal"><a href="#__codelineno-0-37">37</a></span>
1241 +<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">&quot;/dfir_iris/cases/&lt;case_id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1242 +<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>
1243 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1244 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="sd"> Endpoint to retrieve a specific case from DFIR IRIS.</span>
1245 <a id="__codelineno-0-29" name="__codelineno-0-29"></a>
1243 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Returns:</span>
1244 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> json: A JSON response containing the case data.</span>
1245 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="sd"> &quot;&quot;&quot;</span>
1246 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1247 -<a id="__codelineno-0-34" name="__codelineno-0-34"></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>
1248 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="k">return</span> <span class="n">case</span>
1246 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="sd"> Args:</span>
1247 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="sd"> case_id (str): The ID of the case to retrieve.</span>
1248 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
1249 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Returns:</span>
1250 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="sd"> json: A JSON response containing the case data.</span>
1251 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> &quot;&quot;&quot;</span>
1252 +<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>
1253 +<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>
1254 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">return</span> <span class="n">case</span>
1255 </code></pre></div></td></tr></table></div>
1256 </details>
1257 </div>
@@ -1317,33 +1323,33 @@ This class inherits from SQLAlchemy's Model class.</p>
1323
1324 <details class="quote">
1325 <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1320 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-71">71</a></span>
1321 -<span class="normal"><a href="#__codelineno-0-72">72</a></span>
1322 -<span class="normal"><a href="#__codelineno-0-73">73</a></span>
1323 -<span class="normal"><a href="#__codelineno-0-74">74</a></span>
1324 -<span class="normal"><a href="#__codelineno-0-75">75</a></span>
1325 -<span class="normal"><a href="#__codelineno-0-76">76</a></span>
1326 -<span class="normal"><a href="#__codelineno-0-77">77</a></span>
1327 -<span class="normal"><a href="#__codelineno-0-78">78</a></span>
1328 -<span class="normal"><a href="#__codelineno-0-79">79</a></span>
1326 + <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>
1327 <span class="normal"><a href="#__codelineno-0-80">80</a></span>
1328 <span class="normal"><a href="#__codelineno-0-81">81</a></span>
1329 <span class="normal"><a href="#__codelineno-0-82">82</a></span>
1330 <span class="normal"><a href="#__codelineno-0-83">83</a></span>
1333 -<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-71" name="__codelineno-0-71"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/assets&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1334 -<a id="__codelineno-0-72" name="__codelineno-0-72"></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>
1335 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1336 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> Endpoint to retrieve assets of a specific case from DFIR IRIS.</span>
1337 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
1338 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> Args:</span>
1339 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> case_id (str): The ID of the case to retrieve assets from.</span>
1340 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
1341 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Returns:</span>
1342 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> json: A JSON response containing the list of assets for the case.</span>
1343 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> &quot;&quot;&quot;</span>
1344 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">asset_service</span> <span class="o">=</span> <span class="n">AssetsService</span><span class="p">()</span>
1345 -<a id="__codelineno-0-83" name="__codelineno-0-83"></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">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1346 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">return</span> <span class="n">assets</span>
1331 +<span class="normal"><a href="#__codelineno-0-84">84</a></span>
1332 +<span class="normal"><a href="#__codelineno-0-85">85</a></span>
1333 +<span class="normal"><a href="#__codelineno-0-86">86</a></span>
1334 +<span class="normal"><a href="#__codelineno-0-87">87</a></span>
1335 +<span class="normal"><a href="#__codelineno-0-88">88</a></span>
1336 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
1337 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
1338 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
1339 +<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">&quot;/dfir_iris/cases/&lt;case_id&gt;/assets&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1340 +<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>
1341 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1342 +<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>
1343 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a>
1344 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Args:</span>
1345 +<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>
1346 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
1347 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> Returns:</span>
1348 +<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>
1349 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="sd"> &quot;&quot;&quot;</span>
1350 +<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>
1351 +<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>
1352 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="n">assets</span>
1353 </code></pre></div></td></tr></table></div>
1354 </details>
1355 </div>
@@ -1415,11 +1421,7 @@ This class inherits from SQLAlchemy's Model class.</p>
1421
1422 <details class="quote">
1423 <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1418 - <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>
1419 -<span class="normal"><a href="#__codelineno-0-38">38</a></span>
1420 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
1421 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
1422 -<span class="normal"><a href="#__codelineno-0-41">41</a></span>
1424 + <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>
1425 <span class="normal"><a href="#__codelineno-0-42">42</a></span>
1426 <span class="normal"><a href="#__codelineno-0-43">43</a></span>
1427 <span class="normal"><a href="#__codelineno-0-44">44</a></span>
@@ -1429,21 +1431,23 @@ This class inherits from SQLAlchemy's Model class.</p>
1431 <span class="normal"><a href="#__codelineno-0-48">48</a></span>
1432 <span class="normal"><a href="#__codelineno-0-49">49</a></span>
1433 <span class="normal"><a href="#__codelineno-0-50">50</a></span>
1432 -<span class="normal"><a href="#__codelineno-0-51">51</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="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases/&lt;case_id&gt;/notes&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1433 -<a id="__codelineno-0-38" name="__codelineno-0-38"></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">str</span><span class="p">):</span>
1434 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1435 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Endpoint to retrieve notes of a specific case from DFIR IRIS.</span>
1436 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
1437 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> Args:</span>
1438 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> case_id (str): The ID of the case to retrieve notes from.</span>
1439 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
1440 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> Returns:</span>
1441 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> json: A JSON response containing the list of notes for the case.</span>
1442 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a><span class="sd"> &quot;&quot;&quot;</span>
1443 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">case_service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1444 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="n">notes_service</span> <span class="o">=</span> <span class="n">NotesService</span><span class="p">()</span>
1445 -<a id="__codelineno-0-50" name="__codelineno-0-50"></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">case_id</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1446 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="n">notes</span>
1434 +<span class="normal"><a href="#__codelineno-0-51">51</a></span>
1435 +<span class="normal"><a href="#__codelineno-0-52">52</a></span>
1436 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
1437 +<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">&quot;/dfir_iris/cases/&lt;case_id&gt;/notes&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1438 +<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>
1439 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1440 +<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>
1441 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a>
1442 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Args:</span>
1443 +<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>
1444 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
1445 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> Returns:</span>
1446 +<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>
1447 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="sd"> &quot;&quot;&quot;</span>
1448 +<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>
1449 +<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">&quot;%&quot;</span><span class="p">,</span> <span class="n">cid</span><span class="o">=</span><span class="n">case_id</span><span class="p">)</span>
1450 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">return</span> <span class="n">notes</span>
1451 </code></pre></div></td></tr></table></div>
1452 </details>
1453 </div>
@@ -1487,9 +1491,7 @@ This class inherits from SQLAlchemy's Model class.</p>
1491
1492 <details class="quote">
1493 <summary>Source code in <code>app\routes\dfir_iris.py</code></summary>
1490 - <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>
1491 -<span class="normal"><a href="#__codelineno-0-11">11</a></span>
1492 -<span class="normal"><a href="#__codelineno-0-12">12</a></span>
1494 + <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>
1495 <span class="normal"><a href="#__codelineno-0-13">13</a></span>
1496 <span class="normal"><a href="#__codelineno-0-14">14</a></span>
1497 <span class="normal"><a href="#__codelineno-0-15">15</a></span>
@@ -1497,17 +1499,19 @@ This class inherits from SQLAlchemy's Model class.</p>
1499 <span class="normal"><a href="#__codelineno-0-17">17</a></span>
1500 <span class="normal"><a href="#__codelineno-0-18">18</a></span>
1501 <span class="normal"><a href="#__codelineno-0-19">19</a></span>
1500 -<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-10" name="__codelineno-0-10"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/dfir_iris/cases&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1501 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="k">def</span> <span class="nf">get_cases</span><span class="p">():</span>
1502 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1503 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> Endpoint to retrieve all the cases from DFIR IRIS.</span>
1504 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
1505 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Returns:</span>
1506 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> json: A JSON response containing the list of cases.</span>
1507 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
1508 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">CasesService</span><span class="p">()</span>
1509 -<a id="__codelineno-0-19" name="__codelineno-0-19"></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>
1510 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="k">return</span> <span class="n">cases</span>
1502 +<span class="normal"><a href="#__codelineno-0-20">20</a></span>
1503 +<span class="normal"><a href="#__codelineno-0-21">21</a></span>
1504 +<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">&quot;/dfir_iris/cases&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
1505 +<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>
1506 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1507 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Endpoint to retrieve all the cases from DFIR IRIS.</span>
1508 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
1509 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Returns:</span>
1510 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> json: A JSON response containing the list of cases.</span>
1511 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> &quot;&quot;&quot;</span>
1512 +<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>
1513 +<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>
1514 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">return</span> <span class="n">cases</span>
1515 </code></pre></div></td></tr></table></div>
1516 </details>
1517 </div>
backend/site/connectors/index.html
+82 -82
@@ -3361,9 +3361,7 @@ the cluster's health.</p>
3361
3362 <details class="quote">
3363 <summary>Source code in <code>app\routes\connectors.py</code></summary>
3364 - <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>
3365 -<span class="normal"><a href="#__codelineno-0-35">35</a></span>
3366 -<span class="normal"><a href="#__codelineno-0-36">36</a></span>
3364 + <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>
3365 <span class="normal"><a href="#__codelineno-0-37">37</a></span>
3366 <span class="normal"><a href="#__codelineno-0-38">38</a></span>
3367 <span class="normal"><a href="#__codelineno-0-39">39</a></span>
@@ -3380,26 +3378,28 @@ the cluster's health.</p>
3378 <span class="normal"><a href="#__codelineno-0-50">50</a></span>
3379 <span class="normal"><a href="#__codelineno-0-51">51</a></span>
3380 <span class="normal"><a href="#__codelineno-0-52">52</a></span>
3383 -<span class="normal"><a href="#__codelineno-0-53">53</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="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/connectors/&lt;id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
3384 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="k">def</span> <span class="nf">get_connector_details</span><span class="p">(</span><span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3385 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3386 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Endpoint to retrieve the details of a connector.</span>
3387 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a>
3388 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Args:</span>
3389 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> id (str): The ID of the connector to retrieve.</span>
3390 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
3391 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> Returns:</span>
3392 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> json: A JSON response containing the details of the connector.</span>
3393 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> &quot;&quot;&quot;</span>
3394 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ConnectorService</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
3395 -<a id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="n">connector</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_connector_exists</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3396 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
3397 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">if</span> <span class="n">connector</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3398 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="n">connector</span> <span class="o">=</span> <span class="n">Connectors</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
3399 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="n">instantiated_connector</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">process_connector</span><span class="p">(</span><span class="n">connector</span><span class="o">.</span><span class="n">connector_name</span><span class="p">)</span>
3400 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">instantiated_connector</span><span class="p">)</span>
3401 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">else</span><span class="p">:</span>
3402 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">connector</span><span class="p">),</span> <span class="mi">404</span>
3381 +<span class="normal"><a href="#__codelineno-0-53">53</a></span>
3382 +<span class="normal"><a href="#__codelineno-0-54">54</a></span>
3383 +<span class="normal"><a href="#__codelineno-0-55">55</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="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/connectors/&lt;id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
3384 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="k">def</span> <span class="nf">get_connector_details</span><span class="p">(</span><span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3385 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3386 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> Endpoint to retrieve the details of a connector.</span>
3387 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a>
3388 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a><span class="sd"> Args:</span>
3389 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> id (str): The ID of the connector to retrieve.</span>
3390 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
3391 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> Returns:</span>
3392 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="sd"> json: A JSON response containing the details of the connector.</span>
3393 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> &quot;&quot;&quot;</span>
3394 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ConnectorService</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
3395 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="n">connector</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_connector_exists</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3396 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
3397 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">if</span> <span class="n">connector</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3398 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="n">connector</span> <span class="o">=</span> <span class="n">Connectors</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
3399 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="n">instantiated_connector</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">process_connector</span><span class="p">(</span><span class="n">connector</span><span class="o">.</span><span class="n">connector_name</span><span class="p">)</span>
3400 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">instantiated_connector</span><span class="p">)</span>
3401 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="k">else</span><span class="p">:</span>
3402 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">connector</span><span class="p">),</span> <span class="mi">404</span>
3403 </code></pre></div></td></tr></table></div>
3404 </details>
3405 </div>
@@ -3443,8 +3443,7 @@ the cluster's health.</p>
3443
3444 <details class="quote">
3445 <summary>Source code in <code>app\routes\connectors.py</code></summary>
3446 - <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>
3447 -<span class="normal"><a href="#__codelineno-0-15">15</a></span>
3446 + <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>
3447 <span class="normal"><a href="#__codelineno-0-16">16</a></span>
3448 <span class="normal"><a href="#__codelineno-0-17">17</a></span>
3449 <span class="normal"><a href="#__codelineno-0-18">18</a></span>
@@ -3461,25 +3460,26 @@ the cluster's health.</p>
3460 <span class="normal"><a href="#__codelineno-0-29">29</a></span>
3461 <span class="normal"><a href="#__codelineno-0-30">30</a></span>
3462 <span class="normal"><a href="#__codelineno-0-31">31</a></span>
3464 -<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-14" name="__codelineno-0-14"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/connectors&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
3465 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="k">def</span> <span class="nf">list_connectors_available</span><span class="p">():</span>
3466 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3467 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Endpoint to retrieve all available connectors.</span>
3468 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a>
3469 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> Returns:</span>
3470 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> json: A JSON response containing the list of all available connectors along with their connection verification status.</span>
3471 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> &quot;&quot;&quot;</span>
3472 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">connectors_service</span> <span class="o">=</span> <span class="n">ConnectorService</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
3473 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">connectors</span> <span class="o">=</span> <span class="n">ConnectorsAvailable</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
3474 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">connectors_available_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">connectors</span><span class="p">)</span>
3475 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a>
3476 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">instantiated_connectors</span> <span class="o">=</span> <span class="p">[</span>
3477 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">connectors_service</span><span class="o">.</span><span class="n">process_connector</span><span class="p">(</span><span class="n">connector</span><span class="p">[</span><span class="s2">&quot;connector_name&quot;</span><span class="p">])</span>
3478 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">for</span> <span class="n">connector</span> <span class="ow">in</span> <span class="n">result</span>
3479 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">if</span> <span class="n">connectors_service</span><span class="o">.</span><span class="n">process_connector</span><span class="p">(</span><span class="n">connector</span><span class="p">[</span><span class="s2">&quot;connector_name&quot;</span><span class="p">])</span>
3480 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="p">]</span>
3481 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a>
3482 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">instantiated_connectors</span><span class="p">)</span>
3463 +<span class="normal"><a href="#__codelineno-0-32">32</a></span>
3464 +<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-15" name="__codelineno-0-15"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/connectors&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">])</span>
3465 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="k">def</span> <span class="nf">list_connectors_available</span><span class="p">():</span>
3466 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3467 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Endpoint to retrieve all available connectors.</span>
3468 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
3469 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Returns:</span>
3470 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> json: A JSON response containing the list of all available connectors along with their connection verification status.</span>
3471 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> &quot;&quot;&quot;</span>
3472 +<a id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">connectors_service</span> <span class="o">=</span> <span class="n">ConnectorService</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
3473 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">connectors</span> <span class="o">=</span> <span class="n">ConnectorsAvailable</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
3474 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">connectors_available_schema</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">connectors</span><span class="p">)</span>
3475 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a>
3476 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">instantiated_connectors</span> <span class="o">=</span> <span class="p">[</span>
3477 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">connectors_service</span><span class="o">.</span><span class="n">process_connector</span><span class="p">(</span><span class="n">connector</span><span class="p">[</span><span class="s2">&quot;connector_name&quot;</span><span class="p">])</span>
3478 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="k">for</span> <span class="n">connector</span> <span class="ow">in</span> <span class="n">result</span>
3479 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">if</span> <span class="n">connectors_service</span><span class="o">.</span><span class="n">process_connector</span><span class="p">(</span><span class="n">connector</span><span class="p">[</span><span class="s2">&quot;connector_name&quot;</span><span class="p">])</span>
3480 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="p">]</span>
3481 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
3482 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">instantiated_connectors</span><span class="p">)</span>
3483 </code></pre></div></td></tr></table></div>
3484 </details>
3485 </div>
@@ -3560,10 +3560,7 @@ the cluster's health.</p>
3560
3561 <details class="quote">
3562 <summary>Source code in <code>app\routes\connectors.py</code></summary>
3563 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-55">55</a></span>
3564 -<span class="normal"><a href="#__codelineno-0-56">56</a></span>
3565 -<span class="normal"><a href="#__codelineno-0-57">57</a></span>
3566 -<span class="normal"><a href="#__codelineno-0-58">58</a></span>
3563 + <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>
3564 <span class="normal"><a href="#__codelineno-0-59">59</a></span>
3565 <span class="normal"><a href="#__codelineno-0-60">60</a></span>
3566 <span class="normal"><a href="#__codelineno-0-61">61</a></span>
@@ -3594,41 +3591,44 @@ the cluster's health.</p>
3591 <span class="normal"><a href="#__codelineno-0-86">86</a></span>
3592 <span class="normal"><a href="#__codelineno-0-87">87</a></span>
3593 <span class="normal"><a href="#__codelineno-0-88">88</a></span>
3597 -<span class="normal"><a href="#__codelineno-0-89">89</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/connectors/&lt;id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;PUT&quot;</span><span class="p">])</span>
3598 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">def</span> <span class="nf">update_connector_route</span><span class="p">(</span><span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3599 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3600 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Endpoint to update the details of a connector.</span>
3601 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a>
3602 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> Args:</span>
3603 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> id (str): The ID of the connector to update.</span>
3594 +<span class="normal"><a href="#__codelineno-0-89">89</a></span>
3595 +<span class="normal"><a href="#__codelineno-0-90">90</a></span>
3596 +<span class="normal"><a href="#__codelineno-0-91">91</a></span>
3597 +<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-58" name="__codelineno-0-58"></a><span class="nd">@bp</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/connectors/&lt;id&gt;&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;PUT&quot;</span><span class="p">])</span>
3598 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="k">def</span> <span class="nf">update_connector_route</span><span class="p">(</span><span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
3599 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3600 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a><span class="sd"> Endpoint to update the details of a connector.</span>
3601 <a id="__codelineno-0-62" name="__codelineno-0-62"></a>
3605 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Returns:</span>
3606 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> json: A JSON response containing the success status of the update operation and a message indicating the status.</span>
3607 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a><span class="sd"> If the update operation was successful, it returns the connector name and the status of the connection verification.</span>
3608 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> &quot;&quot;&quot;</span>
3609 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="n">api_key_connector</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Shuffle&quot;</span><span class="p">,</span> <span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">,</span> <span class="s2">&quot;Velociraptor&quot;</span><span class="p">]</span>
3610 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a>
3611 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">request_data</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">get_json</span><span class="p">()</span>
3612 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ConnectorService</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
3613 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="n">connector</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_connector_exists</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3614 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a>
3615 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">if</span> <span class="n">connector</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3616 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">if</span> <span class="n">connector</span><span class="p">[</span><span class="s2">&quot;connector_name&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">api_key_connector</span><span class="p">:</span>
3617 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="n">data_validated</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_request_data_api_key</span><span class="p">(</span><span class="n">request_data</span><span class="p">)</span>
3618 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="n">data_validated</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3619 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="n">service</span><span class="o">.</span><span class="n">update_connector</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">),</span> <span class="n">request_data</span><span class="p">)</span>
3620 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">verify_connector_connection</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3621 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">else</span><span class="p">:</span>
3622 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">data_validated</span><span class="p">),</span> <span class="mi">400</span>
3623 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">else</span><span class="p">:</span>
3624 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="n">data_validated</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_request_data</span><span class="p">(</span><span class="n">request_data</span><span class="p">)</span>
3625 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">if</span> <span class="n">data_validated</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3626 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="n">service</span><span class="o">.</span><span class="n">update_connector</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">),</span> <span class="n">request_data</span><span class="p">)</span>
3627 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">verify_connector_connection</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3628 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">else</span><span class="p">:</span>
3629 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">data_validated</span><span class="p">),</span> <span class="mi">400</span>
3630 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">else</span><span class="p">:</span>
3631 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">connector</span><span class="p">),</span> <span class="mi">404</span>
3602 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a><span class="sd"> Args:</span>
3603 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a><span class="sd"> id (str): The ID of the connector to update.</span>
3604 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a>
3605 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="sd"> Returns:</span>
3606 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="sd"> json: A JSON response containing the success status of the update operation and a message indicating the status.</span>
3607 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> If the update operation was successful, it returns the connector name and the status of the connection verification.</span>
3608 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> &quot;&quot;&quot;</span>
3609 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">api_key_connector</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Shuffle&quot;</span><span class="p">,</span> <span class="s2">&quot;DFIR-IRIS&quot;</span><span class="p">,</span> <span class="s2">&quot;Velociraptor&quot;</span><span class="p">]</span>
3610 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a>
3611 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">request_data</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">get_json</span><span class="p">()</span>
3612 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">service</span> <span class="o">=</span> <span class="n">ConnectorService</span><span class="p">(</span><span class="n">db</span><span class="p">)</span>
3613 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="n">connector</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_connector_exists</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3614 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a>
3615 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="k">if</span> <span class="n">connector</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3616 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">if</span> <span class="n">connector</span><span class="p">[</span><span class="s2">&quot;connector_name&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">api_key_connector</span><span class="p">:</span>
3617 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="n">data_validated</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_request_data_api_key</span><span class="p">(</span><span class="n">request_data</span><span class="p">)</span>
3618 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="k">if</span> <span class="n">data_validated</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3619 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="n">service</span><span class="o">.</span><span class="n">update_connector</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">),</span> <span class="n">request_data</span><span class="p">)</span>
3620 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">verify_connector_connection</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3621 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">else</span><span class="p">:</span>
3622 +<a id="__codelineno-0-83" name="__codelineno-0-83"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">data_validated</span><span class="p">),</span> <span class="mi">400</span>
3623 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">else</span><span class="p">:</span>
3624 +<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="n">data_validated</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">validate_request_data</span><span class="p">(</span><span class="n">request_data</span><span class="p">)</span>
3625 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">if</span> <span class="n">data_validated</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
3626 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">service</span><span class="o">.</span><span class="n">update_connector</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">),</span> <span class="n">request_data</span><span class="p">)</span>
3627 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="k">return</span> <span class="n">service</span><span class="o">.</span><span class="n">verify_connector_connection</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
3628 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">else</span><span class="p">:</span>
3629 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">data_validated</span><span class="p">),</span> <span class="mi">400</span>
3630 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="k">else</span><span class="p">:</span>
3631 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">connector</span><span class="p">),</span> <span class="mi">404</span>
3632 </code></pre></div></td></tr></table></div>
3633 </details>
3634 </div>
backend/site/graylog/index.html
+564 -526
@@ -2360,7 +2360,15 @@ This class inherits from SQLAlchemy's Model class.</p>
2360 <span class="normal"><a href="#__codelineno-0-127">127</a></span>
2361 <span class="normal"><a href="#__codelineno-0-128">128</a></span>
2362 <span class="normal"><a href="#__codelineno-0-129">129</a></span>
2363 -<span class="normal"><a href="#__codelineno-0-130">130</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">InputsService</span><span class="p">:</span>
2363 +<span class="normal"><a href="#__codelineno-0-130">130</a></span>
2364 +<span class="normal"><a href="#__codelineno-0-131">131</a></span>
2365 +<span class="normal"><a href="#__codelineno-0-132">132</a></span>
2366 +<span class="normal"><a href="#__codelineno-0-133">133</a></span>
2367 +<span class="normal"><a href="#__codelineno-0-134">134</a></span>
2368 +<span class="normal"><a href="#__codelineno-0-135">135</a></span>
2369 +<span class="normal"><a href="#__codelineno-0-136">136</a></span>
2370 +<span class="normal"><a href="#__codelineno-0-137">137</a></span>
2371 +<span class="normal"><a href="#__codelineno-0-138">138</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">InputsService</span><span class="p">:</span>
2372 <a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2373 <a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> A service class that encapsulates the logic for pulling index data from Graylog</span>
2374 <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> &quot;&quot;&quot;</span>
@@ -2377,106 +2385,114 @@ This class inherits from SQLAlchemy's Model class.</p>
2385 <a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2386 <a id="__codelineno-0-29" name="__codelineno-0-29"></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_graylog_details</span><span class="p">(</span><span class="s2">&quot;Graylog&quot;</span><span class="p">)</span>
2387 <a id="__codelineno-0-30" name="__codelineno-0-30"></a>
2380 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">def</span> <span class="nf">collect_running_inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2381 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2382 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Collects the running inputs that are managed by Graylog.</span>
2383 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
2384 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns:</span>
2385 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of running inputs.</span>
2386 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> &quot;&quot;&quot;</span>
2387 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">if</span> <span class="p">(</span>
2388 -<a id="__codelineno-0-39" name="__codelineno-0-39"></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>
2389 -<a id="__codelineno-0-40" name="__codelineno-0-40"></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>
2390 -<a id="__codelineno-0-41" name="__codelineno-0-41"></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>
2391 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="p">):</span>
2392 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2393 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
2394 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">running_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_running_inputs</span><span class="p">()</span>
2388 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">def</span> <span class="nf">collect_running_inputs</span><span class="p">(</span>
2389 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="p">,</span>
2390 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="p">)</span> <span class="o">-&gt;</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="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="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>
2391 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2392 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Collects the running inputs that are managed by Graylog.</span>
2393 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
2394 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Returns:</span>
2395 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of running inputs.</span>
2396 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> &quot;&quot;&quot;</span>
2397 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="k">if</span> <span class="p">(</span>
2398 +<a id="__codelineno-0-41" name="__codelineno-0-41"></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>
2399 +<a id="__codelineno-0-42" name="__codelineno-0-42"></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>
2400 +<a id="__codelineno-0-43" name="__codelineno-0-43"></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>
2401 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="p">):</span>
2402 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2403 <a id="__codelineno-0-46" name="__codelineno-0-46"></a>
2396 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">if</span> <span class="n">running_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2397 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="n">running_inputs</span>
2398 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a>
2399 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">def</span> <span class="nf">_collect_running_inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2400 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2401 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="sd"> Collects the running inputs that are managed by Graylog.</span>
2402 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a>
2403 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="sd"> Returns:</span>
2404 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of running inputs.</span>
2405 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> &quot;&quot;&quot;</span>
2406 -<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">try</span><span class="p">:</span>
2407 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="n">running_inputs</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2408 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="sa">f</span><span class="s2">&quot;</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/system/inputstates&quot;</span><span class="p">,</span>
2409 -<a id="__codelineno-0-60" name="__codelineno-0-60"></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>
2410 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">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>
2411 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2412 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="p">)</span>
2413 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="n">inputs_list</span> <span class="o">=</span> <span class="p">[]</span>
2414 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">for</span> <span class="nb">input</span> <span class="ow">in</span> <span class="n">running_inputs</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;states&quot;</span><span class="p">]:</span>
2415 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">inputs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2416 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">{</span>
2417 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;state&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;state&quot;</span><span class="p">],</span>
2418 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;title&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;message_input&quot;</span><span class="p">][</span><span class="s2">&quot;title&quot;</span><span class="p">],</span>
2419 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;port&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;message_input&quot;</span><span class="p">][</span><span class="s2">&quot;attributes&quot;</span><span class="p">][</span><span class="s2">&quot;port&quot;</span><span class="p">],</span>
2420 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">},</span>
2421 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">)</span>
2422 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="k">return</span> <span class="p">{</span>
2423 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected running inputs&quot;</span><span class="p">,</span>
2424 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2425 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;inputs&quot;</span><span class="p">:</span> <span class="n">inputs_list</span><span class="p">,</span>
2426 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="p">}</span>
2427 -<a id="__codelineno-0-78" name="__codelineno-0-78"></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>
2428 -<a id="__codelineno-0-79" name="__codelineno-0-79"></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">&quot;Failed to collect running inputs: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2429 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect running inputs&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2430 -<a id="__codelineno-0-81" name="__codelineno-0-81"></a>
2431 -<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">def</span> <span class="nf">collect_configured_inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2432 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2433 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Collects the configured inputs that are managed by Graylog.</span>
2404 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">running_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_running_inputs</span><span class="p">()</span>
2405 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2406 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="n">running_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2407 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="n">running_inputs</span>
2408 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a>
2409 +<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">def</span> <span class="nf">_collect_running_inputs</span><span class="p">(</span>
2410 +<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="bp">self</span><span class="p">,</span>
2411 +<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="p">)</span> <span class="o">-&gt;</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="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="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>
2412 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2413 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="sd"> Collects the running inputs that are managed by Graylog.</span>
2414 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a>
2415 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a><span class="sd"> Returns:</span>
2416 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of running inputs.</span>
2417 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a><span class="sd"> &quot;&quot;&quot;</span>
2418 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="k">try</span><span class="p">:</span>
2419 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">running_inputs</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2420 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="sa">f</span><span class="s2">&quot;</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/system/inputstates&quot;</span><span class="p">,</span>
2421 +<a id="__codelineno-0-64" name="__codelineno-0-64"></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>
2422 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">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>
2423 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2424 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="p">)</span>
2425 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="n">inputs_list</span> <span class="o">=</span> <span class="p">[]</span>
2426 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">for</span> <span class="nb">input</span> <span class="ow">in</span> <span class="n">running_inputs</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;states&quot;</span><span class="p">]:</span>
2427 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="n">inputs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2428 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="p">{</span>
2429 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="s2">&quot;state&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;state&quot;</span><span class="p">],</span>
2430 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="s2">&quot;title&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;message_input&quot;</span><span class="p">][</span><span class="s2">&quot;title&quot;</span><span class="p">],</span>
2431 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s2">&quot;port&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;message_input&quot;</span><span class="p">][</span><span class="s2">&quot;attributes&quot;</span><span class="p">][</span><span class="s2">&quot;port&quot;</span><span class="p">],</span>
2432 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="p">},</span>
2433 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="p">)</span>
2434 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="k">return</span> <span class="p">{</span>
2435 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected running inputs&quot;</span><span class="p">,</span>
2436 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2437 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="s2">&quot;inputs&quot;</span><span class="p">:</span> <span class="n">inputs_list</span><span class="p">,</span>
2438 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="p">}</span>
2439 +<a id="__codelineno-0-82" name="__codelineno-0-82"></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>
2440 +<a id="__codelineno-0-83" name="__codelineno-0-83"></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">&quot;Failed to collect running inputs: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2441 +<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect running inputs&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2442 <a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2435 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Returns:</span>
2436 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of configured inputs.</span>
2437 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> &quot;&quot;&quot;</span>
2438 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">if</span> <span class="p">(</span>
2439 -<a id="__codelineno-0-90" name="__codelineno-0-90"></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>
2440 -<a id="__codelineno-0-91" name="__codelineno-0-91"></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>
2441 -<a id="__codelineno-0-92" name="__codelineno-0-92"></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>
2442 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">):</span>
2443 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2444 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
2445 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">configured_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_configured_inputs</span><span class="p">()</span>
2446 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2447 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">if</span> <span class="n">configured_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2448 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">return</span> <span class="n">configured_inputs</span>
2449 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a>
2450 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="k">def</span> <span class="nf">_collect_configured_inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2451 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2452 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="sd"> Collects the configured inputs that are managed by Graylog.</span>
2453 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a>
2454 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="sd"> Returns:</span>
2455 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of configured inputs.</span>
2456 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> &quot;&quot;&quot;</span>
2457 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="k">try</span><span class="p">:</span>
2458 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="n">configured_inputs</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2459 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a> <span class="sa">f</span><span class="s2">&quot;</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/system/inputs&quot;</span><span class="p">,</span>
2460 -<a id="__codelineno-0-111" name="__codelineno-0-111"></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>
2461 -<a id="__codelineno-0-112" name="__codelineno-0-112"></a> <span class="n">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>
2462 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2463 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="p">)</span>
2464 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">configured_inputs_list</span> <span class="o">=</span> <span class="p">[]</span>
2465 -<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">for</span> <span class="nb">input</span> <span class="ow">in</span> <span class="n">configured_inputs</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;inputs&quot;</span><span class="p">]:</span>
2466 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">configured_inputs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2467 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="p">{</span>
2468 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="s2">&quot;title&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;title&quot;</span><span class="p">],</span>
2469 -<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="s2">&quot;port&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;attributes&quot;</span><span class="p">][</span><span class="s2">&quot;port&quot;</span><span class="p">],</span>
2470 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="p">},</span>
2471 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="p">)</span>
2472 -<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="k">return</span> <span class="p">{</span>
2473 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected configured inputs&quot;</span><span class="p">,</span>
2474 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2475 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="s2">&quot;configured_inputs&quot;</span><span class="p">:</span> <span class="n">configured_inputs_list</span><span class="p">,</span>
2476 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="p">}</span>
2477 -<a id="__codelineno-0-128" name="__codelineno-0-128"></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>
2478 -<a id="__codelineno-0-129" name="__codelineno-0-129"></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">&quot;Failed to collect configured inputs: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2479 -<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect configured inputs&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2443 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="k">def</span> <span class="nf">collect_configured_inputs</span><span class="p">(</span>
2444 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="bp">self</span><span class="p">,</span>
2445 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="p">)</span> <span class="o">-&gt;</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="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="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>
2446 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2447 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Collects the configured inputs that are managed by Graylog.</span>
2448 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
2449 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> Returns:</span>
2450 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of configured inputs.</span>
2451 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> &quot;&quot;&quot;</span>
2452 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="p">(</span>
2453 +<a id="__codelineno-0-96" name="__codelineno-0-96"></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>
2454 +<a id="__codelineno-0-97" name="__codelineno-0-97"></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>
2455 +<a id="__codelineno-0-98" name="__codelineno-0-98"></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>
2456 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="p">):</span>
2457 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2458 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2459 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">configured_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_configured_inputs</span><span class="p">()</span>
2460 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
2461 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">if</span> <span class="n">configured_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2462 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">configured_inputs</span>
2463 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a>
2464 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a> <span class="k">def</span> <span class="nf">_collect_configured_inputs</span><span class="p">(</span>
2465 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a> <span class="bp">self</span><span class="p">,</span>
2466 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a> <span class="p">)</span> <span class="o">-&gt;</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="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="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>
2467 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2468 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> Collects the configured inputs that are managed by Graylog.</span>
2469 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a>
2470 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> Returns:</span>
2471 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of configured inputs.</span>
2472 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> &quot;&quot;&quot;</span>
2473 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">try</span><span class="p">:</span>
2474 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">configured_inputs</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2475 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="sa">f</span><span class="s2">&quot;</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/system/inputs&quot;</span><span class="p">,</span>
2476 +<a id="__codelineno-0-119" name="__codelineno-0-119"></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>
2477 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="n">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>
2478 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2479 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="p">)</span>
2480 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">configured_inputs_list</span> <span class="o">=</span> <span class="p">[]</span>
2481 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="k">for</span> <span class="nb">input</span> <span class="ow">in</span> <span class="n">configured_inputs</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;inputs&quot;</span><span class="p">]:</span>
2482 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="n">configured_inputs_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
2483 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="p">{</span>
2484 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="s2">&quot;title&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;title&quot;</span><span class="p">],</span>
2485 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="s2">&quot;port&quot;</span><span class="p">:</span> <span class="nb">input</span><span class="p">[</span><span class="s2">&quot;attributes&quot;</span><span class="p">][</span><span class="s2">&quot;port&quot;</span><span class="p">],</span>
2486 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="p">},</span>
2487 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="p">)</span>
2488 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="k">return</span> <span class="p">{</span>
2489 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully collected configured inputs&quot;</span><span class="p">,</span>
2490 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2491 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot;configured_inputs&quot;</span><span class="p">:</span> <span class="n">configured_inputs_list</span><span class="p">,</span>
2492 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="p">}</span>
2493 +<a id="__codelineno-0-136" name="__codelineno-0-136"></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>
2494 +<a id="__codelineno-0-137" name="__codelineno-0-137"></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">&quot;Failed to collect configured inputs: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2495 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect configured inputs&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2496 </code></pre></div></td></tr></table></div>
2497 </details>
2498
@@ -2569,41 +2585,45 @@ This class inherits from SQLAlchemy's Model class.</p>
2585
2586 <details class="quote">
2587 <summary>Source code in <code>app\services\Graylog\inputs.py</code></summary>
2572 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-82">82</a></span>
2573 -<span class="normal"><a href="#__codelineno-0-83">83</a></span>
2574 -<span class="normal"><a href="#__codelineno-0-84">84</a></span>
2575 -<span class="normal"><a href="#__codelineno-0-85">85</a></span>
2576 -<span class="normal"><a href="#__codelineno-0-86">86</a></span>
2577 -<span class="normal"><a href="#__codelineno-0-87">87</a></span>
2578 -<span class="normal"><a href="#__codelineno-0-88">88</a></span>
2579 -<span class="normal"><a href="#__codelineno-0-89">89</a></span>
2580 -<span class="normal"><a href="#__codelineno-0-90">90</a></span>
2581 -<span class="normal"><a href="#__codelineno-0-91">91</a></span>
2582 -<span class="normal"><a href="#__codelineno-0-92">92</a></span>
2583 -<span class="normal"><a href="#__codelineno-0-93">93</a></span>
2584 -<span class="normal"><a href="#__codelineno-0-94">94</a></span>
2585 -<span class="normal"><a href="#__codelineno-0-95">95</a></span>
2586 -<span class="normal"><a href="#__codelineno-0-96">96</a></span>
2587 -<span class="normal"><a href="#__codelineno-0-97">97</a></span>
2588 -<span class="normal"><a href="#__codelineno-0-98">98</a></span>
2589 -<span class="normal"><a href="#__codelineno-0-99">99</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-82" name="__codelineno-0-82"></a><span class="k">def</span> <span class="nf">collect_configured_inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2590 -<a id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2591 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a><span class="sd"> Collects the configured inputs that are managed by Graylog.</span>
2592 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a>
2593 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a><span class="sd"> Returns:</span>
2594 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of configured inputs.</span>
2595 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="sd"> &quot;&quot;&quot;</span>
2596 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="k">if</span> <span class="p">(</span>
2597 -<a id="__codelineno-0-90" name="__codelineno-0-90"></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>
2598 -<a id="__codelineno-0-91" name="__codelineno-0-91"></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>
2599 -<a id="__codelineno-0-92" name="__codelineno-0-92"></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>
2600 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">):</span>
2601 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2602 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a>
2603 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="n">configured_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_configured_inputs</span><span class="p">()</span>
2604 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a>
2605 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="k">if</span> <span class="n">configured_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2606 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">return</span> <span class="n">configured_inputs</span>
2588 + <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>
2589 +<span class="normal"><a href="#__codelineno-0-87"> 87</a></span>
2590 +<span class="normal"><a href="#__codelineno-0-88"> 88</a></span>
2591 +<span class="normal"><a href="#__codelineno-0-89"> 89</a></span>
2592 +<span class="normal"><a href="#__codelineno-0-90"> 90</a></span>
2593 +<span class="normal"><a href="#__codelineno-0-91"> 91</a></span>
2594 +<span class="normal"><a href="#__codelineno-0-92"> 92</a></span>
2595 +<span class="normal"><a href="#__codelineno-0-93"> 93</a></span>
2596 +<span class="normal"><a href="#__codelineno-0-94"> 94</a></span>
2597 +<span class="normal"><a href="#__codelineno-0-95"> 95</a></span>
2598 +<span class="normal"><a href="#__codelineno-0-96"> 96</a></span>
2599 +<span class="normal"><a href="#__codelineno-0-97"> 97</a></span>
2600 +<span class="normal"><a href="#__codelineno-0-98"> 98</a></span>
2601 +<span class="normal"><a href="#__codelineno-0-99"> 99</a></span>
2602 +<span class="normal"><a href="#__codelineno-0-100">100</a></span>
2603 +<span class="normal"><a href="#__codelineno-0-101">101</a></span>
2604 +<span class="normal"><a href="#__codelineno-0-102">102</a></span>
2605 +<span class="normal"><a href="#__codelineno-0-103">103</a></span>
2606 +<span class="normal"><a href="#__codelineno-0-104">104</a></span>
2607 +<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-86" name="__codelineno-0-86"></a><span class="k">def</span> <span class="nf">collect_configured_inputs</span><span class="p">(</span>
2608 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="bp">self</span><span class="p">,</span>
2609 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2610 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2611 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a><span class="sd"> Collects the configured inputs that are managed by Graylog.</span>
2612 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a>
2613 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a><span class="sd"> Returns:</span>
2614 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of configured inputs.</span>
2615 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a><span class="sd"> &quot;&quot;&quot;</span>
2616 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="p">(</span>
2617 +<a id="__codelineno-0-96" name="__codelineno-0-96"></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>
2618 +<a id="__codelineno-0-97" name="__codelineno-0-97"></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>
2619 +<a id="__codelineno-0-98" name="__codelineno-0-98"></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>
2620 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="p">):</span>
2621 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2622 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a>
2623 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">configured_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_configured_inputs</span><span class="p">()</span>
2624 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a>
2625 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="k">if</span> <span class="n">configured_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2626 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a> <span class="k">return</span> <span class="n">configured_inputs</span>
2627 </code></pre></div></td></tr></table></div>
2628 </details>
2629 </div>
@@ -2665,24 +2685,28 @@ This class inherits from SQLAlchemy's Model class.</p>
2685 <span class="normal"><a href="#__codelineno-0-45">45</a></span>
2686 <span class="normal"><a href="#__codelineno-0-46">46</a></span>
2687 <span class="normal"><a href="#__codelineno-0-47">47</a></span>
2668 -<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-31" name="__codelineno-0-31"></a><span class="k">def</span> <span class="nf">collect_running_inputs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2669 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2670 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="sd"> Collects the running inputs that are managed by Graylog.</span>
2671 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a>
2672 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Returns:</span>
2673 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of running inputs.</span>
2674 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> &quot;&quot;&quot;</span>
2675 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">if</span> <span class="p">(</span>
2676 -<a id="__codelineno-0-39" name="__codelineno-0-39"></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>
2677 -<a id="__codelineno-0-40" name="__codelineno-0-40"></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>
2678 -<a id="__codelineno-0-41" name="__codelineno-0-41"></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>
2679 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="p">):</span>
2680 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2681 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a>
2682 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="n">running_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_running_inputs</span><span class="p">()</span>
2688 +<span class="normal"><a href="#__codelineno-0-48">48</a></span>
2689 +<span class="normal"><a href="#__codelineno-0-49">49</a></span>
2690 +<span class="normal"><a href="#__codelineno-0-50">50</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="k">def</span> <span class="nf">collect_running_inputs</span><span class="p">(</span>
2691 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="bp">self</span><span class="p">,</span>
2692 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="p">)</span> <span class="o">-&gt;</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="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="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>
2693 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2694 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="sd"> Collects the running inputs that are managed by Graylog.</span>
2695 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a>
2696 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="sd"> Returns:</span>
2697 +<a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of running inputs.</span>
2698 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="sd"> &quot;&quot;&quot;</span>
2699 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="k">if</span> <span class="p">(</span>
2700 +<a id="__codelineno-0-41" name="__codelineno-0-41"></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>
2701 +<a id="__codelineno-0-42" name="__codelineno-0-42"></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>
2702 +<a id="__codelineno-0-43" name="__codelineno-0-43"></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>
2703 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="p">):</span>
2704 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2705 <a id="__codelineno-0-46" name="__codelineno-0-46"></a>
2684 -<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">if</span> <span class="n">running_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2685 -<a id="__codelineno-0-48" name="__codelineno-0-48"></a> <span class="k">return</span> <span class="n">running_inputs</span>
2706 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="n">running_inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_running_inputs</span><span class="p">()</span>
2707 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a>
2708 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="k">if</span> <span class="n">running_inputs</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]:</span>
2709 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="n">running_inputs</span>
2710 </code></pre></div></td></tr></table></div>
2711 </details>
2712 </div>
@@ -2742,10 +2766,7 @@ This class inherits from SQLAlchemy's Model class.</p>
2766
2767 <details class="quote">
2768 <summary>Source code in <code>app\services\Graylog\messages.py</code></summary>
2745 - <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>
2746 -<span class="normal"><a href="#__codelineno-0-11">11</a></span>
2747 -<span class="normal"><a href="#__codelineno-0-12">12</a></span>
2748 -<span class="normal"><a href="#__codelineno-0-13">13</a></span>
2769 + <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>
2770 <span class="normal"><a href="#__codelineno-0-14">14</a></span>
2771 <span class="normal"><a href="#__codelineno-0-15">15</a></span>
2772 <span class="normal"><a href="#__codelineno-0-16">16</a></span>
@@ -2806,71 +2827,80 @@ This class inherits from SQLAlchemy's Model class.</p>
2827 <span class="normal"><a href="#__codelineno-0-71">71</a></span>
2828 <span class="normal"><a href="#__codelineno-0-72">72</a></span>
2829 <span class="normal"><a href="#__codelineno-0-73">73</a></span>
2809 -<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-10" name="__codelineno-0-10"></a><span class="k">class</span> <span class="nc">MessagesService</span><span class="p">:</span>
2810 -<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2811 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="sd"> A service class that encapsulates the logic for polling messages from Graylog.</span>
2812 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="sd"> &quot;&quot;&quot;</span>
2813 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a>
2814 -<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>
2815 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a> <span class="p">(</span>
2816 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2817 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
2818 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2819 -<a id="__codelineno-0-20" name="__codelineno-0-20"></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_graylog_details</span><span class="p">(</span><span class="s2">&quot;Graylog&quot;</span><span class="p">)</span>
2820 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a>
2821 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="k">def</span> <span class="nf">_get_messages_from_graylog</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page_number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">requests</span><span class="o">.</span><span class="n">Response</span><span class="p">:</span>
2822 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Fetches messages from Graylog for a specific page number.&quot;&quot;&quot;</span>
2823 -<a id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="k">return</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2824 -<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="sa">f</span><span class="s2">&quot;</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/system/messages?page=</span><span class="si">{</span><span class="n">page_number</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2825 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="n">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>
2826 -<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2827 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="p">)</span>
2828 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a>
2829 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="k">def</span> <span class="nf">_handle_message_fetch_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">)</span> <span class="o">-&gt;</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>
2830 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Handles exceptions occurred while fetching messages.&quot;&quot;&quot;</span>
2831 -<a id="__codelineno-0-32" name="__codelineno-0-32"></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">&quot;Failed to collect messages from Graylog: </span><span class="si">{</span><span class="n">error</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2832 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">return</span> <span class="p">{</span>
2833 -<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect messages from Graylog&quot;</span><span class="p">,</span>
2834 -<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2835 -<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">}</span>
2836 -<a id="__codelineno-0-37" name="__codelineno-0-37"></a>
2837 -<a id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="k">def</span> <span class="nf">collect_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
2838 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2839 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Collects the latest 10 messages from Graylog.</span>
2840 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2841 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> Returns:</span>
2842 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of Graylog messages.</span>
2843 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> &quot;&quot;&quot;</span>
2844 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">if</span> <span class="p">(</span>
2845 -<a id="__codelineno-0-46" name="__codelineno-0-46"></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>
2846 -<a id="__codelineno-0-47" name="__codelineno-0-47"></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>
2847 -<a id="__codelineno-0-48" name="__codelineno-0-48"></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>
2848 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="p">):</span>
2849 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2850 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">else</span><span class="p">:</span>
2851 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">try</span><span class="p">:</span>
2852 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">page_number</span> <span class="o">=</span> <span class="mi">1</span>
2853 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">graylog_messages</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_messages_from_graylog</span><span class="p">(</span><span class="n">page_number</span><span class="p">)</span>
2854 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2855 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">if</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
2856 -<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>
2857 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="sa">f</span><span class="s2">&quot;Received </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;messages&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> messages from Graylog&quot;</span><span class="p">,</span>
2858 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">)</span>
2859 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="p">{</span>
2860 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved messages&quot;</span><span class="p">,</span>
2861 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2862 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="s2">&quot;graylog_messages&quot;</span><span class="p">:</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;messages&quot;</span><span class="p">],</span>
2863 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="p">}</span>
2864 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">else</span><span class="p">:</span>
2865 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
2866 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="sa">f</span><span class="s2">&quot;Failed to collect messages from Graylog: </span><span class="si">{</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2867 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">)</span>
2868 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2869 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect messages from Graylog&quot;</span><span class="p">,</span>
2870 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2871 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
2872 -<a id="__codelineno-0-73" name="__codelineno-0-73"></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>
2873 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_message_fetch_error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
2830 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2831 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2832 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2833 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2834 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2835 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2836 +<span class="normal"><a href="#__codelineno-0-80">80</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">MessagesService</span><span class="p">:</span>
2837 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2838 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> A service class that encapsulates the logic for polling messages from Graylog.</span>
2839 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> &quot;&quot;&quot;</span>
2840 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
2841 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2842 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="p">(</span>
2843 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
2844 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
2845 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
2846 +<a id="__codelineno-0-23" name="__codelineno-0-23"></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_graylog_details</span><span class="p">(</span><span class="s2">&quot;Graylog&quot;</span><span class="p">)</span>
2847 +<a id="__codelineno-0-24" name="__codelineno-0-24"></a>
2848 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">def</span> <span class="nf">_get_messages_from_graylog</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page_number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">requests</span><span class="o">.</span><span class="n">Response</span><span class="p">:</span>
2849 +<a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Fetches messages from Graylog for a specific page number.&quot;&quot;&quot;</span>
2850 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">return</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
2851 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="sa">f</span><span class="s2">&quot;</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/system/messages?page=</span><span class="si">{</span><span class="n">page_number</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2852 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">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>
2853 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
2854 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="p">)</span>
2855 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a>
2856 +<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">def</span> <span class="nf">_handle_message_fetch_error</span><span class="p">(</span>
2857 +<a id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="bp">self</span><span class="p">,</span>
2858 +<a id="__codelineno-0-35" name="__codelineno-0-35"></a> <span class="n">error</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">,</span>
2859 +<a id="__codelineno-0-36" name="__codelineno-0-36"></a> <span class="p">)</span> <span class="o">-&gt;</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>
2860 +<a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Handles exceptions occurred while fetching messages.&quot;&quot;&quot;</span>
2861 +<a id="__codelineno-0-38" name="__codelineno-0-38"></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">&quot;Failed to collect messages from Graylog: </span><span class="si">{</span><span class="n">error</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
2862 +<a id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="k">return</span> <span class="p">{</span>
2863 +<a id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect messages from Graylog&quot;</span><span class="p">,</span>
2864 +<a id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2865 +<a id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="p">}</span>
2866 +<a id="__codelineno-0-43" name="__codelineno-0-43"></a>
2867 +<a id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">def</span> <span class="nf">collect_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
2868 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2869 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Collects the latest 10 messages from Graylog.</span>
2870 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
2871 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
2872 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of Graylog messages.</span>
2873 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
2874 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">if</span> <span class="p">(</span>
2875 +<a id="__codelineno-0-52" name="__codelineno-0-52"></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>
2876 +<a id="__codelineno-0-53" name="__codelineno-0-53"></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>
2877 +<a id="__codelineno-0-54" name="__codelineno-0-54"></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>
2878 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="p">):</span>
2879 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2880 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">else</span><span class="p">:</span>
2881 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">try</span><span class="p">:</span>
2882 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">page_number</span> <span class="o">=</span> <span class="mi">1</span>
2883 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">graylog_messages</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_messages_from_graylog</span><span class="p">(</span><span class="n">page_number</span><span class="p">)</span>
2884 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
2885 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">if</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
2886 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
2887 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="sa">f</span><span class="s2">&quot;Received </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;messages&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> messages from Graylog&quot;</span><span class="p">,</span>
2888 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
2889 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">return</span> <span class="p">{</span>
2890 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved messages&quot;</span><span class="p">,</span>
2891 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2892 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;graylog_messages&quot;</span><span class="p">:</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;messages&quot;</span><span class="p">],</span>
2893 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="p">}</span>
2894 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">else</span><span class="p">:</span>
2895 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
2896 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="sa">f</span><span class="s2">&quot;Failed to collect messages from Graylog: </span><span class="si">{</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2897 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">)</span>
2898 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
2899 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect messages from Graylog&quot;</span><span class="p">,</span>
2900 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2901 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">}</span>
2902 +<a id="__codelineno-0-79" name="__codelineno-0-79"></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>
2903 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_message_fetch_error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
2904 </code></pre></div></td></tr></table></div>
2905 </details>
2906
@@ -2924,13 +2954,7 @@ This class inherits from SQLAlchemy's Model class.</p>
2954
2955 <details class="quote">
2956 <summary>Source code in <code>app\services\Graylog\messages.py</code></summary>
2927 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-38">38</a></span>
2928 -<span class="normal"><a href="#__codelineno-0-39">39</a></span>
2929 -<span class="normal"><a href="#__codelineno-0-40">40</a></span>
2930 -<span class="normal"><a href="#__codelineno-0-41">41</a></span>
2931 -<span class="normal"><a href="#__codelineno-0-42">42</a></span>
2932 -<span class="normal"><a href="#__codelineno-0-43">43</a></span>
2933 -<span class="normal"><a href="#__codelineno-0-44">44</a></span>
2957 + <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>
2958 <span class="normal"><a href="#__codelineno-0-45">45</a></span>
2959 <span class="normal"><a href="#__codelineno-0-46">46</a></span>
2960 <span class="normal"><a href="#__codelineno-0-47">47</a></span>
@@ -2960,43 +2984,49 @@ This class inherits from SQLAlchemy's Model class.</p>
2984 <span class="normal"><a href="#__codelineno-0-71">71</a></span>
2985 <span class="normal"><a href="#__codelineno-0-72">72</a></span>
2986 <span class="normal"><a href="#__codelineno-0-73">73</a></span>
2963 -<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-38" name="__codelineno-0-38"></a><span class="k">def</span> <span class="nf">collect_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
2964 -<a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2965 -<a id="__codelineno-0-40" name="__codelineno-0-40"></a><span class="sd"> Collects the latest 10 messages from Graylog.</span>
2966 -<a id="__codelineno-0-41" name="__codelineno-0-41"></a>
2967 -<a id="__codelineno-0-42" name="__codelineno-0-42"></a><span class="sd"> Returns:</span>
2968 -<a id="__codelineno-0-43" name="__codelineno-0-43"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of Graylog messages.</span>
2969 -<a id="__codelineno-0-44" name="__codelineno-0-44"></a><span class="sd"> &quot;&quot;&quot;</span>
2970 -<a id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="k">if</span> <span class="p">(</span>
2971 -<a id="__codelineno-0-46" name="__codelineno-0-46"></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>
2972 -<a id="__codelineno-0-47" name="__codelineno-0-47"></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>
2973 -<a id="__codelineno-0-48" name="__codelineno-0-48"></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>
2974 -<a id="__codelineno-0-49" name="__codelineno-0-49"></a> <span class="p">):</span>
2975 -<a id="__codelineno-0-50" name="__codelineno-0-50"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
2976 -<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">else</span><span class="p">:</span>
2977 -<a id="__codelineno-0-52" name="__codelineno-0-52"></a> <span class="k">try</span><span class="p">:</span>
2978 -<a id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">page_number</span> <span class="o">=</span> <span class="mi">1</span>
2979 -<a id="__codelineno-0-54" name="__codelineno-0-54"></a> <span class="n">graylog_messages</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_messages_from_graylog</span><span class="p">(</span><span class="n">page_number</span><span class="p">)</span>
2980 -<a id="__codelineno-0-55" name="__codelineno-0-55"></a>
2981 -<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">if</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
2982 -<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>
2983 -<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="sa">f</span><span class="s2">&quot;Received </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;messages&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> messages from Graylog&quot;</span><span class="p">,</span>
2984 -<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="p">)</span>
2985 -<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="k">return</span> <span class="p">{</span>
2986 -<a id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved messages&quot;</span><span class="p">,</span>
2987 -<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
2988 -<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="s2">&quot;graylog_messages&quot;</span><span class="p">:</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;messages&quot;</span><span class="p">],</span>
2989 -<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="p">}</span>
2990 -<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="k">else</span><span class="p">:</span>
2991 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
2992 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="sa">f</span><span class="s2">&quot;Failed to collect messages from Graylog: </span><span class="si">{</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
2993 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">)</span>
2994 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="k">return</span> <span class="p">{</span>
2995 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect messages from Graylog&quot;</span><span class="p">,</span>
2996 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
2997 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="p">}</span>
2998 -<a id="__codelineno-0-73" name="__codelineno-0-73"></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>
2999 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_message_fetch_error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
2987 +<span class="normal"><a href="#__codelineno-0-74">74</a></span>
2988 +<span class="normal"><a href="#__codelineno-0-75">75</a></span>
2989 +<span class="normal"><a href="#__codelineno-0-76">76</a></span>
2990 +<span class="normal"><a href="#__codelineno-0-77">77</a></span>
2991 +<span class="normal"><a href="#__codelineno-0-78">78</a></span>
2992 +<span class="normal"><a href="#__codelineno-0-79">79</a></span>
2993 +<span class="normal"><a href="#__codelineno-0-80">80</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">collect_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
2994 +<a id="__codelineno-0-45" name="__codelineno-0-45"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
2995 +<a id="__codelineno-0-46" name="__codelineno-0-46"></a><span class="sd"> Collects the latest 10 messages from Graylog.</span>
2996 +<a id="__codelineno-0-47" name="__codelineno-0-47"></a>
2997 +<a id="__codelineno-0-48" name="__codelineno-0-48"></a><span class="sd"> Returns:</span>
2998 +<a id="__codelineno-0-49" name="__codelineno-0-49"></a><span class="sd"> dict: A dictionary containing the success status, a message, and potentially a list of Graylog messages.</span>
2999 +<a id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="sd"> &quot;&quot;&quot;</span>
3000 +<a id="__codelineno-0-51" name="__codelineno-0-51"></a> <span class="k">if</span> <span class="p">(</span>
3001 +<a id="__codelineno-0-52" name="__codelineno-0-52"></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>
3002 +<a id="__codelineno-0-53" name="__codelineno-0-53"></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>
3003 +<a id="__codelineno-0-54" name="__codelineno-0-54"></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>
3004 +<a id="__codelineno-0-55" name="__codelineno-0-55"></a> <span class="p">):</span>
3005 +<a id="__codelineno-0-56" name="__codelineno-0-56"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3006 +<a id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">else</span><span class="p">:</span>
3007 +<a id="__codelineno-0-58" name="__codelineno-0-58"></a> <span class="k">try</span><span class="p">:</span>
3008 +<a id="__codelineno-0-59" name="__codelineno-0-59"></a> <span class="n">page_number</span> <span class="o">=</span> <span class="mi">1</span>
3009 +<a id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">graylog_messages</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_messages_from_graylog</span><span class="p">(</span><span class="n">page_number</span><span class="p">)</span>
3010 +<a id="__codelineno-0-61" name="__codelineno-0-61"></a>
3011 +<a id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="k">if</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
3012 +<a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3013 +<a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="sa">f</span><span class="s2">&quot;Received </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;messages&#39;</span><span class="p">])</span><span class="si">}</span><span class="s2"> messages from Graylog&quot;</span><span class="p">,</span>
3014 +<a id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="p">)</span>
3015 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">return</span> <span class="p">{</span>
3016 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved messages&quot;</span><span class="p">,</span>
3017 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3018 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="s2">&quot;graylog_messages&quot;</span><span class="p">:</span> <span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;messages&quot;</span><span class="p">],</span>
3019 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a> <span class="p">}</span>
3020 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">else</span><span class="p">:</span>
3021 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
3022 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="sa">f</span><span class="s2">&quot;Failed to collect messages from Graylog: </span><span class="si">{</span><span class="n">graylog_messages</span><span class="o">.</span><span class="n">json</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
3023 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="p">)</span>
3024 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="k">return</span> <span class="p">{</span>
3025 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect messages from Graylog&quot;</span><span class="p">,</span>
3026 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3027 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="p">}</span>
3028 +<a id="__codelineno-0-79" name="__codelineno-0-79"></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>
3029 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_message_fetch_error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
3030 </code></pre></div></td></tr></table></div>
3031 </details>
3032 </div>
@@ -3283,7 +3313,9 @@ This class inherits from SQLAlchemy's Model class.</p>
3313 <span class="normal"><a href="#__codelineno-0-239">239</a></span>
3314 <span class="normal"><a href="#__codelineno-0-240">240</a></span>
3315 <span class="normal"><a href="#__codelineno-0-241">241</a></span>
3286 -<span class="normal"><a href="#__codelineno-0-242">242</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">class</span> <span class="nc">MetricsService</span><span class="p">:</span>
3316 +<span class="normal"><a href="#__codelineno-0-242">242</a></span>
3317 +<span class="normal"><a href="#__codelineno-0-243">243</a></span>
3318 +<span class="normal"><a href="#__codelineno-0-244">244</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">class</span> <span class="nc">MetricsService</span><span class="p">:</span>
3319 <a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3320 <a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> A service class that encapsulates the logic for pulling metrics from Graylog.</span>
3321 <a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> &quot;&quot;&quot;</span>
@@ -3334,183 +3366,185 @@ This class inherits from SQLAlchemy's Model class.</p>
3366 <a id="__codelineno-0-63" name="__codelineno-0-63"></a> <span class="k">return</span> <span class="n">journal_size</span>
3367 <a id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">return</span> <span class="n">journal_size</span>
3368 <a id="__codelineno-0-65" name="__codelineno-0-65"></a>
3337 -<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">def</span> <span class="nf">collect_throughput_metrics</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3338 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3339 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> Collects the following Graylog Metrics:</span>
3340 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> - Input Usage</span>
3341 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> - Output Usage</span>
3342 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> - Processor Usage</span>
3343 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> - Input 1 Seconds Rate</span>
3344 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> - Output 1 Seconds Rate</span>
3345 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> - Total Input</span>
3346 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> - Total Output</span>
3347 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
3348 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Returns:</span>
3349 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of throughput metrics.</span>
3350 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> &quot;&quot;&quot;</span>
3351 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">if</span> <span class="p">(</span>
3352 -<a id="__codelineno-0-81" name="__codelineno-0-81"></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>
3353 -<a id="__codelineno-0-82" name="__codelineno-0-82"></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>
3354 -<a id="__codelineno-0-83" name="__codelineno-0-83"></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>
3355 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">):</span>
3356 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3357 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
3358 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">throughput_usage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_metrics_throughput_usage</span><span class="p">(</span>
3359 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3360 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
3361 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
3362 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">)</span>
3363 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
3364 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">if</span> <span class="n">throughput_usage</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
3365 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3366 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3367 -<a id="__codelineno-0-96" name="__codelineno-0-96"></a>
3368 -<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">def</span> <span class="nf">_collect_metrics_uncommitted_journal_size</span><span class="p">(</span>
3369 -<a id="__codelineno-0-98" name="__codelineno-0-98"></a> <span class="bp">self</span><span class="p">,</span>
3370 -<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3371 -<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="n">connector_username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3372 -<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">connector_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3373 -<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="p">)</span> <span class="o">-&gt;</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> <span class="nb">int</span><span class="p">]]:</span>
3374 -<a id="__codelineno-0-103" name="__codelineno-0-103"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3375 -<a id="__codelineno-0-104" name="__codelineno-0-104"></a><span class="sd"> Collects the journal size of uncommitted messages from Graylog.</span>
3376 -<a id="__codelineno-0-105" name="__codelineno-0-105"></a>
3377 -<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Args:</span>
3378 -<a id="__codelineno-0-107" name="__codelineno-0-107"></a><span class="sd"> connector_url (str): The URL of the Graylog connector.</span>
3379 -<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> connector_username (str): The username of the Graylog connector.</span>
3380 -<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> connector_password (str): The password of the Graylog connector.</span>
3381 -<a id="__codelineno-0-110" name="__codelineno-0-110"></a>
3382 -<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> Returns:</span>
3383 -<a id="__codelineno-0-112" name="__codelineno-0-112"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the size of uncommitted journal entries.</span>
3384 -<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> &quot;&quot;&quot;</span>
3385 -<a id="__codelineno-0-114" name="__codelineno-0-114"></a> <span class="k">try</span><span class="p">:</span>
3386 -<a id="__codelineno-0-115" name="__codelineno-0-115"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting journal size from Graylog&quot;</span><span class="p">)</span>
3387 -<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;X-Requested-By&quot;</span><span class="p">:</span> <span class="s2">&quot;CoPilot&quot;</span><span class="p">}</span>
3388 -<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="c1"># Get the Graylog Journal Size</span>
3389 -<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">uncommitted_journal_size_response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3390 -<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/system/journal&quot;</span><span class="p">,</span>
3391 -<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3392 -<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="n">connector_username</span><span class="p">,</span> <span class="n">connector_password</span><span class="p">),</span>
3393 -<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3394 -<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="p">)</span>
3395 -<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">uncommitted_journal_size</span> <span class="o">=</span> <span class="n">uncommitted_journal_size_response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
3396 -<a id="__codelineno-0-125" name="__codelineno-0-125"></a>
3397 -<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3398 -<a id="__codelineno-0-127" name="__codelineno-0-127"></a> <span class="sa">f</span><span class="s2">&quot;Received </span><span class="si">{</span><span class="n">uncommitted_journal_size</span><span class="si">}</span><span class="s2"> uncommitted journal entries from Graylog&quot;</span><span class="p">,</span>
3399 -<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="p">)</span>
3400 -<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="k">return</span> <span class="p">{</span>
3401 -<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved journal size&quot;</span><span class="p">,</span>
3402 -<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3403 -<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="s2">&quot;uncommitted_journal_entries&quot;</span><span class="p">:</span> <span class="n">uncommitted_journal_size</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3404 -<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="s2">&quot;uncommitted_journal_entries&quot;</span><span class="p">,</span>
3405 -<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="mi">0</span><span class="p">,</span>
3406 -<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="p">),</span>
3407 -<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="p">}</span>
3408 -<a id="__codelineno-0-137" name="__codelineno-0-137"></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>
3409 -<a id="__codelineno-0-138" name="__codelineno-0-138"></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">&quot;Failed to collect journal size from Graylog: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3410 -<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">return</span> <span class="p">{</span>
3411 -<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect journal size from Graylog&quot;</span><span class="p">,</span>
3412 -<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3413 -<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="p">}</span>
3414 -<a id="__codelineno-0-143" name="__codelineno-0-143"></a>
3415 -<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="k">def</span> <span class="nf">_collect_metrics_throughput_usage</span><span class="p">(</span>
3416 -<a id="__codelineno-0-145" name="__codelineno-0-145"></a> <span class="bp">self</span><span class="p">,</span>
3417 -<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3418 -<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="n">connector_username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3419 -<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="n">connector_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3420 -<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3421 -<a id="__codelineno-0-150" name="__codelineno-0-150"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3422 -<a id="__codelineno-0-151" name="__codelineno-0-151"></a><span class="sd"> Collects throughput usage from Graylog.</span>
3423 -<a id="__codelineno-0-152" name="__codelineno-0-152"></a>
3424 -<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> Args:</span>
3425 -<a id="__codelineno-0-154" name="__codelineno-0-154"></a><span class="sd"> connector_url (str): The URL of the Graylog connector.</span>
3426 -<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> connector_username (str): The username of the Graylog connector.</span>
3427 -<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> connector_password (str): The password of the Graylog connector.</span>
3428 -<a id="__codelineno-0-157" name="__codelineno-0-157"></a>
3429 -<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> Returns:</span>
3430 -<a id="__codelineno-0-159" name="__codelineno-0-159"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of throughput usage metrics.</span>
3431 -<a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="sd"> &quot;&quot;&quot;</span>
3432 -<a id="__codelineno-0-161" name="__codelineno-0-161"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting throughput usage from Graylog&quot;</span><span class="p">)</span>
3433 -<a id="__codelineno-0-162" name="__codelineno-0-162"></a>
3434 -<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="k">try</span><span class="p">:</span>
3435 -<a id="__codelineno-0-164" name="__codelineno-0-164"></a> <span class="n">throughput_metrics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_throughput_api_call</span><span class="p">(</span>
3436 -<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="n">connector_url</span><span class="p">,</span>
3437 -<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="bp">self</span><span class="o">.</span><span class="n">HEADERS</span><span class="p">,</span>
3438 -<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="n">connector_username</span><span class="p">,</span>
3439 -<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="n">connector_password</span><span class="p">,</span>
3440 -<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="p">)</span>
3441 -<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_throughput_metrics</span><span class="p">(</span><span class="n">throughput_metrics</span><span class="p">)</span>
3442 -<a id="__codelineno-0-171" name="__codelineno-0-171"></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>
3443 -<a id="__codelineno-0-172" name="__codelineno-0-172"></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">&quot;Failed to collect throughput usage from Graylog: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3444 -<a id="__codelineno-0-173" name="__codelineno-0-173"></a> <span class="k">return</span> <span class="p">{</span>
3445 -<a id="__codelineno-0-174" name="__codelineno-0-174"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect throughput usage from Graylog&quot;</span><span class="p">,</span>
3446 -<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3447 -<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="p">}</span>
3448 -<a id="__codelineno-0-177" name="__codelineno-0-177"></a>
3449 -<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="k">def</span> <span class="nf">_make_throughput_api_call</span><span class="p">(</span>
3450 -<a id="__codelineno-0-179" name="__codelineno-0-179"></a> <span class="bp">self</span><span class="p">,</span>
3451 -<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3452 -<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="n">headers</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>
3453 -<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="n">connector_username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3454 -<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="n">connector_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3455 -<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="p">)</span> <span class="o">-&gt;</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>
3456 -<a id="__codelineno-0-185" name="__codelineno-0-185"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3457 -<a id="__codelineno-0-186" name="__codelineno-0-186"></a><span class="sd"> Makes Throughput API call to Graylog.</span>
3458 -<a id="__codelineno-0-187" name="__codelineno-0-187"></a>
3459 -<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> Args:</span>
3460 -<a id="__codelineno-0-189" name="__codelineno-0-189"></a><span class="sd"> connector_url (str): The URL of the Graylog connector.</span>
3461 -<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sd"> headers (dict): The headers for the request.</span>
3462 -<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> connector_username (str): The username of the Graylog connector.</span>
3463 -<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> connector_password (str): The password of the Graylog connector.</span>
3464 -<a id="__codelineno-0-193" name="__codelineno-0-193"></a>
3465 -<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> Returns:</span>
3466 -<a id="__codelineno-0-195" name="__codelineno-0-195"></a><span class="sd"> dict: The dictionary containing throughput metrics.</span>
3467 -<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="sd"> &quot;&quot;&quot;</span>
3468 -<a id="__codelineno-0-197" name="__codelineno-0-197"></a> <span class="n">throughput</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3469 -<a id="__codelineno-0-198" name="__codelineno-0-198"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/system/metrics&quot;</span><span class="p">,</span>
3470 -<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3471 -<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="n">connector_username</span><span class="p">,</span> <span class="n">connector_password</span><span class="p">),</span>
3472 -<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3473 -<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="p">)</span>
3474 -<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">throughput_json</span> <span class="o">=</span> <span class="n">throughput</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
3475 -<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="n">throughput_metrics</span> <span class="o">=</span> <span class="n">throughput_json</span><span class="p">[</span><span class="s2">&quot;gauges&quot;</span><span class="p">]</span>
3476 -<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="n">input_output_throughput</span> <span class="o">=</span> <span class="n">throughput_json</span><span class="p">[</span><span class="s2">&quot;counters&quot;</span><span class="p">]</span>
3477 -<a id="__codelineno-0-206" name="__codelineno-0-206"></a>
3478 -<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">throughput_metrics</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">input_output_throughput</span><span class="p">)</span> <span class="c1"># Merge the two dictionaries</span>
3479 -<a id="__codelineno-0-208" name="__codelineno-0-208"></a> <span class="k">return</span> <span class="n">throughput_metrics</span>
3480 -<a id="__codelineno-0-209" name="__codelineno-0-209"></a>
3481 -<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="k">def</span> <span class="nf">_parse_throughput_metrics</span><span class="p">(</span>
3482 -<a id="__codelineno-0-211" name="__codelineno-0-211"></a> <span class="bp">self</span><span class="p">,</span>
3483 -<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="n">throughput_metrics</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>
3484 -<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3485 -<a id="__codelineno-0-214" name="__codelineno-0-214"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3486 -<a id="__codelineno-0-215" name="__codelineno-0-215"></a><span class="sd"> Parses throughput metrics.</span>
3487 -<a id="__codelineno-0-216" name="__codelineno-0-216"></a>
3488 -<a id="__codelineno-0-217" name="__codelineno-0-217"></a><span class="sd"> Args:</span>
3489 -<a id="__codelineno-0-218" name="__codelineno-0-218"></a><span class="sd"> throughput_metrics (dict): The dictionary containing throughput metrics.</span>
3490 -<a id="__codelineno-0-219" name="__codelineno-0-219"></a>
3491 -<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="sd"> Returns:</span>
3492 -<a id="__codelineno-0-221" name="__codelineno-0-221"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of parsed throughput metrics.</span>
3493 -<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> &quot;&quot;&quot;</span>
3494 -<a id="__codelineno-0-223" name="__codelineno-0-223"></a> <span class="n">throughput_metrics_list</span> <span class="o">=</span> <span class="p">[]</span>
3495 -<a id="__codelineno-0-224" name="__codelineno-0-224"></a> <span class="n">results</span> <span class="o">=</span> <span class="p">{}</span>
3496 -<a id="__codelineno-0-225" name="__codelineno-0-225"></a>
3497 -<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="k">for</span> <span class="n">metric</span><span class="p">,</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">throughput_metrics</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
3498 -<a id="__codelineno-0-227" name="__codelineno-0-227"></a> <span class="k">if</span> <span class="n">metric</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">METRIC_NAMES</span><span class="p">:</span>
3499 -<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;value&quot;</span> <span class="ow">in</span> <span class="n">data</span> <span class="k">else</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;count&quot;</span><span class="p">]</span>
3500 -<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="n">throughput_metrics_list</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;metric&quot;</span><span class="p">:</span> <span class="n">metric</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
3501 -<a id="__codelineno-0-230" name="__codelineno-0-230"></a>
3502 -<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="n">variable_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">METRIC_NAMES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">metric</span><span class="p">)</span>
3503 -<a id="__codelineno-0-232" name="__codelineno-0-232"></a> <span class="k">if</span> <span class="n">variable_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
3504 -<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="n">results</span><span class="p">[</span><span class="n">variable_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
3505 -<a id="__codelineno-0-234" name="__codelineno-0-234"></a>
3506 -<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3507 -<a id="__codelineno-0-236" name="__codelineno-0-236"></a> <span class="sa">f</span><span class="s2">&quot;Received throughput usage from Graylog: </span><span class="si">{</span><span class="n">throughput_metrics_list</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
3508 -<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="p">)</span>
3509 -<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="k">return</span> <span class="p">{</span>
3510 -<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved throughput usage&quot;</span><span class="p">,</span>
3511 -<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3512 -<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="s2">&quot;throughput_metrics&quot;</span><span class="p">:</span> <span class="n">throughput_metrics_list</span><span class="p">,</span>
3513 -<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="p">}</span>
3369 +<a id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="k">def</span> <span class="nf">collect_throughput_metrics</span><span class="p">(</span>
3370 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="bp">self</span><span class="p">,</span>
3371 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3372 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3373 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> Collects the following Graylog Metrics:</span>
3374 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> - Input Usage</span>
3375 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> - Output Usage</span>
3376 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> - Processor Usage</span>
3377 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> - Input 1 Seconds Rate</span>
3378 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> - Output 1 Seconds Rate</span>
3379 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> - Total Input</span>
3380 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> - Total Output</span>
3381 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
3382 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Returns:</span>
3383 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of throughput metrics.</span>
3384 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> &quot;&quot;&quot;</span>
3385 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="p">(</span>
3386 +<a id="__codelineno-0-83" name="__codelineno-0-83"></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>
3387 +<a id="__codelineno-0-84" name="__codelineno-0-84"></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>
3388 +<a id="__codelineno-0-85" name="__codelineno-0-85"></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>
3389 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">):</span>
3390 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3391 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
3392 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">throughput_usage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_metrics_throughput_usage</span><span class="p">(</span>
3393 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3394 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
3395 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
3396 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">)</span>
3397 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a>
3398 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="n">throughput_usage</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
3399 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3400 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3401 +<a id="__codelineno-0-98" name="__codelineno-0-98"></a>
3402 +<a id="__codelineno-0-99" name="__codelineno-0-99"></a> <span class="k">def</span> <span class="nf">_collect_metrics_uncommitted_journal_size</span><span class="p">(</span>
3403 +<a id="__codelineno-0-100" name="__codelineno-0-100"></a> <span class="bp">self</span><span class="p">,</span>
3404 +<a id="__codelineno-0-101" name="__codelineno-0-101"></a> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3405 +<a id="__codelineno-0-102" name="__codelineno-0-102"></a> <span class="n">connector_username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3406 +<a id="__codelineno-0-103" name="__codelineno-0-103"></a> <span class="n">connector_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3407 +<a id="__codelineno-0-104" name="__codelineno-0-104"></a> <span class="p">)</span> <span class="o">-&gt;</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> <span class="nb">int</span><span class="p">]]:</span>
3408 +<a id="__codelineno-0-105" name="__codelineno-0-105"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3409 +<a id="__codelineno-0-106" name="__codelineno-0-106"></a><span class="sd"> Collects the journal size of uncommitted messages from Graylog.</span>
3410 +<a id="__codelineno-0-107" name="__codelineno-0-107"></a>
3411 +<a id="__codelineno-0-108" name="__codelineno-0-108"></a><span class="sd"> Args:</span>
3412 +<a id="__codelineno-0-109" name="__codelineno-0-109"></a><span class="sd"> connector_url (str): The URL of the Graylog connector.</span>
3413 +<a id="__codelineno-0-110" name="__codelineno-0-110"></a><span class="sd"> connector_username (str): The username of the Graylog connector.</span>
3414 +<a id="__codelineno-0-111" name="__codelineno-0-111"></a><span class="sd"> connector_password (str): The password of the Graylog connector.</span>
3415 +<a id="__codelineno-0-112" name="__codelineno-0-112"></a>
3416 +<a id="__codelineno-0-113" name="__codelineno-0-113"></a><span class="sd"> Returns:</span>
3417 +<a id="__codelineno-0-114" name="__codelineno-0-114"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the size of uncommitted journal entries.</span>
3418 +<a id="__codelineno-0-115" name="__codelineno-0-115"></a><span class="sd"> &quot;&quot;&quot;</span>
3419 +<a id="__codelineno-0-116" name="__codelineno-0-116"></a> <span class="k">try</span><span class="p">:</span>
3420 +<a id="__codelineno-0-117" name="__codelineno-0-117"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting journal size from Graylog&quot;</span><span class="p">)</span>
3421 +<a id="__codelineno-0-118" name="__codelineno-0-118"></a> <span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;X-Requested-By&quot;</span><span class="p">:</span> <span class="s2">&quot;CoPilot&quot;</span><span class="p">}</span>
3422 +<a id="__codelineno-0-119" name="__codelineno-0-119"></a> <span class="c1"># Get the Graylog Journal Size</span>
3423 +<a id="__codelineno-0-120" name="__codelineno-0-120"></a> <span class="n">uncommitted_journal_size_response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3424 +<a id="__codelineno-0-121" name="__codelineno-0-121"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/system/journal&quot;</span><span class="p">,</span>
3425 +<a id="__codelineno-0-122" name="__codelineno-0-122"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3426 +<a id="__codelineno-0-123" name="__codelineno-0-123"></a> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="n">connector_username</span><span class="p">,</span> <span class="n">connector_password</span><span class="p">),</span>
3427 +<a id="__codelineno-0-124" name="__codelineno-0-124"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3428 +<a id="__codelineno-0-125" name="__codelineno-0-125"></a> <span class="p">)</span>
3429 +<a id="__codelineno-0-126" name="__codelineno-0-126"></a> <span class="n">uncommitted_journal_size</span> <span class="o">=</span> <span class="n">uncommitted_journal_size_response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
3430 +<a id="__codelineno-0-127" name="__codelineno-0-127"></a>
3431 +<a id="__codelineno-0-128" name="__codelineno-0-128"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3432 +<a id="__codelineno-0-129" name="__codelineno-0-129"></a> <span class="sa">f</span><span class="s2">&quot;Received </span><span class="si">{</span><span class="n">uncommitted_journal_size</span><span class="si">}</span><span class="s2"> uncommitted journal entries from Graylog&quot;</span><span class="p">,</span>
3433 +<a id="__codelineno-0-130" name="__codelineno-0-130"></a> <span class="p">)</span>
3434 +<a id="__codelineno-0-131" name="__codelineno-0-131"></a> <span class="k">return</span> <span class="p">{</span>
3435 +<a id="__codelineno-0-132" name="__codelineno-0-132"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved journal size&quot;</span><span class="p">,</span>
3436 +<a id="__codelineno-0-133" name="__codelineno-0-133"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3437 +<a id="__codelineno-0-134" name="__codelineno-0-134"></a> <span class="s2">&quot;uncommitted_journal_entries&quot;</span><span class="p">:</span> <span class="n">uncommitted_journal_size</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3438 +<a id="__codelineno-0-135" name="__codelineno-0-135"></a> <span class="s2">&quot;uncommitted_journal_entries&quot;</span><span class="p">,</span>
3439 +<a id="__codelineno-0-136" name="__codelineno-0-136"></a> <span class="mi">0</span><span class="p">,</span>
3440 +<a id="__codelineno-0-137" name="__codelineno-0-137"></a> <span class="p">),</span>
3441 +<a id="__codelineno-0-138" name="__codelineno-0-138"></a> <span class="p">}</span>
3442 +<a id="__codelineno-0-139" name="__codelineno-0-139"></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>
3443 +<a id="__codelineno-0-140" name="__codelineno-0-140"></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">&quot;Failed to collect journal size from Graylog: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3444 +<a id="__codelineno-0-141" name="__codelineno-0-141"></a> <span class="k">return</span> <span class="p">{</span>
3445 +<a id="__codelineno-0-142" name="__codelineno-0-142"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect journal size from Graylog&quot;</span><span class="p">,</span>
3446 +<a id="__codelineno-0-143" name="__codelineno-0-143"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3447 +<a id="__codelineno-0-144" name="__codelineno-0-144"></a> <span class="p">}</span>
3448 +<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
3449 +<a id="__codelineno-0-146" name="__codelineno-0-146"></a> <span class="k">def</span> <span class="nf">_collect_metrics_throughput_usage</span><span class="p">(</span>
3450 +<a id="__codelineno-0-147" name="__codelineno-0-147"></a> <span class="bp">self</span><span class="p">,</span>
3451 +<a id="__codelineno-0-148" name="__codelineno-0-148"></a> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3452 +<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="n">connector_username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3453 +<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="n">connector_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3454 +<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3455 +<a id="__codelineno-0-152" name="__codelineno-0-152"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3456 +<a id="__codelineno-0-153" name="__codelineno-0-153"></a><span class="sd"> Collects throughput usage from Graylog.</span>
3457 +<a id="__codelineno-0-154" name="__codelineno-0-154"></a>
3458 +<a id="__codelineno-0-155" name="__codelineno-0-155"></a><span class="sd"> Args:</span>
3459 +<a id="__codelineno-0-156" name="__codelineno-0-156"></a><span class="sd"> connector_url (str): The URL of the Graylog connector.</span>
3460 +<a id="__codelineno-0-157" name="__codelineno-0-157"></a><span class="sd"> connector_username (str): The username of the Graylog connector.</span>
3461 +<a id="__codelineno-0-158" name="__codelineno-0-158"></a><span class="sd"> connector_password (str): The password of the Graylog connector.</span>
3462 +<a id="__codelineno-0-159" name="__codelineno-0-159"></a>
3463 +<a id="__codelineno-0-160" name="__codelineno-0-160"></a><span class="sd"> Returns:</span>
3464 +<a id="__codelineno-0-161" name="__codelineno-0-161"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of throughput usage metrics.</span>
3465 +<a id="__codelineno-0-162" name="__codelineno-0-162"></a><span class="sd"> &quot;&quot;&quot;</span>
3466 +<a id="__codelineno-0-163" name="__codelineno-0-163"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Collecting throughput usage from Graylog&quot;</span><span class="p">)</span>
3467 +<a id="__codelineno-0-164" name="__codelineno-0-164"></a>
3468 +<a id="__codelineno-0-165" name="__codelineno-0-165"></a> <span class="k">try</span><span class="p">:</span>
3469 +<a id="__codelineno-0-166" name="__codelineno-0-166"></a> <span class="n">throughput_metrics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_throughput_api_call</span><span class="p">(</span>
3470 +<a id="__codelineno-0-167" name="__codelineno-0-167"></a> <span class="n">connector_url</span><span class="p">,</span>
3471 +<a id="__codelineno-0-168" name="__codelineno-0-168"></a> <span class="bp">self</span><span class="o">.</span><span class="n">HEADERS</span><span class="p">,</span>
3472 +<a id="__codelineno-0-169" name="__codelineno-0-169"></a> <span class="n">connector_username</span><span class="p">,</span>
3473 +<a id="__codelineno-0-170" name="__codelineno-0-170"></a> <span class="n">connector_password</span><span class="p">,</span>
3474 +<a id="__codelineno-0-171" name="__codelineno-0-171"></a> <span class="p">)</span>
3475 +<a id="__codelineno-0-172" name="__codelineno-0-172"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_throughput_metrics</span><span class="p">(</span><span class="n">throughput_metrics</span><span class="p">)</span>
3476 +<a id="__codelineno-0-173" name="__codelineno-0-173"></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>
3477 +<a id="__codelineno-0-174" name="__codelineno-0-174"></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">&quot;Failed to collect throughput usage from Graylog: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
3478 +<a id="__codelineno-0-175" name="__codelineno-0-175"></a> <span class="k">return</span> <span class="p">{</span>
3479 +<a id="__codelineno-0-176" name="__codelineno-0-176"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect throughput usage from Graylog&quot;</span><span class="p">,</span>
3480 +<a id="__codelineno-0-177" name="__codelineno-0-177"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
3481 +<a id="__codelineno-0-178" name="__codelineno-0-178"></a> <span class="p">}</span>
3482 +<a id="__codelineno-0-179" name="__codelineno-0-179"></a>
3483 +<a id="__codelineno-0-180" name="__codelineno-0-180"></a> <span class="k">def</span> <span class="nf">_make_throughput_api_call</span><span class="p">(</span>
3484 +<a id="__codelineno-0-181" name="__codelineno-0-181"></a> <span class="bp">self</span><span class="p">,</span>
3485 +<a id="__codelineno-0-182" name="__codelineno-0-182"></a> <span class="n">connector_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3486 +<a id="__codelineno-0-183" name="__codelineno-0-183"></a> <span class="n">headers</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>
3487 +<a id="__codelineno-0-184" name="__codelineno-0-184"></a> <span class="n">connector_username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3488 +<a id="__codelineno-0-185" name="__codelineno-0-185"></a> <span class="n">connector_password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
3489 +<a id="__codelineno-0-186" name="__codelineno-0-186"></a> <span class="p">)</span> <span class="o">-&gt;</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>
3490 +<a id="__codelineno-0-187" name="__codelineno-0-187"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3491 +<a id="__codelineno-0-188" name="__codelineno-0-188"></a><span class="sd"> Makes Throughput API call to Graylog.</span>
3492 +<a id="__codelineno-0-189" name="__codelineno-0-189"></a>
3493 +<a id="__codelineno-0-190" name="__codelineno-0-190"></a><span class="sd"> Args:</span>
3494 +<a id="__codelineno-0-191" name="__codelineno-0-191"></a><span class="sd"> connector_url (str): The URL of the Graylog connector.</span>
3495 +<a id="__codelineno-0-192" name="__codelineno-0-192"></a><span class="sd"> headers (dict): The headers for the request.</span>
3496 +<a id="__codelineno-0-193" name="__codelineno-0-193"></a><span class="sd"> connector_username (str): The username of the Graylog connector.</span>
3497 +<a id="__codelineno-0-194" name="__codelineno-0-194"></a><span class="sd"> connector_password (str): The password of the Graylog connector.</span>
3498 +<a id="__codelineno-0-195" name="__codelineno-0-195"></a>
3499 +<a id="__codelineno-0-196" name="__codelineno-0-196"></a><span class="sd"> Returns:</span>
3500 +<a id="__codelineno-0-197" name="__codelineno-0-197"></a><span class="sd"> dict: The dictionary containing throughput metrics.</span>
3501 +<a id="__codelineno-0-198" name="__codelineno-0-198"></a><span class="sd"> &quot;&quot;&quot;</span>
3502 +<a id="__codelineno-0-199" name="__codelineno-0-199"></a> <span class="n">throughput</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
3503 +<a id="__codelineno-0-200" name="__codelineno-0-200"></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">connector_url</span><span class="si">}</span><span class="s2">/api/system/metrics&quot;</span><span class="p">,</span>
3504 +<a id="__codelineno-0-201" name="__codelineno-0-201"></a> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span>
3505 +<a id="__codelineno-0-202" name="__codelineno-0-202"></a> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="n">connector_username</span><span class="p">,</span> <span class="n">connector_password</span><span class="p">),</span>
3506 +<a id="__codelineno-0-203" name="__codelineno-0-203"></a> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
3507 +<a id="__codelineno-0-204" name="__codelineno-0-204"></a> <span class="p">)</span>
3508 +<a id="__codelineno-0-205" name="__codelineno-0-205"></a> <span class="n">throughput_json</span> <span class="o">=</span> <span class="n">throughput</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
3509 +<a id="__codelineno-0-206" name="__codelineno-0-206"></a> <span class="n">throughput_metrics</span> <span class="o">=</span> <span class="n">throughput_json</span><span class="p">[</span><span class="s2">&quot;gauges&quot;</span><span class="p">]</span>
3510 +<a id="__codelineno-0-207" name="__codelineno-0-207"></a> <span class="n">input_output_throughput</span> <span class="o">=</span> <span class="n">throughput_json</span><span class="p">[</span><span class="s2">&quot;counters&quot;</span><span class="p">]</span>
3511 +<a id="__codelineno-0-208" name="__codelineno-0-208"></a>
3512 +<a id="__codelineno-0-209" name="__codelineno-0-209"></a> <span class="n">throughput_metrics</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">input_output_throughput</span><span class="p">)</span> <span class="c1"># Merge the two dictionaries</span>
3513 +<a id="__codelineno-0-210" name="__codelineno-0-210"></a> <span class="k">return</span> <span class="n">throughput_metrics</span>
3514 +<a id="__codelineno-0-211" name="__codelineno-0-211"></a>
3515 +<a id="__codelineno-0-212" name="__codelineno-0-212"></a> <span class="k">def</span> <span class="nf">_parse_throughput_metrics</span><span class="p">(</span>
3516 +<a id="__codelineno-0-213" name="__codelineno-0-213"></a> <span class="bp">self</span><span class="p">,</span>
3517 +<a id="__codelineno-0-214" name="__codelineno-0-214"></a> <span class="n">throughput_metrics</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>
3518 +<a id="__codelineno-0-215" name="__codelineno-0-215"></a> <span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3519 +<a id="__codelineno-0-216" name="__codelineno-0-216"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3520 +<a id="__codelineno-0-217" name="__codelineno-0-217"></a><span class="sd"> Parses throughput metrics.</span>
3521 +<a id="__codelineno-0-218" name="__codelineno-0-218"></a>
3522 +<a id="__codelineno-0-219" name="__codelineno-0-219"></a><span class="sd"> Args:</span>
3523 +<a id="__codelineno-0-220" name="__codelineno-0-220"></a><span class="sd"> throughput_metrics (dict): The dictionary containing throughput metrics.</span>
3524 +<a id="__codelineno-0-221" name="__codelineno-0-221"></a>
3525 +<a id="__codelineno-0-222" name="__codelineno-0-222"></a><span class="sd"> Returns:</span>
3526 +<a id="__codelineno-0-223" name="__codelineno-0-223"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of parsed throughput metrics.</span>
3527 +<a id="__codelineno-0-224" name="__codelineno-0-224"></a><span class="sd"> &quot;&quot;&quot;</span>
3528 +<a id="__codelineno-0-225" name="__codelineno-0-225"></a> <span class="n">throughput_metrics_list</span> <span class="o">=</span> <span class="p">[]</span>
3529 +<a id="__codelineno-0-226" name="__codelineno-0-226"></a> <span class="n">results</span> <span class="o">=</span> <span class="p">{}</span>
3530 +<a id="__codelineno-0-227" name="__codelineno-0-227"></a>
3531 +<a id="__codelineno-0-228" name="__codelineno-0-228"></a> <span class="k">for</span> <span class="n">metric</span><span class="p">,</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">throughput_metrics</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
3532 +<a id="__codelineno-0-229" name="__codelineno-0-229"></a> <span class="k">if</span> <span class="n">metric</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">METRIC_NAMES</span><span class="p">:</span>
3533 +<a id="__codelineno-0-230" name="__codelineno-0-230"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;value&quot;</span> <span class="ow">in</span> <span class="n">data</span> <span class="k">else</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;count&quot;</span><span class="p">]</span>
3534 +<a id="__codelineno-0-231" name="__codelineno-0-231"></a> <span class="n">throughput_metrics_list</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;metric&quot;</span><span class="p">:</span> <span class="n">metric</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
3535 +<a id="__codelineno-0-232" name="__codelineno-0-232"></a>
3536 +<a id="__codelineno-0-233" name="__codelineno-0-233"></a> <span class="n">variable_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">METRIC_NAMES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">metric</span><span class="p">)</span>
3537 +<a id="__codelineno-0-234" name="__codelineno-0-234"></a> <span class="k">if</span> <span class="n">variable_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
3538 +<a id="__codelineno-0-235" name="__codelineno-0-235"></a> <span class="n">results</span><span class="p">[</span><span class="n">variable_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
3539 +<a id="__codelineno-0-236" name="__codelineno-0-236"></a>
3540 +<a id="__codelineno-0-237" name="__codelineno-0-237"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
3541 +<a id="__codelineno-0-238" name="__codelineno-0-238"></a> <span class="sa">f</span><span class="s2">&quot;Received throughput usage from Graylog: </span><span class="si">{</span><span class="n">throughput_metrics_list</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
3542 +<a id="__codelineno-0-239" name="__codelineno-0-239"></a> <span class="p">)</span>
3543 +<a id="__codelineno-0-240" name="__codelineno-0-240"></a> <span class="k">return</span> <span class="p">{</span>
3544 +<a id="__codelineno-0-241" name="__codelineno-0-241"></a> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Successfully retrieved throughput usage&quot;</span><span class="p">,</span>
3545 +<a id="__codelineno-0-242" name="__codelineno-0-242"></a> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
3546 +<a id="__codelineno-0-243" name="__codelineno-0-243"></a> <span class="s2">&quot;throughput_metrics&quot;</span><span class="p">:</span> <span class="n">throughput_metrics_list</span><span class="p">,</span>
3547 +<a id="__codelineno-0-244" name="__codelineno-0-244"></a> <span class="p">}</span>
3548 </code></pre></div></td></tr></table></div>
3549 </details>
3550
@@ -3639,36 +3673,40 @@ This class inherits from SQLAlchemy's Model class.</p>
3673 <span class="normal"><a href="#__codelineno-0-92">92</a></span>
3674 <span class="normal"><a href="#__codelineno-0-93">93</a></span>
3675 <span class="normal"><a href="#__codelineno-0-94">94</a></span>
3642 -<span class="normal"><a href="#__codelineno-0-95">95</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-66" name="__codelineno-0-66"></a><span class="k">def</span> <span class="nf">collect_throughput_metrics</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3643 -<a id="__codelineno-0-67" name="__codelineno-0-67"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3644 -<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="sd"> Collects the following Graylog Metrics:</span>
3645 -<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="sd"> - Input Usage</span>
3646 -<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> - Output Usage</span>
3647 -<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> - Processor Usage</span>
3648 -<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> - Input 1 Seconds Rate</span>
3649 -<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> - Output 1 Seconds Rate</span>
3650 -<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> - Total Input</span>
3651 -<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> - Total Output</span>
3652 -<a id="__codelineno-0-76" name="__codelineno-0-76"></a>
3653 -<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> Returns:</span>
3654 -<a id="__codelineno-0-78" name="__codelineno-0-78"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of throughput metrics.</span>
3655 -<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> &quot;&quot;&quot;</span>
3656 -<a id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="k">if</span> <span class="p">(</span>
3657 -<a id="__codelineno-0-81" name="__codelineno-0-81"></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>
3658 -<a id="__codelineno-0-82" name="__codelineno-0-82"></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>
3659 -<a id="__codelineno-0-83" name="__codelineno-0-83"></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>
3660 -<a id="__codelineno-0-84" name="__codelineno-0-84"></a> <span class="p">):</span>
3661 -<a id="__codelineno-0-85" name="__codelineno-0-85"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3662 -<a id="__codelineno-0-86" name="__codelineno-0-86"></a>
3663 -<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="n">throughput_usage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_metrics_throughput_usage</span><span class="p">(</span>
3664 -<a id="__codelineno-0-88" name="__codelineno-0-88"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3665 -<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
3666 -<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
3667 -<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="p">)</span>
3668 -<a id="__codelineno-0-92" name="__codelineno-0-92"></a>
3669 -<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="k">if</span> <span class="n">throughput_usage</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
3670 -<a id="__codelineno-0-94" name="__codelineno-0-94"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3671 -<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3676 +<span class="normal"><a href="#__codelineno-0-95">95</a></span>
3677 +<span class="normal"><a href="#__codelineno-0-96">96</a></span>
3678 +<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-66" name="__codelineno-0-66"></a><span class="k">def</span> <span class="nf">collect_throughput_metrics</span><span class="p">(</span>
3679 +<a id="__codelineno-0-67" name="__codelineno-0-67"></a> <span class="bp">self</span><span class="p">,</span>
3680 +<a id="__codelineno-0-68" name="__codelineno-0-68"></a><span class="p">)</span> <span class="o">-&gt;</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> <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="n">Any</span><span class="p">]]]]:</span>
3681 +<a id="__codelineno-0-69" name="__codelineno-0-69"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3682 +<a id="__codelineno-0-70" name="__codelineno-0-70"></a><span class="sd"> Collects the following Graylog Metrics:</span>
3683 +<a id="__codelineno-0-71" name="__codelineno-0-71"></a><span class="sd"> - Input Usage</span>
3684 +<a id="__codelineno-0-72" name="__codelineno-0-72"></a><span class="sd"> - Output Usage</span>
3685 +<a id="__codelineno-0-73" name="__codelineno-0-73"></a><span class="sd"> - Processor Usage</span>
3686 +<a id="__codelineno-0-74" name="__codelineno-0-74"></a><span class="sd"> - Input 1 Seconds Rate</span>
3687 +<a id="__codelineno-0-75" name="__codelineno-0-75"></a><span class="sd"> - Output 1 Seconds Rate</span>
3688 +<a id="__codelineno-0-76" name="__codelineno-0-76"></a><span class="sd"> - Total Input</span>
3689 +<a id="__codelineno-0-77" name="__codelineno-0-77"></a><span class="sd"> - Total Output</span>
3690 +<a id="__codelineno-0-78" name="__codelineno-0-78"></a>
3691 +<a id="__codelineno-0-79" name="__codelineno-0-79"></a><span class="sd"> Returns:</span>
3692 +<a id="__codelineno-0-80" name="__codelineno-0-80"></a><span class="sd"> dict: A dictionary containing the success status, a message, and the list of throughput metrics.</span>
3693 +<a id="__codelineno-0-81" name="__codelineno-0-81"></a><span class="sd"> &quot;&quot;&quot;</span>
3694 +<a id="__codelineno-0-82" name="__codelineno-0-82"></a> <span class="k">if</span> <span class="p">(</span>
3695 +<a id="__codelineno-0-83" name="__codelineno-0-83"></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>
3696 +<a id="__codelineno-0-84" name="__codelineno-0-84"></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>
3697 +<a id="__codelineno-0-85" name="__codelineno-0-85"></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>
3698 +<a id="__codelineno-0-86" name="__codelineno-0-86"></a> <span class="p">):</span>
3699 +<a id="__codelineno-0-87" name="__codelineno-0-87"></a> <span class="k">return</span> <span class="p">{</span><span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="s2">&quot;Failed to collect Graylog details&quot;</span><span class="p">,</span> <span class="s2">&quot;success&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
3700 +<a id="__codelineno-0-88" name="__codelineno-0-88"></a>
3701 +<a id="__codelineno-0-89" name="__codelineno-0-89"></a> <span class="n">throughput_usage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collect_metrics_throughput_usage</span><span class="p">(</span>
3702 +<a id="__codelineno-0-90" name="__codelineno-0-90"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_url</span><span class="p">,</span>
3703 +<a id="__codelineno-0-91" name="__codelineno-0-91"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_username</span><span class="p">,</span>
3704 +<a id="__codelineno-0-92" name="__codelineno-0-92"></a> <span class="bp">self</span><span class="o">.</span><span class="n">connector_password</span><span class="p">,</span>
3705 +<a id="__codelineno-0-93" name="__codelineno-0-93"></a> <span class="p">)</span>
3706 +<a id="__codelineno-0-94" name="__codelineno-0-94"></a>
3707 +<a id="__codelineno-0-95" name="__codelineno-0-95"></a> <span class="k">if</span> <span class="n">throughput_usage</span><span class="p">[</span><span class="s2">&quot;success&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
3708 +<a id="__codelineno-0-96" name="__codelineno-0-96"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3709 +<a id="__codelineno-0-97" name="__codelineno-0-97"></a> <span class="k">return</span> <span class="n">throughput_usage</span>
3710 </code></pre></div></td></tr></table></div>
3711 </details>
3712 </div>
@@ -3817,7 +3855,8 @@ This class inherits from SQLAlchemy's Model class.</p>
3855
3856 <details class="quote">
3857 <summary>Source code in <code>app\services\Graylog\universal.py</code></summary>
3820 - <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
3858 + <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
3859 +<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
3860 <span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
3861 <span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
3862 <span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
@@ -3844,36 +3883,35 @@ This class inherits from SQLAlchemy's Model class.</p>
3883 <span class="normal"><a href="#__codelineno-0-30">30</a></span>
3884 <span class="normal"><a href="#__codelineno-0-31">31</a></span>
3885 <span class="normal"><a href="#__codelineno-0-32">32</a></span>
3847 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
3848 -<span class="normal"><a href="#__codelineno-0-34">34</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
3849 -<a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3850 -<a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="sd"> A service class that encapsulates the logic for polling messages from Graylog.</span>
3851 -<a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="sd"> &quot;&quot;&quot;</span>
3852 -<a id="__codelineno-0-10" name="__codelineno-0-10"></a>
3853 -<a id="__codelineno-0-11" name="__codelineno-0-11"></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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3854 -<a id="__codelineno-0-12" name="__codelineno-0-12"></a> <span class="bp">self</span><span class="o">.</span><span class="n">collect_graylog_details</span><span class="p">(</span><span class="s2">&quot;Graylog&quot;</span><span class="p">)</span>
3855 -<a id="__codelineno-0-13" name="__codelineno-0-13"></a>
3856 -<a id="__codelineno-0-14" name="__codelineno-0-14"></a> <span class="k">def</span> <span class="nf">collect_graylog_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">-&gt;</span> <span class="nb">tuple</span><span class="p">:</span>
3857 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3858 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Collects the details of the Graylog connector.</span>
3859 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
3860 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Args:</span>
3861 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> connector_name (str): The name of the Graylog connector.</span>
3862 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
3863 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Returns:</span>
3864 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3865 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
3866 -<a id="__codelineno-0-24" name="__codelineno-0-24"></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>
3867 -<a id="__codelineno-0-25" name="__codelineno-0-25"></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>
3868 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3869 -<a id="__codelineno-0-27" name="__codelineno-0-27"></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>
3870 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">return</span> <span class="p">(</span>
3871 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3872 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3873 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3874 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="p">)</span>
3875 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">else</span><span class="p">:</span>
3876 -<a id="__codelineno-0-34" name="__codelineno-0-34"></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>
3886 +<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-5" name="__codelineno-0-5"></a><span class="k">class</span> <span class="nc">UniversalService</span><span class="p">:</span>
3887 +<a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3888 +<a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="sd"> A service class that encapsulates the logic for polling messages from Graylog.</span>
3889 +<a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="sd"> &quot;&quot;&quot;</span>
3890 +<a id="__codelineno-0-9" name="__codelineno-0-9"></a>
3891 +<a id="__codelineno-0-10" name="__codelineno-0-10"></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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
3892 +<a id="__codelineno-0-11" name="__codelineno-0-11"></a> <span class="bp">self</span><span class="o">.</span><span class="n">collect_graylog_details</span><span class="p">(</span><span class="s2">&quot;Graylog&quot;</span><span class="p">)</span>
3893 +<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
3894 +<a id="__codelineno-0-13" name="__codelineno-0-13"></a> <span class="k">def</span> <span class="nf">collect_graylog_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">-&gt;</span> <span class="nb">tuple</span><span class="p">:</span>
3895 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3896 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Collects the details of the Graylog connector.</span>
3897 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
3898 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Args:</span>
3899 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> connector_name (str): The name of the Graylog connector.</span>
3900 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
3901 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Returns:</span>
3902 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3903 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> &quot;&quot;&quot;</span>
3904 +<a id="__codelineno-0-23" name="__codelineno-0-23"></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>
3905 +<a id="__codelineno-0-24" name="__codelineno-0-24"></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>
3906 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3907 +<a id="__codelineno-0-26" name="__codelineno-0-26"></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>
3908 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">return</span> <span class="p">(</span>
3909 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3910 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3911 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3912 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="p">)</span>
3913 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
3914 +<a id="__codelineno-0-33" name="__codelineno-0-33"></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>
3915 </code></pre></div></td></tr></table></div>
3916 </details>
3917
@@ -3955,7 +3993,8 @@ This class inherits from SQLAlchemy's Model class.</p>
3993
3994 <details class="quote">
3995 <summary>Source code in <code>app\services\Graylog\universal.py</code></summary>
3958 - <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>
3996 + <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>
3997 +<span class="normal"><a href="#__codelineno-0-14">14</a></span>
3998 <span class="normal"><a href="#__codelineno-0-15">15</a></span>
3999 <span class="normal"><a href="#__codelineno-0-16">16</a></span>
4000 <span class="normal"><a href="#__codelineno-0-17">17</a></span>
@@ -3974,28 +4013,27 @@ This class inherits from SQLAlchemy's Model class.</p>
4013 <span class="normal"><a href="#__codelineno-0-30">30</a></span>
4014 <span class="normal"><a href="#__codelineno-0-31">31</a></span>
4015 <span class="normal"><a href="#__codelineno-0-32">32</a></span>
3977 -<span class="normal"><a href="#__codelineno-0-33">33</a></span>
3978 -<span class="normal"><a href="#__codelineno-0-34">34</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">def</span> <span class="nf">collect_graylog_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">-&gt;</span> <span class="nb">tuple</span><span class="p">:</span>
3979 -<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
3980 -<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="sd"> Collects the details of the Graylog connector.</span>
3981 -<a id="__codelineno-0-17" name="__codelineno-0-17"></a>
3982 -<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> Args:</span>
3983 -<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="sd"> connector_name (str): The name of the Graylog connector.</span>
3984 -<a id="__codelineno-0-20" name="__codelineno-0-20"></a>
3985 -<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> Returns:</span>
3986 -<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
3987 -<a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="sd"> &quot;&quot;&quot;</span>
3988 -<a id="__codelineno-0-24" name="__codelineno-0-24"></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>
3989 -<a id="__codelineno-0-25" name="__codelineno-0-25"></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>
3990 -<a id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
3991 -<a id="__codelineno-0-27" name="__codelineno-0-27"></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>
3992 -<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">return</span> <span class="p">(</span>
3993 -<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
3994 -<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
3995 -<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
3996 -<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="p">)</span>
3997 -<a id="__codelineno-0-33" name="__codelineno-0-33"></a> <span class="k">else</span><span class="p">:</span>
3998 -<a id="__codelineno-0-34" name="__codelineno-0-34"></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>
4016 +<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-13" name="__codelineno-0-13"></a><span class="k">def</span> <span class="nf">collect_graylog_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">-&gt;</span> <span class="nb">tuple</span><span class="p">:</span>
4017 +<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
4018 +<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="sd"> Collects the details of the Graylog connector.</span>
4019 +<a id="__codelineno-0-16" name="__codelineno-0-16"></a>
4020 +<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="sd"> Args:</span>
4021 +<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="sd"> connector_name (str): The name of the Graylog connector.</span>
4022 +<a id="__codelineno-0-19" name="__codelineno-0-19"></a>
4023 +<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="sd"> Returns:</span>
4024 +<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="sd"> tuple: A tuple containing the connection URL, username, and password.</span>
4025 +<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="sd"> &quot;&quot;&quot;</span>
4026 +<a id="__codelineno-0-23" name="__codelineno-0-23"></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>
4027 +<a id="__codelineno-0-24" name="__codelineno-0-24"></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>
4028 +<a id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="k">if</span> <span class="n">connection_successful</span><span class="p">:</span>
4029 +<a id="__codelineno-0-26" name="__codelineno-0-26"></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>
4030 +<a id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="k">return</span> <span class="p">(</span>
4031 +<a id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_url&quot;</span><span class="p">),</span>
4032 +<a id="__codelineno-0-29" name="__codelineno-0-29"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_username&quot;</span><span class="p">),</span>
4033 +<a id="__codelineno-0-30" name="__codelineno-0-30"></a> <span class="n">connection_details</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;connector_password&quot;</span><span class="p">),</span>
4034 +<a id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="p">)</span>
4035 +<a id="__codelineno-0-32" name="__codelineno-0-32"></a> <span class="k">else</span><span class="p">:</span>
4036 +<a id="__codelineno-0-33" name="__codelineno-0-33"></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>
4037 </code></pre></div></td></tr></table></div>
4038 </details>
4039 </div>
backend/site/sitemap.xml.gz
Binary files a/backend/site/sitemap.xml.gz and b/backend/site/sitemap.xml.gz differ