]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
Add support for resource attributes.
authorFlorian Forster <octo@collectd.org>
Wed, 13 Dec 2023 22:18:44 +0000 (23:18 +0100)
committerFlorian Forster <octo@collectd.org>
Wed, 3 Jan 2024 16:16:28 +0000 (17:16 +0100)
src/utils/format_open_telemetry/format_open_telemetry.cc
src/utils/format_open_telemetry/format_open_telemetry.h

index 692d221495868697de142349126ce3bd75db88f2..6144b4efb312536a798b6605e89889361c52ce8b 100644 (file)
@@ -125,40 +125,26 @@ static void set_instrumentation_scope(ScopeMetrics *sm) {
   is->set_version(PACKAGE_VERSION);
 }
 
-static void set_scope_metrics(ResourceMetrics *rm, metric_family_t const **fam,
-                              size_t fam_num) {
+static void add_scope_metrics(ResourceMetrics *rm, metric_family_t const *fam) {
   ScopeMetrics *sm = rm->add_scope_metrics();
 
   set_instrumentation_scope(sm);
-
-  for (size_t i = 0; i < fam_num; i++) {
-    add_metric(sm, fam[i]);
-  }
-}
-
-ResourceMetrics *
-format_open_telemetry_resource_metrics_serialized(metric_family_t const **fam,
-                                                  size_t fam_num) {
-  ResourceMetrics *rm = new ResourceMetrics();
-
-  set_scope_metrics(rm, fam, fam_num);
-  return rm;
+  add_metric(sm, fam);
 }
 
-int format_open_telemetry_resource_metrics_serialized(
-    strbuf_t *sb, metric_family_t const **fam, size_t fam_num) {
-  ResourceMetrics rm;
+static void init_resource_metrics(ResourceMetrics *rm,
+                                  metric_family_t const *fam) {
+  Resource *res = rm->resource();
+  for (size_t i = 0; i < fam->resource.num; i++) {
+    label_pair_t *l = fam->resource.ptr + i;
 
-  set_scope_metrics(&rm, fam, fam_num);
-
-  std::string serialization;
-  bool ok = rm.SerializeToString(&serialization);
-  if (!ok) {
-    return -1;
+    KeyValue *kv = res->add_attributes();
+    kv->set_key(l->name);
+    AnyValue *v = kv->mutable_value();
+    v->set_string_value(l->value);
   }
 
-  strbuf_print(sb, serialization.c_str());
-  return 0;
+  add_scope_metrics(rm, fam);
 }
 
 ExportMetricsServiceRequest *
@@ -166,8 +152,10 @@ format_open_telemetry_export_metrics_service_request(
     metric_family_t const **fam, size_t fam_num) {
   ExportMetricsServiceRequest *req = new ExportMetricsServiceRequest();
 
-  ResourceMetrics *rm = req->add_resource_metrics();
-  set_scope_metrics(rm, fam, fam_num);
+  for (size_t i = 0; i < fam_num; i++) {
+    ResourceMetrics *rm = req->add_resource_metrics();
+    init_resource_metrics(rm, fam[i]);
+  }
 
   return req;
 }
index 611d1aa7ad21efa9f877df18819d1811e9d93397..52b109e939d48e0f9652cc6d8a959afb4a39c49e 100644 (file)
@@ -34,19 +34,12 @@ extern "C" {
 #include "collectd.h"
 #include "metric.h"
 
-int format_open_telemetry_resource_metrics_serialized(
-    strbuf_t *sb, metric_family_t const **fam, size_t fam_num);
-
 #ifdef __cplusplus
 }
 
 #include "opentelemetry/proto/metrics/v1/metrics.pb.h"
 #include "opentelemetry/proto/collector/metrics/v1/metrics_service.pb.h"
 
-opentelemetry::proto::metrics::v1::ResourceMetrics *
-format_open_telemetry_resource_metrics_serialized(metric_family_t const **fam,
-                                                  size_t fam_num);
-
 opentelemetry::proto::collector::metrics::v1::ExportMetricsServiceRequest *
 format_open_telemetry_export_metrics_service_request(
     metric_family_t const **fam, size_t fam_num);