logdash 1.0.3

Logdash.io simple client
Documentation
use crate::metric::MetricOperation;

use super::{
    MessageType, PropagatorConfig,
    worker::{Worker, WorkerJob},
};
use std::sync::mpsc::Receiver;
pub struct HttpPropagator {
    _priv: (),
}

pub fn http(cfg: PropagatorConfig) -> Worker<HttpPropagator> {
    Worker::<HttpPropagator>::new(cfg)
}

impl WorkerJob for HttpPropagator {
    fn job(cfg: PropagatorConfig, rx: Receiver<MessageType>) {
        let log_url = format!("{}/logs", cfg.api_url);
        let metric_url = format!("{}/metrics", cfg.api_url);
        let api_key = cfg.api_key.unwrap();
        loop {
            match rx.recv() {
                Ok(msg) => match msg {
                    MessageType::Log(log) => {
                        ureq::post(&log_url)
                            .header("project-api-key", &api_key)
                            .send_json(&log)
                            .unwrap();
                        if cfg.verbose {
                            println!("Log send: {} {}", log.level, log.message);
                        }
                    }
                    MessageType::Metric(metric) => {
                        ureq::put(&metric_url)
                            .header("project-api-key", &api_key)
                            .send_json(&metric)
                            .unwrap();
                        if cfg.verbose {
                            match metric.operation.clone() {
                                MetricOperation::Set => {
                                    println!("Metric set: {} = {}", metric.name, metric.value);
                                }

                                MetricOperation::Change => {
                                    println!("Metric changed: {} = {}", metric.name, metric.value);
                                }
                            }
                        }
                    }
                },
                Err(e) => {
                    eprintln!("Error receiving message: {}", e);
                    break;
                }
            }
        }
    }
}