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" ;
3943const COOKIE_AGE_DAYS : usize = 7 ;
4044const SESSION_COOKIE_NAME : & str = "session" ;
4145const USER_COOKIE_NAME : & str = "username" ;
@@ -84,24 +88,28 @@ impl Display for TelemetryType {
8488}
8589
8690/// Tag for categorizing datasets/streams by observability domain
87- #[ derive( Debug , Clone , Copy , Serialize , Deserialize , PartialEq , Eq ) ]
91+ #[ derive( Debug , Clone , Copy , Serialize , Deserialize , PartialEq , Eq , Hash ) ]
8892#[ serde( rename_all = "kebab-case" ) ]
8993pub enum DatasetTag {
90- AgentObservability ,
91- K8sObservability ,
94+ AgentMonitoring ,
95+ K8sMonitoring ,
9296 DatabaseObservability ,
97+ ApplicationMonitoring ,
98+ ServiceMap ,
9399}
94100
95101impl TryFrom < & str > for DatasetTag {
96102 type Error = & ' static str ;
97103
98104 fn try_from ( s : & str ) -> Result < Self , Self :: Error > {
99105 match s. to_lowercase ( ) . as_str ( ) {
100- "agent-observability " => Ok ( DatasetTag :: AgentObservability ) ,
101- "k8s-observability " => Ok ( DatasetTag :: K8sObservability ) ,
106+ "agent-monitoring " => Ok ( DatasetTag :: AgentMonitoring ) ,
107+ "k8s-monitoring " => Ok ( DatasetTag :: K8sMonitoring ) ,
102108 "database-observability" => Ok ( DatasetTag :: DatabaseObservability ) ,
109+ "application-monitoring" => Ok ( DatasetTag :: ApplicationMonitoring ) ,
110+ "service-map" => Ok ( DatasetTag :: ServiceMap ) ,
103111 _ => Err (
104- "Invalid dataset tag. Supported values: agent-observability , k8s-observability , database-observability" ,
112+ "Invalid dataset tag. Supported values: agent-monitoring , k8s-monitoring , database-observability, application-monitoring, service-map " ,
105113 ) ,
106114 }
107115 }
@@ -110,9 +118,43 @@ impl TryFrom<&str> for DatasetTag {
110118impl Display for DatasetTag {
111119 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
112120 f. write_str ( match self {
113- DatasetTag :: AgentObservability => "agent-observability " ,
114- DatasetTag :: K8sObservability => "k8s-observability " ,
121+ DatasetTag :: AgentMonitoring => "agent-monitoring " ,
122+ DatasetTag :: K8sMonitoring => "k8s-monitoring " ,
115123 DatasetTag :: DatabaseObservability => "database-observability" ,
124+ DatasetTag :: ApplicationMonitoring => "application-monitoring" ,
125+ DatasetTag :: ServiceMap => "service-map" ,
116126 } )
117127 }
118128}
129+
130+ pub fn parse_dataset_tags ( header_value : & str ) -> Vec < DatasetTag > {
131+ header_value
132+ . split ( ',' )
133+ . filter_map ( |s| {
134+ let trimmed = s. trim ( ) ;
135+ if trimmed. is_empty ( ) {
136+ None
137+ } else {
138+ match DatasetTag :: try_from ( trimmed) {
139+ Ok ( tag) => Some ( tag) ,
140+ Err ( err) => {
141+ warn ! ( "Invalid dataset tag '{trimmed}': {err}" ) ;
142+ None
143+ }
144+ }
145+ }
146+ } )
147+ . collect :: < HashSet < _ > > ( )
148+ . into_iter ( )
149+ . collect ( )
150+ }
151+
152+ pub fn parse_dataset_labels ( header_value : & str ) -> Vec < String > {
153+ header_value
154+ . split ( ',' )
155+ . map ( |s| s. trim ( ) . to_string ( ) )
156+ . filter ( |s| !s. is_empty ( ) )
157+ . collect :: < HashSet < _ > > ( )
158+ . into_iter ( )
159+ . collect ( )
160+ }
0 commit comments