Skip to content

Commit e9c4e25

Browse files
authored
Set default service.name if missing (#616)
1 parent 07f4a96 commit e9c4e25

File tree

3 files changed

+74
-15
lines changed

3 files changed

+74
-15
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Increment the:
1818
* [EXPORTER] Added Zipkin Exporter. ([#471](https://github.com/open-telemetry/opentelemetry-cpp/pull/471))
1919
* [API] Added Jaeger propagator. ([#599](https://github.com/open-telemetry/opentelemetry-cpp/pull/599))
2020
* [PROPAGATOR] Added Composite Propagator ([#597](https://github.com/open-telemetry/opentelemetry-cpp/pull/597))
21+
* [SDK] Add service.name if missing in Resource ([#616](https://github.com/open-telemetry/opentelemetry-cpp/pull/616))
2122

2223
## [0.2.0] 2021-03-02
2324

sdk/src/resource/resource.cc

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ namespace sdk
99
namespace resource
1010
{
1111

12-
const std::string kTelemetrySdkLanguage = "telemetry.sdk.language";
13-
const std::string kTelemetrySdkName = "telemetry.sdk.name";
14-
const std::string kTelemetrySdkVersion = "telemetry.sdk.version";
12+
const std::string kTelemetrySdkLanguage = "telemetry.sdk.language";
13+
const std::string kTelemetrySdkName = "telemetry.sdk.name";
14+
const std::string kTelemetrySdkVersion = "telemetry.sdk.version";
15+
const std::string kServiceName = "service.name";
16+
const std::string kProcessExecutableName = "process.executable.name";
1517

1618
Resource::Resource(const ResourceAttributes &attributes) noexcept : attributes_(attributes) {}
1719

@@ -25,15 +27,19 @@ Resource Resource::Merge(const Resource &other) noexcept
2527
Resource Resource::Create(const ResourceAttributes &attributes)
2628
{
2729
static auto otel_resource = OTELResourceDetector().Detect();
28-
auto default_resource = Resource::GetDefault();
30+
auto resource = Resource::GetDefault().Merge(otel_resource).Merge(Resource(attributes));
2931

30-
if (attributes.size() > 0)
32+
if (resource.attributes_.find(kServiceName) == resource.attributes_.end())
3133
{
32-
Resource tmp_resource(attributes);
33-
auto merged_resource = tmp_resource.Merge(default_resource);
34-
return merged_resource.Merge(otel_resource);
34+
std::string default_service_name = "unknown_service";
35+
auto it_process_executable_name = resource.attributes_.find(kProcessExecutableName);
36+
if (it_process_executable_name != resource.attributes_.end())
37+
{
38+
default_service_name += ":" + nostd::get<std::string>(it_process_executable_name->second);
39+
}
40+
resource.attributes_[kServiceName] = default_service_name;
3541
}
36-
return default_resource.Merge(otel_resource);
42+
return resource;
3743
}
3844

3945
Resource &Resource::GetEmpty()

sdk/test/resource/resource_test.cc

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class TestResource : public opentelemetry::sdk::resource::Resource
1919
{}
2020
};
2121

22-
TEST(ResourceTest, create)
22+
TEST(ResourceTest, create_without_servicename)
2323
{
2424

2525
opentelemetry::sdk::resource::ResourceAttributes expected_attributes = {
@@ -28,15 +28,46 @@ TEST(ResourceTest, create)
2828
{"cost", 234.23},
2929
{"telemetry.sdk.language", "cpp"},
3030
{"telemetry.sdk.name", "opentelemetry"},
31-
{"telemetry.sdk.version", OPENTELEMETRY_SDK_VERSION}};
31+
{"telemetry.sdk.version", OPENTELEMETRY_SDK_VERSION},
32+
{"service.name", "unknown_service"}};
3233

3334
opentelemetry::sdk::resource::ResourceAttributes attributes = {
3435
{"service", "backend"}, {"version", (uint32_t)1}, {"cost", 234.23}};
35-
auto resource2 = opentelemetry::sdk::resource::Resource::Create(attributes);
36-
auto received_attributes2 = resource2.GetAttributes();
37-
for (auto &e : received_attributes2)
36+
auto resource = opentelemetry::sdk::resource::Resource::Create(attributes);
37+
auto received_attributes = resource.GetAttributes();
38+
for (auto &e : received_attributes)
3839
{
40+
EXPECT_TRUE(expected_attributes.find(e.first) != expected_attributes.end());
41+
if (expected_attributes.find(e.first) != expected_attributes.end())
42+
if (e.first == "version")
43+
EXPECT_EQ(opentelemetry::nostd::get<uint32_t>(expected_attributes.find(e.first)->second),
44+
opentelemetry::nostd::get<uint32_t>(e.second));
45+
else if (e.first == "cost")
46+
EXPECT_EQ(opentelemetry::nostd::get<double>(expected_attributes.find(e.first)->second),
47+
opentelemetry::nostd::get<double>(e.second));
48+
else
49+
EXPECT_EQ(opentelemetry::nostd::get<std::string>(expected_attributes.find(e.first)->second),
50+
opentelemetry::nostd::get<std::string>(e.second));
51+
}
52+
EXPECT_EQ(received_attributes.size(), expected_attributes.size()); // for missing service.name
53+
}
3954

55+
TEST(ResourceTest, create_with_servicename)
56+
{
57+
opentelemetry::sdk::resource::ResourceAttributes expected_attributes = {
58+
{"version", (uint32_t)1},
59+
{"cost", 234.23},
60+
{"telemetry.sdk.language", "cpp"},
61+
{"telemetry.sdk.name", "opentelemetry"},
62+
{"telemetry.sdk.version", OPENTELEMETRY_SDK_VERSION},
63+
{"service.name", "backend"},
64+
};
65+
opentelemetry::sdk::resource::ResourceAttributes attributes = {
66+
{"service.name", "backend"}, {"version", (uint32_t)1}, {"cost", 234.23}};
67+
auto resource = opentelemetry::sdk::resource::Resource::Create(attributes);
68+
auto received_attributes = resource.GetAttributes();
69+
for (auto &e : received_attributes)
70+
{
4071
EXPECT_TRUE(expected_attributes.find(e.first) != expected_attributes.end());
4172
if (expected_attributes.find(e.first) != expected_attributes.end())
4273
if (e.first == "version")
@@ -49,9 +80,29 @@ TEST(ResourceTest, create)
4980
EXPECT_EQ(opentelemetry::nostd::get<std::string>(expected_attributes.find(e.first)->second),
5081
opentelemetry::nostd::get<std::string>(e.second));
5182
}
52-
EXPECT_EQ(received_attributes2.size(), expected_attributes.size());
83+
EXPECT_EQ(received_attributes.size(), expected_attributes.size()); // for missing service.name
5384
}
5485

86+
TEST(ResourceTest, create_with_emptyatrributes)
87+
{
88+
opentelemetry::sdk::resource::ResourceAttributes expected_attributes = {
89+
{"telemetry.sdk.language", "cpp"},
90+
{"telemetry.sdk.name", "opentelemetry"},
91+
{"telemetry.sdk.version", OPENTELEMETRY_SDK_VERSION},
92+
{"service.name", "unknown_service"},
93+
};
94+
opentelemetry::sdk::resource::ResourceAttributes attributes = {};
95+
auto resource = opentelemetry::sdk::resource::Resource::Create(attributes);
96+
auto received_attributes = resource.GetAttributes();
97+
for (auto &e : received_attributes)
98+
{
99+
EXPECT_TRUE(expected_attributes.find(e.first) != expected_attributes.end());
100+
if (expected_attributes.find(e.first) != expected_attributes.end())
101+
EXPECT_EQ(opentelemetry::nostd::get<std::string>(expected_attributes.find(e.first)->second),
102+
opentelemetry::nostd::get<std::string>(e.second));
103+
}
104+
EXPECT_EQ(received_attributes.size(), expected_attributes.size()); // for missing service.name
105+
}
55106
TEST(ResourceTest, Merge)
56107
{
57108
TestResource resource1(
@@ -72,6 +123,7 @@ TEST(ResourceTest, Merge)
72123
}
73124
EXPECT_EQ(received_attributes.size(), expected_attributes.size());
74125
}
126+
75127
TEST(ResourceTest, MergeEmptyString)
76128
{
77129
TestResource resource1({{"service", "backend"}, {"host", "service-host"}});

0 commit comments

Comments
 (0)