aboutsummaryrefslogtreecommitdiffstats
path: root/lib/warden-stack/src/tracing/loki.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/warden-stack/src/tracing/loki.rs')
-rw-r--r--lib/warden-stack/src/tracing/loki.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/warden-stack/src/tracing/loki.rs b/lib/warden-stack/src/tracing/loki.rs
new file mode 100644
index 0000000..cbf4e40
--- /dev/null
+++ b/lib/warden-stack/src/tracing/loki.rs
@@ -0,0 +1,29 @@
+use crate::Monitoring;
+
+use super::TracingBuilder;
+use super::tracing_builder::{IsUnset, SetLokiTask, State};
+use tracing_subscriber::Layer;
+
+impl<S: State> TracingBuilder<S> {
+ pub fn loki(
+ mut self,
+ config: &crate::AppConfig,
+ monitoring: &Monitoring,
+ ) -> Result<TracingBuilder<SetLokiTask<S>>, crate::ServiceError>
+ where
+ S::LokiTask: IsUnset,
+ {
+ use std::str::FromStr;
+ let url = FromStr::from_str(&monitoring.loki_endpoint.as_ref())
+ .map_err(|_e| crate::ServiceError::Unknown)?;
+
+ let (layer, task) = tracing_loki::builder()
+ .label("service_name", config.name.as_ref())?
+ .extra_field("pid", format!("{}", std::process::id()))?
+ .build_url(url)?;
+
+ self.layers.push(layer.boxed());
+
+ Ok(self.loki_internal(task))
+ }
+}