@@ -493,6 +493,34 @@ fn get_gauge_value(log: &LogEvent) -> Result<MetricValue, TransformError> {
493
493
} )
494
494
}
495
495
496
+ fn get_set_value ( log : & LogEvent ) -> Result < MetricValue , TransformError > {
497
+ let set_values = log
498
+ . get ( event_path ! ( "set" , "values" ) )
499
+ . ok_or_else ( || TransformError :: PathNotFound {
500
+ path : "set.values" . to_string ( ) ,
501
+ } ) ?
502
+ . as_array ( )
503
+ . ok_or_else ( || TransformError :: ParseError {
504
+ path : "set.values" . to_string ( ) ,
505
+ kind : TransformParseErrorKind :: ArrayError ,
506
+ } ) ?;
507
+
508
+ let mut values: Vec < String > = Vec :: new ( ) ;
509
+ for e_value in set_values {
510
+ let value = e_value
511
+ . as_bytes ( )
512
+ . ok_or_else ( || TransformError :: ParseError {
513
+ path : "set.values" . to_string ( ) ,
514
+ kind : TransformParseErrorKind :: ArrayError ,
515
+ } ) ?;
516
+ values. push ( String :: from_utf8_lossy ( value) . to_string ( ) ) ;
517
+ }
518
+
519
+ Ok ( MetricValue :: Set {
520
+ values : values. into_iter ( ) . collect ( ) ,
521
+ } )
522
+ }
523
+
496
524
fn get_distribution_value ( log : & LogEvent ) -> Result < MetricValue , TransformError > {
497
525
let event_samples = log
498
526
. get ( event_path ! ( "distribution" , "samples" ) )
@@ -755,6 +783,7 @@ fn to_metrics(event: &Event) -> Result<Metric, TransformError> {
755
783
"histogram" => Some ( get_histogram_value ( log) ?) ,
756
784
"summary" => Some ( get_summary_value ( log) ?) ,
757
785
"counter" => Some ( get_counter_value ( log) ?) ,
786
+ "set" => Some ( get_set_value ( log) ?) ,
758
787
_ => None ,
759
788
} ;
760
789
@@ -1933,4 +1962,45 @@ mod tests {
1933
1962
. with_timestamp( Some ( ts( ) ) )
1934
1963
) ;
1935
1964
}
1965
+
1966
+ #[ tokio:: test]
1967
+ async fn transform_set ( ) {
1968
+ let config = parse_yaml_config (
1969
+ r#"
1970
+ metrics: []
1971
+ all_metrics: true
1972
+ "# ,
1973
+ ) ;
1974
+
1975
+ let json_str = r#"{
1976
+ "set": {
1977
+ "values": ["990.0", "1234"]
1978
+ },
1979
+ "kind": "incremental",
1980
+ "name": "test.transform.set",
1981
+ "tags": {
1982
+ "env": "test_env",
1983
+ "host": "localhost"
1984
+ }
1985
+ }"# ;
1986
+ let log = create_log_event ( json_str) ;
1987
+ let metric = do_transform ( config, log. clone ( ) ) . await . unwrap ( ) ;
1988
+ assert_eq ! (
1989
+ * metric. as_metric( ) ,
1990
+ Metric :: new_with_metadata(
1991
+ "test.transform.set" ,
1992
+ MetricKind :: Incremental ,
1993
+ MetricValue :: Set {
1994
+ values: vec![ "990.0" . into( ) , "1234" . into( ) ] . into_iter( ) . collect( )
1995
+ } ,
1996
+ metric. metadata( ) . clone( ) ,
1997
+ )
1998
+ . with_namespace( Some ( "test_namespace" ) )
1999
+ . with_tags( Some ( metric_tags!(
2000
+ "env" => "test_env" ,
2001
+ "host" => "localhost" ,
2002
+ ) ) )
2003
+ . with_timestamp( Some ( ts( ) ) )
2004
+ ) ;
2005
+ }
1936
2006
}
0 commit comments