@@ -84,10 +84,10 @@ static int send_response(struct http_conn *conn, int http_status, char *message)
8484}
8585
8686
87- static int process_payload (struct flb_opentelemetry * ctx , struct http_conn * conn ,
88- flb_sds_t tag ,
89- struct mk_http_session * session ,
90- struct mk_http_request * request )
87+ static int process_payload_metrics (struct flb_opentelemetry * ctx , struct http_conn * conn ,
88+ flb_sds_t tag ,
89+ struct mk_http_session * session ,
90+ struct mk_http_request * request )
9191{
9292 struct cmt * decoded_context ;
9393 size_t offset ;
@@ -109,6 +109,30 @@ static int process_payload(struct flb_opentelemetry *ctx, struct http_conn *conn
109109 return 0 ;
110110}
111111
112+ static int process_payload_traces (struct flb_opentelemetry * ctx , struct http_conn * conn ,
113+ flb_sds_t tag ,
114+ struct mk_http_session * session ,
115+ struct mk_http_request * request )
116+ {
117+ msgpack_packer mp_pck ;
118+ msgpack_sbuffer mp_sbuf ;
119+
120+ msgpack_sbuffer_init (& mp_sbuf );
121+ msgpack_packer_init (& mp_pck , & mp_sbuf , msgpack_sbuffer_write );
122+
123+ msgpack_pack_array (& mp_pck , 2 );
124+ flb_pack_time_now (& mp_pck );
125+ msgpack_pack_map (& mp_pck , 1 );
126+ msgpack_pack_str_with_body (& mp_pck , "trace" , 5 );
127+ msgpack_pack_str_with_body (& mp_pck , request -> data .data , request -> data .len );
128+
129+ ctx -> ins -> event_type = FLB_INPUT_LOGS ;
130+
131+ flb_input_chunk_append_raw (ctx -> ins , tag , flb_sds_len (tag ), mp_sbuf .data , mp_sbuf .size );
132+ msgpack_sbuffer_destroy (& mp_sbuf );
133+ return 0 ;
134+ }
135+
112136static inline int mk_http_point_header (mk_ptr_t * h ,
113137 struct mk_http_parser * parser , int key )
114138{
@@ -161,6 +185,12 @@ int opentelemetry_prot_handle(struct flb_opentelemetry *ctx, struct http_conn *c
161185 uri [request -> uri .len ] = '\0' ;
162186 }
163187
188+ if (strcmp (uri , "/metrics" ) != 0 && strcmp (uri , "/traces" ) != 0 ) {
189+ send_response (conn , 400 , "error: invalid endpoint\n" );
190+ mk_mem_free (uri );
191+ return -1 ;
192+ }
193+
164194 /* Try to match a query string so we can remove it */
165195 qs = strchr (uri , '?' );
166196 if (qs ) {
@@ -193,8 +223,6 @@ int opentelemetry_prot_handle(struct flb_opentelemetry *ctx, struct http_conn *c
193223 }
194224 }
195225
196- mk_mem_free (uri );
197-
198226 /* Check if we have a Host header: Hostname ; port */
199227 mk_http_point_header (& request -> host , & session -> parser , MK_HEADER_HOST );
200228
@@ -227,7 +255,13 @@ int opentelemetry_prot_handle(struct flb_opentelemetry *ctx, struct http_conn *c
227255 return -1 ;
228256 }
229257
230- ret = process_payload (ctx , conn , tag , session , request );
258+ if (strcmp (uri , "/metrics" ) == 0 ) {
259+ ret = process_payload_metrics (ctx , conn , tag , session , request );
260+ }
261+ else if (strcmp (uri , "/traces" ) == 0 ) {
262+ ret = process_payload_traces (ctx , conn , tag , session , request );
263+ }
264+ mk_mem_free (uri );
231265 flb_sds_destroy (tag );
232266 send_response (conn , ctx -> successful_response_code , NULL );
233267 return ret ;
@@ -242,4 +276,4 @@ int opentelemetry_prot_handle_error(struct flb_opentelemetry *ctx, struct http_c
242276{
243277 send_response (conn , 400 , "error: invalid request\n" );
244278 return -1 ;
245- }
279+ }
0 commit comments