@@ 333-445 (lines=113) @@ | ||
330 | cmd.add_element("copy", agent_id) |
|
331 | return self._send_xml_command(cmd) |
|
332 | ||
333 | def create_alert( |
|
334 | self, |
|
335 | name: str, |
|
336 | condition: AlertCondition, |
|
337 | event: AlertEvent, |
|
338 | method: AlertMethod, |
|
339 | *, |
|
340 | method_data: Optional[dict] = None, |
|
341 | event_data: Optional[dict] = None, |
|
342 | condition_data: Optional[dict] = None, |
|
343 | filter_id: Optional[int] = None, |
|
344 | comment: Optional[str] = None |
|
345 | ) -> Any: |
|
346 | """Create a new alert |
|
347 | ||
348 | Arguments: |
|
349 | name: Name of the new Alert |
|
350 | condition: The condition that must be satisfied for the alert |
|
351 | to occur; if the event is either 'Updated SecInfo arrived' or |
|
352 | 'New SecInfo arrived', condition must be 'Always'. Otherwise, |
|
353 | condition can also be on of 'Severity at least', 'Filter count |
|
354 | changed' or 'Filter count at least'. |
|
355 | event: The event that must happen for the alert to occur, one |
|
356 | of 'Task run status changed', 'Updated SecInfo arrived' or 'New |
|
357 | SecInfo arrived' |
|
358 | method: The method by which the user is alerted, one of 'SCP', |
|
359 | 'Send', 'SMB', 'SNMP', 'Syslog' or 'Email'; if the event is |
|
360 | neither 'Updated SecInfo arrived' nor 'New SecInfo arrived', |
|
361 | method can also be one of 'Start Task', 'HTTP Get', 'Sourcefire |
|
362 | Connector' or 'verinice Connector'. |
|
363 | condition_data: Data that defines the condition |
|
364 | event_data: Data that defines the event |
|
365 | method_data: Data that defines the method |
|
366 | filter_id: Filter to apply when executing alert |
|
367 | comment: Comment for the alert |
|
368 | ||
369 | Returns: |
|
370 | The response. See :py:meth:`send_command` for details. |
|
371 | """ |
|
372 | if not name: |
|
373 | raise RequiredArgument( |
|
374 | function=self.create_alert.__name__, argument='name' |
|
375 | ) |
|
376 | ||
377 | if not condition: |
|
378 | raise RequiredArgument( |
|
379 | function=self.create_alert.__name__, argument='condition' |
|
380 | ) |
|
381 | ||
382 | if not event: |
|
383 | raise RequiredArgument( |
|
384 | function=self.create_alert.__name__, argument='event' |
|
385 | ) |
|
386 | ||
387 | if not method: |
|
388 | raise RequiredArgument( |
|
389 | function=self.create_alert.__name__, argument='method' |
|
390 | ) |
|
391 | ||
392 | if not isinstance(condition, AlertCondition): |
|
393 | raise InvalidArgumentType( |
|
394 | function=self.create_alert.__name__, |
|
395 | argument='condition', |
|
396 | arg_type=AlertCondition.__name__, |
|
397 | ) |
|
398 | ||
399 | if not isinstance(event, AlertEvent): |
|
400 | raise InvalidArgumentType( |
|
401 | function=self.create_alert.__name__, |
|
402 | argument='even', |
|
403 | arg_type=AlertEvent.__name__, |
|
404 | ) |
|
405 | ||
406 | if not isinstance(method, AlertMethod): |
|
407 | raise InvalidArgumentType( |
|
408 | function=self.create_alert.__name__, |
|
409 | argument='method', |
|
410 | arg_type=AlertMethod.__name__, |
|
411 | ) |
|
412 | ||
413 | _check_event(event, condition, method) |
|
414 | ||
415 | cmd = XmlCommand("create_alert") |
|
416 | cmd.add_element("name", name) |
|
417 | ||
418 | conditions = cmd.add_element("condition", condition.value) |
|
419 | ||
420 | if condition_data is not None: |
|
421 | for key, value in condition_data.items(): |
|
422 | _data = conditions.add_element("data", value) |
|
423 | _data.add_element("name", key) |
|
424 | ||
425 | events = cmd.add_element("event", event.value) |
|
426 | ||
427 | if event_data is not None: |
|
428 | for key, value in event_data.items(): |
|
429 | _data = events.add_element("data", value) |
|
430 | _data.add_element("name", key) |
|
431 | ||
432 | methods = cmd.add_element("method", method.value) |
|
433 | ||
434 | if method_data is not None: |
|
435 | for key, value in method_data.items(): |
|
436 | _data = methods.add_element("data", value) |
|
437 | _data.add_element("name", key) |
|
438 | ||
439 | if filter_id: |
|
440 | cmd.add_element("filter", attrs={"id": filter_id}) |
|
441 | ||
442 | if comment: |
|
443 | cmd.add_element("comment", comment) |
|
444 | ||
445 | return self._send_xml_command(cmd) |
|
446 | ||
447 | def clone_alert(self, alert_id: str) -> Any: |
|
448 | """Clone an existing alert |
@@ 156-268 (lines=113) @@ | ||
153 | # Is authenticated on gvmd |
|
154 | self._authenticated = False |
|
155 | ||
156 | def create_alert( |
|
157 | self, |
|
158 | name: str, |
|
159 | condition: AlertCondition, |
|
160 | event: AlertEvent, |
|
161 | method: AlertMethod, |
|
162 | *, |
|
163 | method_data: Optional[dict] = None, |
|
164 | event_data: Optional[dict] = None, |
|
165 | condition_data: Optional[dict] = None, |
|
166 | filter_id: Optional[int] = None, |
|
167 | comment: Optional[str] = None |
|
168 | ) -> Any: |
|
169 | """Create a new alert |
|
170 | ||
171 | Arguments: |
|
172 | name: Name of the new Alert |
|
173 | condition: The condition that must be satisfied for the alert |
|
174 | to occur; if the event is either 'Updated SecInfo arrived' or |
|
175 | 'New SecInfo arrived', condition must be 'Always'. Otherwise, |
|
176 | condition can also be on of 'Severity at least', 'Filter count |
|
177 | changed' or 'Filter count at least'. |
|
178 | event: The event that must happen for the alert to occur, one |
|
179 | of 'Task run status changed', 'Updated SecInfo arrived' or 'New |
|
180 | SecInfo arrived' |
|
181 | method: The method by which the user is alerted, one of 'SCP', |
|
182 | 'Send', 'SMB', 'SNMP', 'Syslog' or 'Email'; if the event is |
|
183 | neither 'Updated SecInfo arrived' nor 'New SecInfo arrived', |
|
184 | method can also be one of 'Start Task', 'HTTP Get', 'Sourcefire |
|
185 | Connector' or 'verinice Connector'. |
|
186 | condition_data: Data that defines the condition |
|
187 | event_data: Data that defines the event |
|
188 | method_data: Data that defines the method |
|
189 | filter_id: Filter to apply when executing alert |
|
190 | comment: Comment for the alert |
|
191 | ||
192 | Returns: |
|
193 | The response. See :py:meth:`send_command` for details. |
|
194 | """ |
|
195 | if not name: |
|
196 | raise RequiredArgument( |
|
197 | function=self.create_alert.__name__, argument='name' |
|
198 | ) |
|
199 | ||
200 | if not condition: |
|
201 | raise RequiredArgument( |
|
202 | function=self.create_alert.__name__, argument='condition' |
|
203 | ) |
|
204 | ||
205 | if not event: |
|
206 | raise RequiredArgument( |
|
207 | function=self.create_alert.__name__, argument='event' |
|
208 | ) |
|
209 | ||
210 | if not method: |
|
211 | raise RequiredArgument( |
|
212 | function=self.create_alert.__name__, argument='method' |
|
213 | ) |
|
214 | ||
215 | if not isinstance(condition, AlertCondition): |
|
216 | raise InvalidArgumentType( |
|
217 | function=self.create_alert.__name__, |
|
218 | argument='condition', |
|
219 | arg_type=AlertCondition.__name__, |
|
220 | ) |
|
221 | ||
222 | if not isinstance(event, AlertEvent): |
|
223 | raise InvalidArgumentType( |
|
224 | function=self.create_alert.__name__, |
|
225 | argument='even', |
|
226 | arg_type=AlertEvent.__name__, |
|
227 | ) |
|
228 | ||
229 | if not isinstance(method, AlertMethod): |
|
230 | raise InvalidArgumentType( |
|
231 | function=self.create_alert.__name__, |
|
232 | argument='method', |
|
233 | arg_type=AlertMethod.__name__, |
|
234 | ) |
|
235 | ||
236 | _check_event(event, condition, method) |
|
237 | ||
238 | cmd = XmlCommand("create_alert") |
|
239 | cmd.add_element("name", name) |
|
240 | ||
241 | conditions = cmd.add_element("condition", condition.value) |
|
242 | ||
243 | if condition_data is not None: |
|
244 | for key, value in condition_data.items(): |
|
245 | _data = conditions.add_element("data", value) |
|
246 | _data.add_element("name", key) |
|
247 | ||
248 | events = cmd.add_element("event", event.value) |
|
249 | ||
250 | if event_data is not None: |
|
251 | for key, value in event_data.items(): |
|
252 | _data = events.add_element("data", value) |
|
253 | _data.add_element("name", key) |
|
254 | ||
255 | methods = cmd.add_element("method", method.value) |
|
256 | ||
257 | if method_data is not None: |
|
258 | for key, value in method_data.items(): |
|
259 | _data = methods.add_element("data", value) |
|
260 | _data.add_element("name", key) |
|
261 | ||
262 | if filter_id: |
|
263 | cmd.add_element("filter", attrs={"id": filter_id}) |
|
264 | ||
265 | if comment: |
|
266 | cmd.add_element("comment", comment) |
|
267 | ||
268 | return self._send_xml_command(cmd) |
|
269 | ||
270 | def create_audit( |
|
271 | self, |