]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
format_json: Emit only one `ScopeMetrics` per `ResourceMetrics`.
authorFlorian Forster <octo@collectd.org>
Sat, 16 Dec 2023 13:40:11 +0000 (14:40 +0100)
committerFlorian Forster <octo@collectd.org>
Wed, 3 Jan 2024 15:39:36 +0000 (16:39 +0100)
Also fixed the unit test to pass again.

src/utils/format_json/format_json_test.c
src/utils/format_json/open_telemetry.c

index 7130159418369b1cdca8653919e5dcab2c83ab7f..cde4edd4ff03951b208e40ccd1aa1c66f46d40ac 100644 (file)
@@ -310,32 +310,30 @@ DEF_TEST(open_telemetry) {
   CHECK_ZERO(metric_family_append(fams[1], "metric.label", "bar",
                                   (value_t){.counter = 31337}, NULL));
 
+  resource_metrics_set_t set = {0};
+  CHECK_ZERO(resource_metrics_add(&set, fams[0]));
+  CHECK_ZERO(resource_metrics_add(&set, fams[1]));
+
   strbuf_t buf = STRBUF_CREATE;
-  CHECK_ZERO(
-      format_json_open_telemetry(&buf, (metric_family_t const **)fams, 2));
-
-  EXPECT_EQ_STR("{\"resourceMetrics\":[{\"resource\":{\"attributes\":[{\"key\":"
-                "\"service.name\",\"value\":{\"stringValue\":\"unit "
-                "test\"}}]},\"scopeMetrics\":[{\"scope\":{\"name\":"
-                "\"collectd\",\"version\":\"" PACKAGE_VERSION
-                "\"},\"metrics\":[{\"name\":\"unit.tests\",\"description\":"
-                "\"Example gauge "
-                "metric\",\"gauge\":{\"dataPoints\":[{\"attributes\":[{\"key\":"
-                "\"metric.label\",\"value\":{\"stringValue\":\"test "
-                "label\"}}],\"timeUnixNano\":0,\"asDouble\":42.0}]}}]}]},{"
-                "\"resource\":{\"attributes\":[{\"key\":\"service.name\","
-                "\"value\":{\"stringValue\":\"unit "
-                "test\"}}]},\"scopeMetrics\":[{\"scope\":{\"name\":"
-                "\"collectd\",\"version\":\"" PACKAGE_VERSION
-                "\"},\"metrics\":[{\"name\":\"unit.test.count\","
-                "\"description\":\"Example counter "
-                "metric\",\"sum\":{\"dataPoints\":[{\"attributes\":[{\"key\":"
-                "\"metric.label\",\"value\":{\"stringValue\":\"bar\"}}],"
-                "\"timeUnixNano\":0,\"asInt\":31337}],"
-                "\"aggregationTemporality\":\"2\",\"isMonotonic\":true}}]}]}]}",
-                buf.ptr);
+  CHECK_ZERO(format_json_open_telemetry(&buf, &set));
+
+  EXPECT_EQ_STR(
+      "{\"resourceMetrics\":[{\"resource\":{\"attributes\":[{\"key\":\"service."
+      "name\",\"value\":{\"stringValue\":\"unit "
+      "test\"}}]},\"scopeMetrics\":[{\"scope\":{\"name\":\"collectd\","
+      "\"version\":\"5.12.0.383.ge714589+\"},\"metrics\":[{\"name\":\"unit."
+      "test.count\",\"description\":\"Example counter "
+      "metric\",\"sum\":{\"dataPoints\":[{\"attributes\":[{\"key\":\"metric."
+      "label\",\"value\":{\"stringValue\":\"bar\"}}],\"timeUnixNano\":0,"
+      "\"asInt\":31337}],\"aggregationTemporality\":\"2\",\"isMonotonic\":true}"
+      "},{\"name\":\"unit.tests\",\"description\":\"Example gauge "
+      "metric\",\"gauge\":{\"dataPoints\":[{\"attributes\":[{\"key\":\"metric."
+      "label\",\"value\":{\"stringValue\":\"test "
+      "label\"}}],\"timeUnixNano\":0,\"asDouble\":42.0}]}}]}]}]}",
+      buf.ptr);
 
   STRBUF_DESTROY(buf);
+  resource_metrics_reset(&set);
   label_set_reset(&fams[0]->resource);
   label_set_reset(&fams[1]->resource);
   metric_family_metric_reset(fams[0]);
index 1404ae14a340266ef6197f3f90df589dcafca246..099b495c08de2a59e69d1c72f3aac18fe79d8a1c 100644 (file)
@@ -190,7 +190,7 @@ static int instrumentation_scope(yajl_gen g) {
   return 0;
 }
 
-static int scope_metrics(yajl_gen g, metric_family_t const *fam) {
+static int scope_metrics(yajl_gen g, resource_metrics_t const *rm) {
   CHECK(yajl_gen_map_open(g)); /* BEGIN ScopeMetrics */
 
   CHECK(json_add_string(g, "scope"));
@@ -198,7 +198,9 @@ static int scope_metrics(yajl_gen g, metric_family_t const *fam) {
 
   CHECK(json_add_string(g, "metrics"));
   CHECK(yajl_gen_array_open(g));
-  CHECK(metric(g, fam));
+  for (size_t i = 0; i < rm->families_num; i++) {
+    CHECK(metric(g, rm->families[i]));
+  }
   CHECK(yajl_gen_array_close(g));
 
   CHECK(yajl_gen_map_close(g)); /* END ScopeMetrics */
@@ -229,9 +231,7 @@ static int add_resource_metric(yajl_gen g, resource_metrics_t const *rm) {
 
   CHECK(json_add_string(g, "scopeMetrics"));
   CHECK(yajl_gen_array_open(g));
-  for (size_t i = 0; i < rm->families_num; i++) {
-    CHECK(scope_metrics(g, rm->families[i]));
-  }
+  CHECK(scope_metrics(g, rm));
   CHECK(yajl_gen_array_close(g));
 
   CHECK(yajl_gen_map_close(g)); /* END ResourceMetrics */
@@ -254,7 +254,6 @@ int format_json_open_telemetry(strbuf_t *buf,
   yajl_gen_config(g, yajl_gen_validate_utf8, 1);
 #endif
 
-  // TODO
   CHECK(yajl_gen_map_open(g)); /* BEGIN ExportMetricsServiceRequest */
   CHECK(json_add_string(g, "resourceMetrics"));
   CHECK(yajl_gen_array_open(g));