greentic_component/
telemetry.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::manifest::ComponentManifest;
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
8pub struct TelemetrySpec {
9 pub span_prefix: String,
10 #[serde(default)]
11 pub attributes: BTreeMap<String, String>,
12 #[serde(default = "default_emit_node_spans")]
13 pub emit_node_spans: bool,
14}
15
16impl TelemetrySpec {
17 pub fn attribute(&self, key: &str) -> Option<&String> {
18 self.attributes.get(key)
19 }
20}
21
22fn default_emit_node_spans() -> bool {
23 true
24}
25
26pub fn span_name(component: &ComponentManifest, operation: &str) -> String {
27 let prefix = component
28 .telemetry
29 .as_ref()
30 .map(|spec| spec.span_prefix.as_str())
31 .unwrap_or_else(|| component.id.as_str());
32 format!("{prefix}/{operation}")
33}