@@ -707,6 +707,13 @@ static int flush_to_otel(struct opentelemetry_context *ctx,
707707 Opentelemetry__Proto__Logs__V1__ResourceLogs resource_log ;
708708 Opentelemetry__Proto__Logs__V1__ResourceLogs * resource_logs [1 ];
709709 Opentelemetry__Proto__Logs__V1__ScopeLogs * scope_logs [1 ];
710+ Opentelemetry__Proto__Common__V1__KeyValue * * attributes_list ;
711+ Opentelemetry__Proto__Common__V1__KeyValue * attributes ;
712+ size_t kv_size ;
713+ size_t kv_index ;
714+ struct mk_list * kv_head ;
715+ struct flb_kv * kv ;
716+
710717 void * body ;
711718 unsigned len ;
712719 int res ;
@@ -723,6 +730,37 @@ static int flush_to_otel(struct opentelemetry_context *ctx,
723730 resource_log .n_scope_logs = 1 ;
724731 resource_logs [0 ] = & resource_log ;
725732
733+ kv_size = mk_list_size (& (ctx -> kv_labels ));
734+ attributes_list = flb_calloc (kv_size , sizeof (Opentelemetry__Proto__Common__V1__KeyValue * ));
735+ if (attributes_list == NULL ) {
736+ flb_errno ();
737+ return -1 ;
738+ }
739+ attributes = flb_calloc (kv_size , sizeof (Opentelemetry__Proto__Common__V1__KeyValue ));
740+ if (attributes == NULL ) {
741+ flb_errno ();
742+ return -1 ;
743+ }
744+ for (int index = 0 ; index < kv_size ; index ++ ) {
745+ attributes_list [index ] = & attributes [index ];
746+ }
747+
748+
749+ kv_index = 0 ;
750+ mk_list_foreach (kv_head , & ctx -> kv_labels ) {
751+ kv = mk_list_entry (kv_head , struct flb_kv , _head );
752+ opentelemetry__proto__common__v1__key_value__init (& attributes [kv_index ]);
753+ attributes [kv_index ].key = kv -> key ;
754+ attributes [kv_index ].value = otlp_any_value_initialize (MSGPACK_OBJECT_STR , 0 );
755+ attributes [kv_index ].value -> string_value = kv -> val ;
756+ kv_index ++ ;
757+ }
758+
759+ resource_log .resource = flb_calloc (1 , sizeof (Opentelemetry__Proto__Resource__V1__Resource ));
760+ opentelemetry__proto__resource__v1__resource__init (resource_log .resource );
761+ resource_log .resource -> n_attributes = kv_size ;
762+ resource_log .resource -> attributes = attributes_list ;
763+
726764 export_logs .resource_logs = resource_logs ;
727765 export_logs .n_resource_logs = 1 ;
728766
@@ -742,6 +780,12 @@ static int flush_to_otel(struct opentelemetry_context *ctx,
742780 ctx -> logs_uri );
743781
744782 flb_free (body );
783+ flb_free (resource_log .resource );
784+ for (int index = 0 ; index < kv_size ; index ++ ) {
785+ flb_free (attributes [index ].value );
786+ }
787+ flb_free (attributes );
788+ flb_free (attributes_list );
745789
746790 return res ;
747791}
0 commit comments