Skip to content

Commit 02cda51

Browse files
authored
[SDK] enable deriving from ResourceDetector to create a Resource (#3247)
1 parent 465cb4a commit 02cda51

File tree

5 files changed

+40
-3
lines changed

5 files changed

+40
-3
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ Increment the:
3030
* [SDK] Better control of threads executed by opentelemetry-cpp
3131
[#3175](https://github.com/open-telemetry/opentelemetry-cpp/pull/3175)
3232

33+
* [SDK] Enable deriving from ResourceDetector to create a Resource
34+
[#3247](https://github.com/open-telemetry/opentelemetry-cpp/pull/3247)
35+
3336
New features:
3437

3538
* [SDK] Better control of threads executed by opentelemetry-cpp

sdk/include/opentelemetry/sdk/resource/resource.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class Resource
7575
ResourceAttributes attributes_;
7676
std::string schema_url_;
7777

78-
friend class OTELResourceDetector;
78+
friend class ResourceDetector;
7979
};
8080

8181
} // namespace resource

sdk/include/opentelemetry/sdk/resource/resource_detector.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class ResourceDetector
2121
ResourceDetector() = default;
2222
virtual ~ResourceDetector() = default;
2323
virtual Resource Detect() = 0;
24+
25+
protected:
26+
static Resource Create(const ResourceAttributes &attributes,
27+
const std::string &schema_url = std::string{});
2428
};
2529

2630
/**

sdk/src/resource/resource_detector.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ namespace resource
2222
const char *OTEL_RESOURCE_ATTRIBUTES = "OTEL_RESOURCE_ATTRIBUTES";
2323
const char *OTEL_SERVICE_NAME = "OTEL_SERVICE_NAME";
2424

25+
Resource ResourceDetector::Create(const ResourceAttributes &attributes,
26+
const std::string &schema_url)
27+
{
28+
return Resource(attributes, schema_url);
29+
}
30+
2531
Resource OTELResourceDetector::Detect() noexcept
2632
{
2733
std::string attributes_str, service_name;
@@ -33,7 +39,7 @@ Resource OTELResourceDetector::Detect() noexcept
3339

3440
if (!attributes_exists && !service_name_exists)
3541
{
36-
return Resource();
42+
return ResourceDetector::Create({});
3743
}
3844

3945
ResourceAttributes attributes;
@@ -59,7 +65,7 @@ Resource OTELResourceDetector::Detect() noexcept
5965
attributes[semconv::service::kServiceName] = service_name;
6066
}
6167

62-
return Resource(attributes);
68+
return ResourceDetector::Create(attributes);
6369
}
6470

6571
} // namespace resource

sdk/test/resource/resource_test.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@ class TestResource : public Resource
3535
{}
3636
};
3737

38+
class TestResourceDetector : public ResourceDetector
39+
{
40+
public:
41+
TestResourceDetector() = default;
42+
Resource Detect() noexcept override { return Create(attributes, schema_url); }
43+
ResourceAttributes attributes;
44+
std::string schema_url;
45+
};
46+
3847
TEST(ResourceTest, create_without_servicename)
3948
{
4049
ResourceAttributes expected_attributes = {
@@ -266,4 +275,19 @@ TEST(ResourceTest, OtelResourceDetectorEmptyEnv)
266275
}
267276
EXPECT_EQ(received_attributes.size(), expected_attributes.size());
268277
}
278+
269279
#endif
280+
281+
TEST(ResourceTest, DerivedResourceDetector)
282+
{
283+
TestResourceDetector detector;
284+
285+
detector.attributes = {{"key", "value"}};
286+
detector.schema_url = "https://opentelemetry.io/schemas/v3.1.4";
287+
const auto resource = detector.Detect();
288+
const auto received_attributes = resource.GetAttributes();
289+
290+
EXPECT_EQ(received_attributes.size(), 1);
291+
EXPECT_EQ(resource.GetSchemaURL(), detector.schema_url);
292+
EXPECT_TRUE(received_attributes.find("key") != received_attributes.end());
293+
}

0 commit comments

Comments
 (0)