metrics_datadog_exporter/
lib.rs1#![warn(missing_docs)]
2
3use metrics::SetRecorderError;
6use std::io;
7use std::sync::Arc;
8use std::time::Duration;
9use thiserror::Error;
10use tokio::task::JoinHandle;
11
12mod builder;
13pub use crate::builder::DataDogBuilder;
14pub mod data;
15pub use crate::data::DataDogMetric;
16pub use crate::data::DataDogMetricType;
17pub use crate::data::DataDogMetricValue;
18pub use metrics;
19pub mod exporter;
20pub use crate::exporter::DataDogExporter;
21mod recorder;
22pub use crate::recorder::DataDogRecorder;
23
24#[derive(Error, Debug)]
26pub enum Error {
27 #[error("Serialization failed: `{0}`")]
29 SerializationError(#[from] serde_json::Error),
30 #[error("API Request Failed: `{0}`")]
32 ApiError(#[from] reqwest::Error),
33 #[error("IO error: `{0}`")]
35 IOError(#[from] io::Error),
36}
37
38pub type Result<T, E = Error> = core::result::Result<T, E>;
40
41pub struct DataDogHandle {
43 pub recorder: DataDogRecorder,
45 pub handle: DataDogExporter,
47}
48
49impl DataDogHandle {
50 pub fn install(self) -> Result<DataDogExporter, SetRecorderError> {
52 metrics::set_boxed_recorder(Box::new(self.recorder))?;
53 Ok(self.handle)
54 }
55
56 pub async fn flush(&self) -> Result<()> {
58 self.handle.flush().await
59 }
60
61 pub fn schedule(self, interval: Duration) -> (Arc<DataDogExporter>, JoinHandle<()>) {
63 self.handle.schedule(interval)
64 }
65}