diff --git a/source/extensions/stat_sinks/metrics_service/config.cc b/source/extensions/stat_sinks/metrics_service/config.cc index a711335b01f75..ad34c75e63056 100644 --- a/source/extensions/stat_sinks/metrics_service/config.cc +++ b/source/extensions/stat_sinks/metrics_service/config.cc @@ -38,8 +38,9 @@ MetricsServiceSinkFactory::createStatsSink(const Protobuf::Message& config, return std::make_unique>( - grpc_metrics_streamer, sink_config.emit_tags_as_labels(), - PROTOBUF_GET_WRAPPED_OR_DEFAULT(sink_config, report_counters_as_deltas, false)); + grpc_metrics_streamer, + PROTOBUF_GET_WRAPPED_OR_DEFAULT(sink_config, report_counters_as_deltas, false), + sink_config.emit_tags_as_labels()); } ProtobufTypes::MessagePtr MetricsServiceSinkFactory::createEmptyConfigProto() { diff --git a/test/extensions/stats_sinks/metrics_service/grpc_metrics_service_impl_test.cc b/test/extensions/stats_sinks/metrics_service/grpc_metrics_service_impl_test.cc index 769983b8e1437..dd83b5d695b6d 100644 --- a/test/extensions/stats_sinks/metrics_service/grpc_metrics_service_impl_test.cc +++ b/test/extensions/stats_sinks/metrics_service/grpc_metrics_service_impl_test.cc @@ -9,6 +9,8 @@ #include "test/mocks/thread_local/mocks.h" #include "test/test_common/simulated_time_system.h" +#include "io/prometheus/client/metrics.pb.h" + using namespace std::chrono_literals; using testing::_; using testing::InSequence; @@ -186,17 +188,43 @@ TEST_F(MetricsServiceSinkTest, ReportCountersValues) { // Test that verifies counters are reported as the delta between flushes when configured to do so. TEST_F(MetricsServiceSinkTest, ReportCountersAsDeltas) { - MetricsServiceSink - sink(streamer_, true, false); - addCounterToSnapshot("test_counter", 1, 100); + counter_storage_.back()->setTagExtractedName("tag-counter-name"); + counter_storage_.back()->setTags({{"a", "b"}}); - EXPECT_CALL(*streamer_, send(_)).WillOnce(Invoke([](MetricsPtr&& metrics) { - EXPECT_EQ(1, metrics->size()); - EXPECT_EQ(1, (*metrics)[0].metric(0).counter().value()); - })); - sink.flush(snapshot_); + { + // This test won't emit any labels. + MetricsServiceSink + sink(streamer_, true, false); + + EXPECT_CALL(*streamer_, send(_)).WillOnce(Invoke([](MetricsPtr&& metrics) { + ASSERT_EQ(1, metrics->size()); + EXPECT_EQ("test_counter", (*metrics)[0].name()); + + const auto& metric = (*metrics)[0].metric(0); + EXPECT_EQ(1, metric.counter().value()); + EXPECT_EQ(0, metric.label().size()); + })); + sink.flush(snapshot_); + } + + { + // This test will emit labels. + MetricsServiceSink + sink(streamer_, true, true); + + EXPECT_CALL(*streamer_, send(_)).WillOnce(Invoke([](MetricsPtr&& metrics) { + ASSERT_EQ(1, metrics->size()); + EXPECT_EQ("tag-counter-name", (*metrics)[0].name()); + + const auto& metric = (*metrics)[0].metric(0); + EXPECT_EQ(1, metric.counter().value()); + EXPECT_EQ(1, metric.label().size()); + })); + sink.flush(snapshot_); + } } // Test the behavior of tag emission based on the emit_tags_as_label flag. @@ -217,7 +245,7 @@ TEST_F(MetricsServiceSinkTest, ReportMetricsWithTags) { // When the emit_tags flag is false, we don't emit the tags and use the full name. MetricsServiceSink - sink(streamer_, true, false); + sink(streamer_, false, false); EXPECT_CALL(*streamer_, send(_)).WillOnce(Invoke([](MetricsPtr&& metrics) { EXPECT_EQ(4, metrics->size()); @@ -244,7 +272,7 @@ TEST_F(MetricsServiceSinkTest, ReportMetricsWithTags) { // When the emit_tags flag is true, we emit the tags as labels and use the tag extracted name. MetricsServiceSink - sink(streamer_, true, true); + sink(streamer_, false, true); EXPECT_CALL(*streamer_, send(_)).WillOnce(Invoke([&expected_label_pair](MetricsPtr&& metrics) { EXPECT_EQ(4, metrics->size());