All checks were successful
Run Check Script / check (pull_request) Successful in 1m25s
81 lines
2.6 KiB
Rust
81 lines
2.6 KiB
Rust
use std::net::IpAddr;
|
|
|
|
use async_trait::async_trait;
|
|
use kube::api::ObjectMeta;
|
|
use serde::Serialize;
|
|
|
|
use crate::{
|
|
interpret::{InterpretError, Outcome},
|
|
modules::monitoring::kube_prometheus::crd::{
|
|
crd_alertmanager_config::CRDPrometheus,
|
|
crd_scrape_config::{Params, RelabelConfig, ScrapeConfig, ScrapeConfigSpec, StaticConfig},
|
|
},
|
|
topology::oberservability::monitoring::ScrapeTarget,
|
|
};
|
|
|
|
#[derive(Debug, Clone, Serialize)]
|
|
pub struct Server {
|
|
pub name: String,
|
|
pub ip: IpAddr,
|
|
pub auth: String,
|
|
pub module: String,
|
|
pub domain: String,
|
|
}
|
|
|
|
#[async_trait]
|
|
impl ScrapeTarget<CRDPrometheus> for Server {
|
|
async fn install(&self, sender: &CRDPrometheus) -> Result<Outcome, InterpretError> {
|
|
let scrape_config_spec = ScrapeConfigSpec {
|
|
static_configs: Some(vec![StaticConfig {
|
|
targets: vec![self.ip.to_string()],
|
|
labels: None,
|
|
}]),
|
|
scrape_interval: Some("2m".to_string()),
|
|
kubernetes_sd_configs: None,
|
|
http_sd_configs: None,
|
|
file_sd_configs: None,
|
|
dns_sd_configs: None,
|
|
params: Some(Params {
|
|
auth: Some(vec![self.auth.clone()]),
|
|
module: Some(vec![self.module.clone()]),
|
|
}),
|
|
consul_sd_configs: None,
|
|
relabel_configs: Some(vec![RelabelConfig {
|
|
action: None,
|
|
source_labels: Some(vec!["__address__".to_string()]),
|
|
separator: None,
|
|
target_label: Some("__param_target".to_string()),
|
|
regex: None,
|
|
replacement: Some(format!("snmp.{}:31080", self.domain.clone())),
|
|
modulus: None,
|
|
}]),
|
|
metric_relabel_configs: None,
|
|
metrics_path: Some("/snmp".to_string()),
|
|
scrape_timeout: Some("2m".to_string()),
|
|
job_name: Some(format!("snmp_exporter/cloud/{}", self.name.clone())),
|
|
scheme: None,
|
|
};
|
|
|
|
let scrape_config = ScrapeConfig {
|
|
metadata: ObjectMeta {
|
|
name: Some(self.name.clone()),
|
|
namespace: Some(sender.namespace.clone()),
|
|
..Default::default()
|
|
},
|
|
spec: scrape_config_spec,
|
|
};
|
|
sender
|
|
.client
|
|
.apply(&scrape_config, Some(&sender.namespace.clone()))
|
|
.await?;
|
|
Ok(Outcome::success(format!(
|
|
"installed scrape target {}",
|
|
self.name.clone()
|
|
)))
|
|
}
|
|
|
|
fn clone_box(&self) -> Box<dyn ScrapeTarget<CRDPrometheus>> {
|
|
Box::new(self.clone())
|
|
}
|
|
}
|