use async_trait::async_trait;

use crate::{
    inventory::Inventory,
    topology::{
        PreparationError, PreparationOutcome,
        oberservability::monitoring::{AlertReceiver, AlertSender},
    },
};

#[async_trait]
pub trait PrometheusApplicationMonitoring<S: AlertSender> {
    async fn install_prometheus(
        &self,
        sender: &S,
        inventory: &Inventory,
        receivers: Option<Vec<Box<dyn AlertReceiver<S>>>>,
    ) -> Result<PreparationOutcome, PreparationError>;
}
