1616 *
1717 */
1818
19+ use std:: collections:: HashSet ;
1920use std:: fmt:: Display ;
2021
2122use serde:: { Deserialize , Serialize } ;
23+ use tracing:: warn;
2224
2325pub mod airplane;
2426pub mod http;
@@ -36,6 +38,8 @@ pub const UPDATE_STREAM_KEY: &str = "x-p-update-stream";
3638pub const STREAM_TYPE_KEY : & str = "x-p-stream-type" ;
3739pub const TELEMETRY_TYPE_KEY : & str = "x-p-telemetry-type" ;
3840pub const DATASET_TAG_KEY : & str = "x-p-dataset-tag" ;
41+ pub const DATASET_TAGS_KEY : & str = "x-p-dataset-tags" ;
42+ pub const DATASET_LABELS_KEY : & str = "x-p-dataset-labels" ;
3943pub const TENANT_ID : & str = "x-p-tenant" ;
4044const COOKIE_AGE_DAYS : usize = 7 ;
4145const SESSION_COOKIE_NAME : & str = "session" ;
@@ -85,24 +89,28 @@ impl Display for TelemetryType {
8589}
8690
8791/// Tag for categorizing datasets/streams by observability domain
88- #[ derive( Debug , Clone , Copy , Serialize , Deserialize , PartialEq , Eq ) ]
92+ #[ derive( Debug , Clone , Copy , Serialize , Deserialize , PartialEq , Eq , Hash ) ]
8993#[ serde( rename_all = "kebab-case" ) ]
9094pub enum DatasetTag {
91- AgentObservability ,
92- K8sObservability ,
95+ AgentMonitoring ,
96+ K8sMonitoring ,
9397 DatabaseObservability ,
98+ ApplicationMonitoring ,
99+ ServiceMap ,
94100}
95101
96102impl TryFrom < & str > for DatasetTag {
97103 type Error = & ' static str ;
98104
99105 fn try_from ( s : & str ) -> Result < Self , Self :: Error > {
100106 match s. to_lowercase ( ) . as_str ( ) {
101- "agent-observability " => Ok ( DatasetTag :: AgentObservability ) ,
102- "k8s-observability " => Ok ( DatasetTag :: K8sObservability ) ,
107+ "agent-monitoring " => Ok ( DatasetTag :: AgentMonitoring ) ,
108+ "k8s-monitoring " => Ok ( DatasetTag :: K8sMonitoring ) ,
103109 "database-observability" => Ok ( DatasetTag :: DatabaseObservability ) ,
110+ "application-monitoring" => Ok ( DatasetTag :: ApplicationMonitoring ) ,
111+ "service-map" => Ok ( DatasetTag :: ServiceMap ) ,
104112 _ => Err (
105- "Invalid dataset tag. Supported values: agent-observability , k8s-observability , database-observability" ,
113+ "Invalid dataset tag. Supported values: agent-monitoring , k8s-monitoring , database-observability, application-monitoring, service-map " ,
106114 ) ,
107115 }
108116 }
@@ -111,9 +119,43 @@ impl TryFrom<&str> for DatasetTag {
111119impl Display for DatasetTag {
112120 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
113121 f. write_str ( match self {
114- DatasetTag :: AgentObservability => "agent-observability " ,
115- DatasetTag :: K8sObservability => "k8s-observability " ,
122+ DatasetTag :: AgentMonitoring => "agent-monitoring " ,
123+ DatasetTag :: K8sMonitoring => "k8s-monitoring " ,
116124 DatasetTag :: DatabaseObservability => "database-observability" ,
125+ DatasetTag :: ApplicationMonitoring => "application-monitoring" ,
126+ DatasetTag :: ServiceMap => "service-map" ,
117127 } )
118128 }
119129}
130+
131+ pub fn parse_dataset_tags ( header_value : & str ) -> Vec < DatasetTag > {
132+ header_value
133+ . split ( ',' )
134+ . filter_map ( |s| {
135+ let trimmed = s. trim ( ) ;
136+ if trimmed. is_empty ( ) {
137+ None
138+ } else {
139+ match DatasetTag :: try_from ( trimmed) {
140+ Ok ( tag) => Some ( tag) ,
141+ Err ( err) => {
142+ warn ! ( "Invalid dataset tag '{trimmed}': {err}" ) ;
143+ None
144+ }
145+ }
146+ }
147+ } )
148+ . collect :: < HashSet < _ > > ( )
149+ . into_iter ( )
150+ . collect ( )
151+ }
152+
153+ pub fn parse_dataset_labels ( header_value : & str ) -> Vec < String > {
154+ header_value
155+ . split ( ',' )
156+ . map ( |s| s. trim ( ) . to_string ( ) )
157+ . filter ( |s| !s. is_empty ( ) )
158+ . collect :: < HashSet < _ > > ( )
159+ . into_iter ( )
160+ . collect ( )
161+ }
0 commit comments