@@ -6,6 +6,7 @@ use serde::ser::SerializeSeq;
66use serde:: { Serialize , Serializer as _} ;
77use serde_json:: Serializer ;
88use std:: cell:: Cell ;
9+ use std:: collections:: HashMap ;
910use std:: io:: Write ;
1011use std:: rc:: Rc ;
1112
@@ -43,6 +44,22 @@ impl Encoder for LogEncoder {
4344 fn encode < W : Write > ( & self , families : & [ MetricFamily ] , dest : & mut W ) -> prometheus:: Result < ( ) > {
4445 let events = families_to_json_events ( families) ;
4546
47+ let metrics = events
48+ . iter ( )
49+ . map ( |event| {
50+ let value = MapMetric {
51+ data : event. metric . data . clone ( ) ,
52+ tags : event. metric . tags . clone ( ) ,
53+ } ;
54+ ( event. metric . name , value)
55+ } )
56+ . collect :: < HashMap < _ , _ > > ( ) ;
57+
58+ match serde_json:: to_string ( & metrics) {
59+ Ok ( json) => info ! ( target: "metrics" , "{{\" metrics\" :{json}}}" ) ,
60+ Err ( error) => warn ! ( target: "metrics" , "Failed to serialize metrics: {error}" ) ,
61+ }
62+
4663 let chunks = serialize_and_split_list ( events. iter ( ) , CHUNKS_MAX_SIZE_BYTES )
4764 . map_err ( |e| Error :: Msg ( e. to_string ( ) ) ) ?;
4865
@@ -180,6 +197,13 @@ impl Write for TrackedWriter {
180197 }
181198}
182199
200+ #[ derive( Serialize , Debug , PartialEq ) ]
201+ struct MapMetric < ' a > {
202+ #[ serde( flatten) ]
203+ data : VectorMetricData ,
204+ tags : IndexMap < & ' a str , & ' a str > ,
205+ }
206+
183207#[ derive( Serialize , Debug , PartialEq ) ]
184208struct VectorEvent < ' a > {
185209 metric : VectorMetric < ' a > ,
@@ -194,7 +218,7 @@ struct VectorMetric<'a> {
194218 tags : IndexMap < & ' a str , & ' a str > ,
195219}
196220
197- #[ derive( Serialize , Debug , PartialEq ) ]
221+ #[ derive( Serialize , Clone , Debug , PartialEq ) ]
198222#[ serde( rename_all = "snake_case" ) ]
199223enum VectorMetricData {
200224 AggregatedHistogram {
0 commit comments