@@ -32,6 +32,8 @@ namespace otel_internal {
3232GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
3333namespace {
3434
35+ namespace sc = opentelemetry::sdk::resource::SemanticConventions;
36+
3537using ::google::cloud::testing_util::IsProtoEqual;
3638using ::google::protobuf::TextFormat;
3739using ::testing::_;
@@ -133,7 +135,6 @@ auto Interval(std::chrono::system_clock::time_point start,
133135}
134136
135137auto TestResource () {
136- namespace sc = opentelemetry::sdk::resource::SemanticConventions;
137138 return opentelemetry::sdk::resource::Resource::Create ({
138139 {sc::kCloudProvider , " gcp" },
139140 {sc::kCloudPlatform , " gcp_compute_engine" },
@@ -247,13 +248,13 @@ TEST(ToMetric, Simple) {
247248 opentelemetry::sdk::metrics::PointAttributes attributes = {
248249 {" key1" , " value1" }, {" _key2" , " value2" }};
249250
250- auto metric = ToMetric (md, attributes, PrefixWithWorkload);
251+ auto metric = ToMetric (md, attributes, {}, PrefixWithWorkload);
251252
252253 EXPECT_EQ (metric.type (), " workload.googleapis.com/test" );
253254 EXPECT_THAT (metric.labels (), UnorderedElementsAre (Pair (" key1" , " value1" ),
254255 Pair (" _key2" , " value2" )));
255256
256- metric = ToMetric (md, {}, [](std::string s) {
257+ metric = ToMetric (md, {}, {}, [](std::string s) {
257258 std::replace (s.begin (), s.end (), ' t' , ' T' );
258259 return " custom.googleapis.com/" + std::move (s);
259260 });
@@ -266,7 +267,7 @@ TEST(ToMetric, BadLabelNames) {
266267 opentelemetry::sdk::metrics::PointAttributes attributes = {
267268 {" 99" , " dropped" }, {" a key-with.bad/characters" , " value" }};
268269
269- auto metric = ToMetric ({}, attributes, PrefixWithWorkload);
270+ auto metric = ToMetric ({}, attributes, {}, PrefixWithWorkload);
270271
271272 EXPECT_THAT (metric.labels (),
272273 UnorderedElementsAre (Pair (" a_key_with_bad_characters" , " value" )));
@@ -276,6 +277,53 @@ TEST(ToMetric, BadLabelNames) {
276277 Contains (AllOf (HasSubstr (" Dropping metric label" ), HasSubstr (" 99" ))));
277278}
278279
280+ TEST (ToMetric, IncludesServiceLabelsFromResource) {
281+ opentelemetry::sdk::metrics::MetricData md;
282+ md.instrument_descriptor .name_ = " test" ;
283+
284+ opentelemetry::sdk::resource::ResourceAttributes resource_attributes = {
285+ {" unused" , " unused" },
286+ {sc::kServiceName , " test-name" },
287+ {sc::kServiceNamespace , " test-namespace" },
288+ {sc::kServiceInstanceId , " test-instance" },
289+ };
290+ auto resource =
291+ opentelemetry::sdk::resource::Resource::Create (resource_attributes);
292+
293+ auto metric = ToMetric (md, {}, &resource, PrefixWithWorkload);
294+ EXPECT_THAT (
295+ metric.labels (),
296+ UnorderedElementsAre (Pair (" service_name" , " test-name" ),
297+ Pair (" service_namespace" , " test-namespace" ),
298+ Pair (" service_instance_id" , " test-instance" )));
299+ }
300+
301+ TEST (ToMetric, PointAttributesOverServiceResourceAttributes) {
302+ opentelemetry::sdk::metrics::MetricData md;
303+ md.instrument_descriptor .name_ = " test" ;
304+
305+ opentelemetry::sdk::metrics::PointAttributes point_attributes = {
306+ {" service_name" , " point-name" },
307+ {" service_namespace" , " point-namespace" },
308+ {" service_instance_id" , " point-instance" },
309+ };
310+
311+ opentelemetry::sdk::resource::ResourceAttributes resource_attributes = {
312+ {sc::kServiceName , " resource-name" },
313+ {sc::kServiceNamespace , " resource-namespace" },
314+ {sc::kServiceInstanceId , " resource-instance" },
315+ };
316+ auto resource =
317+ opentelemetry::sdk::resource::Resource::Create (resource_attributes);
318+
319+ auto metric = ToMetric (md, point_attributes, &resource, PrefixWithWorkload);
320+ EXPECT_THAT (
321+ metric.labels (),
322+ UnorderedElementsAre (Pair (" service_name" , " point-name" ),
323+ Pair (" service_namespace" , " point-namespace" ),
324+ Pair (" service_instance_id" , " point-instance" )));
325+ }
326+
279327TEST (SumPointData, Simple) {
280328 auto const start = std::chrono::system_clock::now ();
281329 auto const end = start + std::chrono::seconds (5 );
@@ -532,6 +580,7 @@ TEST(ToTimeSeries, Sum) {
532580
533581 opentelemetry::sdk::metrics::ResourceMetrics rm;
534582 rm.scope_metric_data_ .push_back (std::move (sm));
583+ rm.resource_ = nullptr ;
535584
536585 auto tss = ToTimeSeries (rm, PrefixWithWorkload);
537586 EXPECT_THAT (tss, ElementsAre (SumTimeSeries (), SumTimeSeries ()));
@@ -556,6 +605,7 @@ TEST(ToTimeSeries, Gauge) {
556605
557606 opentelemetry::sdk::metrics::ResourceMetrics rm;
558607 rm.scope_metric_data_ .push_back (std::move (sm));
608+ rm.resource_ = nullptr ;
559609
560610 auto tss = ToTimeSeries (rm, PrefixWithWorkload);
561611 EXPECT_THAT (tss, ElementsAre (GaugeTimeSeries (), GaugeTimeSeries ()));
@@ -580,6 +630,7 @@ TEST(ToTimeSeries, Histogram) {
580630
581631 opentelemetry::sdk::metrics::ResourceMetrics rm;
582632 rm.scope_metric_data_ .push_back (std::move (sm));
633+ rm.resource_ = nullptr ;
583634
584635 auto tss = ToTimeSeries (rm, PrefixWithWorkload);
585636 EXPECT_THAT (tss, ElementsAre (HistogramTimeSeries (), HistogramTimeSeries ()));
@@ -604,6 +655,7 @@ TEST(ToTimeSeries, DropIgnored) {
604655
605656 opentelemetry::sdk::metrics::ResourceMetrics rm;
606657 rm.scope_metric_data_ .push_back (std::move (sm));
658+ rm.resource_ = nullptr ;
607659
608660 auto tss = ToTimeSeries (rm, PrefixWithWorkload);
609661 EXPECT_THAT (tss, IsEmpty ());
@@ -634,6 +686,7 @@ TEST(ToTimeSeries, Combined) {
634686
635687 opentelemetry::sdk::metrics::ResourceMetrics rm;
636688 rm.scope_metric_data_ .push_back (std::move (sm));
689+ rm.resource_ = nullptr ;
637690
638691 auto tss = ToTimeSeries (
639692 rm, [](std::string const & s) { return " custom.googleapis.com/" + s; });
0 commit comments