Skip to main content

elasticctl_api/alerts_ops/
recheck.rs

1use super::*;
2use crate::{Observed, Preconditions};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum AlertFacet {
6    Status,
7    Presence,
8}
9
10pub async fn observe_alerts(
11    t: &Transport,
12    ids: &[String],
13    facet: AlertFacet,
14) -> Result<Preconditions> {
15    super::require_targets(ids)?;
16    let mut unique = Vec::with_capacity(ids.len());
17    for id in ids {
18        if !unique.contains(id) {
19            unique.push(id.clone());
20        }
21    }
22    let page = alerts::search(t, &super::resolve_body(&unique)).await?;
23    Ok(Preconditions(
24        unique
25            .into_iter()
26            .map(|id| {
27                let state = page.hits.iter().find(|hit| hit.id == id).map(|hit| {
28                    super::observed::alert_state(super::workflow_status(&hit.source), facet)
29                });
30                Observed {
31                    object: "alert",
32                    id,
33                    state,
34                }
35            })
36            .collect(),
37    ))
38}