From: Florian Forster Date: Sat, 16 Dec 2023 13:40:11 +0000 (+0100) Subject: format_json: Emit only one `ScopeMetrics` per `ResourceMetrics`. X-Git-Tag: 6.0.0-rc0~18^2~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d8342eaca244ee8b8a3695d8a3ba7e03750591f4;p=thirdparty%2Fcollectd.git format_json: Emit only one `ScopeMetrics` per `ResourceMetrics`. Also fixed the unit test to pass again. --- diff --git a/src/utils/format_json/format_json_test.c b/src/utils/format_json/format_json_test.c index 713015941..cde4edd4f 100644 --- a/src/utils/format_json/format_json_test.c +++ b/src/utils/format_json/format_json_test.c @@ -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]); diff --git a/src/utils/format_json/open_telemetry.c b/src/utils/format_json/open_telemetry.c index 1404ae14a..099b495c0 100644 --- a/src/utils/format_json/open_telemetry.c +++ b/src/utils/format_json/open_telemetry.c @@ -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));