-
Notifications
You must be signed in to change notification settings - Fork 438
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Resource sdk Implementation #502
Changes from 29 commits
a27a5e4
abe8287
083b169
b61acdd
4540bc5
dfe857c
0ae679e
7673007
d5b389f
9fbe8be
208f231
60034d9
04e9de8
bfdd7e1
2abd049
f71a47c
f7e4909
bc3bebc
48a30d4
d8d015a
48ab9ea
f515165
5b01258
e9745f1
84d5405
01fd510
c60fefc
b023c2a
1586018
9158d71
db2412b
35dbf99
5e67443
adbd86d
ef45994
a272b92
8cd247e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
include_directories(${CMAKE_SOURCE_DIR}/exporters/ostream/include) | ||
|
||
add_executable(example_multithreaded main.cc) | ||
target_link_libraries(example_multithreaded ${CMAKE_THREAD_LIBS_INIT} | ||
opentelemetry_trace opentelemetry_exporter_ostream_span) | ||
target_link_libraries( | ||
example_multithreaded ${CMAKE_THREAD_LIBS_INIT} opentelemetry_trace | ||
opentelemetry_resources opentelemetry_exporter_ostream_span) |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,6 +26,7 @@ cc_binary( | |
deps = [ | ||
"//ext:headers", | ||
"//ext/src/zpages", | ||
"//sdk/src/resource", | ||
"//sdk/src/trace", | ||
], | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
#pragma once | ||
|
||
#include "opentelemetry/sdk/common/attribute_utils.h" | ||
#include "opentelemetry/sdk/resource/resource_detector.h" | ||
#include "opentelemetry/sdk/version/version.h" | ||
#include "opentelemetry/version.h" | ||
|
||
#include <memory> | ||
#include <sstream> | ||
#include <unordered_map> | ||
|
||
OPENTELEMETRY_BEGIN_NAMESPACE | ||
namespace sdk | ||
{ | ||
namespace resource | ||
{ | ||
|
||
using ResourceAttributes = | ||
std::unordered_map<std::string, opentelemetry::sdk::common::OwnedAttributeValue>; | ||
|
||
class Resource | ||
{ | ||
public: | ||
const ResourceAttributes &GetAttributes() const noexcept; | ||
|
||
/** | ||
* Returns a new, merged {@link Resource} by merging the current Resource | ||
* with the other Resource. In case of a collision, current Resource takes | ||
* precedence. | ||
* | ||
* @param other the Resource that will be merged with this. | ||
* @returns the newly merged Resource. | ||
*/ | ||
|
||
Resource Merge(const Resource &other) noexcept; | ||
|
||
/** | ||
* Returns a newly created Resource with the specified attributes. | ||
* It adds (merge) SDK attributes and OTEL attributes before returning. | ||
* @param attributes for this resource | ||
* @returns the newly created Resource. | ||
*/ | ||
|
||
static Resource Create(const ResourceAttributes &attributes); | ||
|
||
/** | ||
* Returns an Empty resource. | ||
*/ | ||
|
||
static Resource &GetEmpty(); | ||
|
||
/** | ||
* Returns a Resource that indentifies the SDK in use. | ||
*/ | ||
|
||
static Resource &GetDefault(); | ||
|
||
protected: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
/** | ||
* The constructor is private and only for use internally by the class and | ||
* inside ResourceDetector class. | ||
* Users should use the Create factory method to obtain a Resource | ||
* instance. | ||
*/ | ||
Resource(const ResourceAttributes &attributes = ResourceAttributes()) noexcept; | ||
|
||
private: | ||
ResourceAttributes attributes_; | ||
|
||
friend class OTELResourceDetector; | ||
}; | ||
|
||
} // namespace resource | ||
} // namespace sdk | ||
OPENTELEMETRY_END_NAMESPACE |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#pragma once | ||
|
||
#include "opentelemetry/nostd/unique_ptr.h" | ||
#include "opentelemetry/version.h" | ||
|
||
OPENTELEMETRY_BEGIN_NAMESPACE | ||
namespace sdk | ||
{ | ||
namespace resource | ||
{ | ||
|
||
class Resource; | ||
|
||
/** | ||
* Interface for a Resource Detector | ||
*/ | ||
class ResourceDetector | ||
{ | ||
public: | ||
virtual Resource Detect() = 0; | ||
}; | ||
|
||
/** | ||
* OTelResourceDetector to detect the presence of and create a Resource | ||
* from the OTEL_RESOURCE_ATTRIBUTES environment variable. | ||
*/ | ||
class OTELResourceDetector : public ResourceDetector | ||
{ | ||
public: | ||
Resource Detect() noexcept override; | ||
}; | ||
|
||
} // namespace resource | ||
} // namespace sdk | ||
OPENTELEMETRY_END_NAMESPACE |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
#pragma once | ||
|
||
#include "opentelemetry/sdk/common/atomic_shared_ptr.h" | ||
#include "opentelemetry/sdk/resource/resource.h" | ||
#include "opentelemetry/sdk/trace/processor.h" | ||
#include "opentelemetry/sdk/trace/samplers/always_on.h" | ||
#include "opentelemetry/trace/noop.h" | ||
|
@@ -23,7 +24,9 @@ class Tracer final : public trace_api::Tracer, public std::enable_shared_from_th | |
* nullptr. | ||
*/ | ||
explicit Tracer(std::shared_ptr<SpanProcessor> processor, | ||
std::shared_ptr<Sampler> sampler = std::make_shared<AlwaysOnSampler>()) noexcept; | ||
std::shared_ptr<Sampler> sampler = std::make_shared<AlwaysOnSampler>(), | ||
const opentelemetry::sdk::resource::Resource &resource = | ||
opentelemetry::sdk::resource::Resource::Create({})) noexcept; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this one may leak a nullptr exception from the default value. I.e. the default argument won't be retained. AFAIK it should be ok to not give this argument a default value and require the TracerProvider to pass one into the tracer. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right, default argument for reference can leak. Have removed default now. |
||
|
||
/** | ||
* Set the span processor associated with this tracer. | ||
|
@@ -57,6 +60,7 @@ class Tracer final : public trace_api::Tracer, public std::enable_shared_from_th | |
private: | ||
opentelemetry::sdk::AtomicSharedPtr<SpanProcessor> processor_; | ||
const std::shared_ptr<Sampler> sampler_; | ||
const opentelemetry::sdk::resource::Resource &resource_; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we shouldn't make this a reference, but hold the resource by value. Theoretically, we support using a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fixed. |
||
}; | ||
} // namespace trace | ||
} // namespace sdk | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Copyright 2020, OpenTelemetry Authors | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
package(default_visibility = ["//visibility:public"]) | ||
|
||
cc_library( | ||
name = "resource", | ||
srcs = glob(["**/*.cc"]), | ||
hdrs = glob(["**/*.h"]), | ||
include_prefix = "src/resource", | ||
deps = [ | ||
"//api", | ||
"//sdk:headers", | ||
], | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
add_library(opentelemetry_resources resource.cc resource_detector.cc) | ||
|
||
set_target_properties(opentelemetry_resources PROPERTIES EXPORT_NAME resources) | ||
|
||
target_link_libraries(opentelemetry_resources opentelemetry_common) | ||
|
||
target_include_directories( | ||
opentelemetry_resources | ||
PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/sdk/include>") | ||
|
||
install( | ||
TARGETS opentelemetry_resources | ||
EXPORT "${PROJECT_NAME}-target" | ||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we link this into
opentelemetry_trace
, like we doopentelemetry_common
? Then we wouldn't need to specify it alongsideopentelemetry_trace
everywhere.opentelemetry_trace
has a hard dependency onopentelemetry_resource
anyway.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point, done.