diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17465af27d..8ac8999459 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,43 @@ jobs: sudo -E ./ci/setup_thrift.sh ./ci/do_ci.sh cmake.test + # + # This build uses the latest libraries compatible + # with C++11 + # + cmake_gcc_maintainer_cpp11_async_test: + name: CMake gcc 12 (maintainer mode, C++11, async) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: 'recursive' + - name: setup + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + GOOGLETEST_VERSION: 1.12.1 + PROTOBUF_VERSION: 21.12 + run: | + sudo -E ./ci/setup_cmake.sh + sudo -E ./ci/setup_ci_environment.sh + sudo -E ./ci/install_protobuf.sh + - name: run cmake gcc (maintainer mode, C++11, async) + env: + CC: /usr/bin/gcc-12 + CXX: /usr/bin/g++-12 + run: | + ./ci/do_ci.sh cmake.maintainer.cpp11.async.test + - name: generate test cert + env: + CFSSL_VERSION: 1.6.3 + run: | + sudo -E ./tools/setup-cfssl.sh + (cd ./functional/cert; ./generate_cert.sh) + - name: run func test + run: | + (cd ./functional/otlp; ./run_test.sh) + cmake_gcc_maintainer_sync_test: name: CMake gcc 12 (maintainer mode, sync) runs-on: ubuntu-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 08bca2362e..3330790d2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,14 +15,81 @@ Increment the: ## [Unreleased] +* [API] Remove include_trace_context + [#2194](https://github.com/open-telemetry/opentelemetry-cpp/pull/2194) + +## [1.9.1] 2023-05-26 + +* [DEPRECATION] Drop C++11 support + [#2146](https://github.com/open-telemetry/opentelemetry-cpp/pull/2146) + +* [CI] Upgrade Bazel and Bazelisk version + [#2118](https://github.com/open-telemetry/opentelemetry-cpp/pull/2118) +* [CI] Upgrade Google Benchmark version from 1.6.0 to 1.7.1 + [#2116](https://github.com/open-telemetry/opentelemetry-cpp/pull/2116) +* [CI] Upgrade Nlohmann JSON library version from 3.10.5 to 3.11.2 + [#2115](https://github.com/open-telemetry/opentelemetry-cpp/pull/2115) + +* [BUILD] Missed include + [#2143](https://github.com/open-telemetry/opentelemetry-cpp/pull/2143) +* [BUILD] Add opentelemetry_proto_grpc and allow build shared + opentelemetry_proto and opentelemetry_proto_grpc on non-Windows platform. + [#2097](https://github.com/open-telemetry/opentelemetry-cpp/pull/2097) +* [BUILD] Warning cleanup, single character wrapped by std::string + [#2137](https://github.com/open-telemetry/opentelemetry-cpp/pull/2137) +* [BUILD] Add missing target dependencies + [#2128](https://github.com/open-telemetry/opentelemetry-cpp/pull/2128) +* [BUILD] Fix if JSON library already added another CMake target + [#2126](https://github.com/open-telemetry/opentelemetry-cpp/pull/2126) +* [BUILD] shared libraries with version suffix, along with the symbolic link + [#2109](https://github.com/open-telemetry/opentelemetry-cpp/pull/2109) +* [BUILD] Show warning message if WITH_OTLP is enabled + [#2112](https://github.com/open-telemetry/opentelemetry-cpp/pull/2112) +* [BUILD] Add missing STL header. + [#2107](https://github.com/open-telemetry/opentelemetry-cpp/pull/2107) * [BUILD] Build break with old curl, macro CURL_VERSION_BITS unknown [#2102](https://github.com/open-telemetry/opentelemetry-cpp/pull/2102) +* [BUILD] Transitive dependency issue with the otlp http exporter + [#2154](https://github.com/open-telemetry/opentelemetry-cpp/pull/2154) + +* [TEST] Add unit test for log body implicit conversions. + [#2136](https://github.com/open-telemetry/opentelemetry-cpp/pull/2136) +* [TEST] Add event id to logger benchmark method + [#2133](https://github.com/open-telemetry/opentelemetry-cpp/pull/2133) + +* [API] Fix inclusion header files and use forward declaration + [#2124](https://github.com/open-telemetry/opentelemetry-cpp/pull/2124) * [API] Add user facing Logging API and Benchmarks [#2094](https://github.com/open-telemetry/opentelemetry-cpp/pull/2094) +* [SDK] SDK support for the new OTel log + [#2123](https://github.com/open-telemetry/opentelemetry-cpp/pull/2123) + +* [EXPORTER] Fixed HTTP session cleanup on shutdown + [#2111](https://github.com/open-telemetry/opentelemetry-cpp/pull/2111) +* [EXPORTER] Delegate all API calls of gRPC into + opentelemetry_exporter_otlp_grpc_client, + and make it contains all symbols needed. + [#2005](https://github.com/open-telemetry/opentelemetry-cpp/pull/2005) + +* [DOC] Add Marc as maintainer. + [#2027](https://github.com/open-telemetry/opentelemetry-cpp/pull/2027) + +Breaking changes: + +* Add opentelemetry_proto_grpc and move gRPC sources into it. + [#2097](https://github.com/open-telemetry/opentelemetry-cpp/pull/2097) + * There will be no breaking changes for users who only use OTLP exporters and + do not directly use opentelemetry-cpp::proto. However, it is important to + note that `opentelemetry-cpp::proto` no longer contains generated gRPC codes + , and all components that depend on these gRPC codes should also link to + `opentelemetry-cpp::proto_grpc`. + Deprecations: * The Jaeger Exporter is deprecated, see [DEPRECATED](./DEPRECATED.md) for details. +* C++11 support is to end, C++14 will be supported instead, + see [DEPRECATED](./DEPRECATED.md) for details. ## [1.9.0] 2023-04-12 @@ -467,7 +534,7 @@ update the semantic convention in instrumentation library is needed. * [BUILD] Don't require applications using jaeger exporter to know about libcurl [#1518](https://github.com/open-telemetry/opentelemetry-cpp/pull/1518) * [EXPORTER] Inline print_value() in ostream exporter [#1512](https://github.com/open-telemetry/opentelemetry-cpp/pull/1512) -* [SDK] fix: urlPaser will incorrect parsing url like "http://abc.com/xxx@xxx/a/b" +* [SDK] fix: urlPaser will incorrect parsing url like `http://abc.com/xxx@xxx/a/b` [#1511](https://github.com/open-telemetry/opentelemetry-cpp/pull/1511) * [SDK] Rename `InstrumentationLibrary` to `InstrumentationScope` [#1507](https://github.com/open-telemetry/opentelemetry-cpp/pull/1507) * [BUILD] Try to build nlohmann-json only it's depended. [#1505](https://github.com/open-telemetry/opentelemetry-cpp/pull/1505) diff --git a/CMakeLists.txt b/CMakeLists.txt index dbfb6a209d..37e0be94a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,15 +159,16 @@ if(WITH_STL) endif() endif() -option(WITH_OTLP "Whether to include the OpenTelemetry Protocol in the SDK" OFF) - -if(WITH_OTLP) +if(DEFINED WITH_OTLP) message( - WARNING - "WITH_OTLP is deprecated and will be removed in future. Please set either WITH_OTLP_GRPC or WITH_OTLP_HTTP, or even both." + FATAL_ERROR + "WITH_OTLP is deprecated. Please set either WITH_OTLP_GRPC=ON, WITH_OTLP_HTTP=ON, or both to ON." ) endif() +option(WITH_OTLP_GRPC "Whether to include the OTLP gRPC exporter in the SDK" + OFF) + option(WITH_OTLP_HTTP "Whether to include the OTLP http exporter in the SDK" OFF) @@ -278,7 +279,12 @@ function(install_windows_deps) COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/setup-buildtools.cmd) set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/vcpkg/scripts/buildsystems/vcpkg.cmake - PARENT_SCOPE) + CACHE FILEPATH "") + message( + "Make sure that vcpkg.cmake is set as the CMAKE_TOOLCHAIN_FILE at the START of the cmake build process! + Can be command-line arg (cmake -DCMAKE_TOOLCHAIN_FILE=...) or set in your editor of choice." + ) + endfunction() function(set_target_version target_name) @@ -350,11 +356,10 @@ if(WITH_PROMETHEUS) endif() endif() -if(WITH_OTLP) +if(WITH_OTLP_GRPC OR WITH_OTLP_HTTP) set(protobuf_MODULE_COMPATIBLE ON) find_package(Protobuf) - if(WITH_OTLP_GRPC OR (NOT DEFINED WITH_OTLP_GRPC AND NOT DEFINED - CACHE{WITH_OTLP_GRPC})) + if(WITH_OTLP_GRPC) find_package(gRPC) endif() if((NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND) OR (NOT gRPC_FOUND)) @@ -372,9 +377,7 @@ if(WITH_OTLP) if(NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND) find_package(Protobuf REQUIRED) endif() - if(NOT gRPC_FOUND - AND (WITH_OTLP_GRPC OR (NOT DEFINED WITH_OTLP_GRPC - AND NOT DEFINED CACHE{WITH_OTLP_GRPC}))) + if(NOT gRPC_FOUND AND WITH_OTLP_GRPC) find_package(gRPC) endif() if(WIN32) @@ -392,10 +395,6 @@ if(WITH_OTLP) endif() include(CMakeDependentOption) - cmake_dependent_option( - WITH_OTLP_GRPC "Whether to include the OTLP gRPC exporter in the SDK" ON - "gRPC_FOUND" OFF) - message(STATUS "PROTOBUF_PROTOC_EXECUTABLE=${PROTOBUF_PROTOC_EXECUTABLE}") include(cmake/opentelemetry-proto.cmake) endif() @@ -548,9 +547,10 @@ if(BUILD_TESTING) ${CMAKE_BINARY_DIR}/lib/libgmock.a) elseif(WIN32) # Make sure we are always bootsrapped with vcpkg on Windows - find_package(GTest REQUIRED) + find_package(GTest) if(NOT (GTEST_FOUND OR GTest_FOUND)) install_windows_deps() + include(${CMAKE_TOOLCHAIN_FILE}) find_package(GTest REQUIRED) endif() else() diff --git a/CMakeSettings.json b/CMakeSettings.json index 4890a66411..02d068a3a1 100644 --- a/CMakeSettings.json +++ b/CMakeSettings.json @@ -14,7 +14,7 @@ "ctestCommandArgs": "", "variables": [ { - "name": "WITH_OTLP", + "name": "WITH_OTLP_GRPC", "value": "True", "type": "BOOL" }, @@ -40,7 +40,7 @@ "cmakeToolchain": "", "variables": [ { - "name": "WITH_OTLP", + "name": "WITH_OTLP_GRPC", "value": "True", "type": "BOOL" }, @@ -70,7 +70,7 @@ "type": "BOOL" }, { - "name": "WITH_OTLP", + "name": "WITH_OTLP_GRPC", "value": "True", "type": "BOOL" }, @@ -106,7 +106,7 @@ "type": "BOOL" }, { - "name": "WITH_OTLP", + "name": "WITH_OTLP_GRPC", "value": "True", "type": "BOOL" }, @@ -123,4 +123,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/DEPRECATED.md b/DEPRECATED.md index 4125529ef8..2284197309 100644 --- a/DEPRECATED.md +++ b/DEPRECATED.md @@ -30,7 +30,66 @@ N/A ## [Compilers] -N/A +### Drop C++11 support + +#### Announcement (C++11) + +* Date: 2022-12-01 +* Issue: [DEPRECATION] Drop C++11 support + [#1830](https://github.com/open-telemetry/opentelemetry-cpp/pull/1830) +* This announcement has been pinned, + visible in the issues pages since December 2022. + +#### Motivation (C++11) + +This repository, opentelemetry-cpp, supports a "bring your own dependency" model. + +In this model, +the build scripts can be configured to: + +* pick a given version for a third party library, +* build opentelemetry-cpp with the library given. + +The makefiles do not mandate to use a particular version, +hence the "bring your own" denomination. + +To have an up to date build, projects are encouraged to use up to date +versions of third party libraries, to benefit from bug fixes. + +Now, many libraries deliver new versions that require C++14, bug fixes +releases for C++11 are no longer available. + +In particular, the following components: + +* GRPC C++ +* abseil +* googletest + +now require C++14, per +[google support policies](https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md) + +As a result, to stay up to date, opentelemetry-cpp needs to upgrade its +minimum build requirements to use C++14 instead of C++11. + +#### Scope (C++11) + +Continuous Integration (CI) builds will use C++14 instead of C++11. + +The CI build for gcc 4.8 is now deprecated, to be decommissioned when C++11 +support is dropped. + +#### Mitigation (C++11) + +Building the code with recent third party libraries will require C++14 +instead of C++11. + +#### Planned end of life (C++11) + +Support for C++11 in opentelemetry-cpp will end on September 2023. + +After this date, opentelemetry-cpp may still build properly in C++11 mode, +assuming a suitable, old, version for each dependency is used, +but the C++11 build will no longer be tested for each new release. ## [Third party dependencies] diff --git a/INSTALL.md b/INSTALL.md index a5fb65f9ad..48d1ee8a45 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -82,7 +82,8 @@ You can link OpenTelemetry C++ SDK with libraries provided in - `-DBUILD_SHARED_LIBS=ON` : To build shared libraries for the targets. Please refer to note [below](#building-shared-libs-for-windows) for Windows DLL support. - - `-DWITH_OTLP=ON` : To enable building OTLP exporter. + - `-DWITH_OTLP_GRPC=ON` : To enable building OTLP GRPC exporter. + - `-DWITH_OTLP_HTTP=ON` : To enable building OTLP HTTP exporter. - `-DWITH_PROMETHEUS=ON` : To enable building prometheus exporter. 3. Once the build configuration is created, build the CMake targets - this diff --git a/README.md b/README.md index dd90c97221..6dd56949fd 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,6 @@ For edit access, get in touch on ([@open-telemetry/cpp-approvers](https://github.com/orgs/open-telemetry/teams/cpp-approvers)): * [Josh Suereth](https://github.com/jsuereth), Google -* [Reiley Yang](https://github.com/reyang), Microsoft * [WenTao Ou](https://github.com/owent), Tencent [Emeritus @@ -116,6 +115,7 @@ Maintainer/Approver/Triager](https://github.com/open-telemetry/community/blob/ma * [Jodee Varney](https://github.com/jodeev) * [Johannes Tax](https://github.com/pyohannes) * [Max Golovanov](https://github.com/maxgolov) +* [Reiley Yang](https://github.com/reyang) * [Ryan Burn](https://github.com/rnburn) ### Thanks to all the people who have contributed diff --git a/api/include/opentelemetry/baggage/baggage.h b/api/include/opentelemetry/baggage/baggage.h index 66a77ed941..66eb9d9833 100644 --- a/api/include/opentelemetry/baggage/baggage.h +++ b/api/include/opentelemetry/baggage/baggage.h @@ -26,14 +26,12 @@ class OPENTELEMETRY_EXPORT Baggage static constexpr char kMembersSeparator = ','; static constexpr char kMetadataSeparator = ';'; - Baggage() noexcept : kv_properties_(new opentelemetry::common::KeyValueProperties()) {} - Baggage(size_t size) noexcept - : kv_properties_(new opentelemetry::common::KeyValueProperties(size)) - {} + Baggage() noexcept : kv_properties_(new common::KeyValueProperties()) {} + Baggage(size_t size) noexcept : kv_properties_(new common::KeyValueProperties(size)) {} template Baggage(const T &keys_and_values) noexcept - : kv_properties_(new opentelemetry::common::KeyValueProperties(keys_and_values)) + : kv_properties_(new common::KeyValueProperties(keys_and_values)) {} OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr GetDefault() @@ -293,7 +291,7 @@ class OPENTELEMETRY_EXPORT Baggage private: // Store entries in a C-style array to avoid using std::array or std::vector. - nostd::unique_ptr kv_properties_; + nostd::unique_ptr kv_properties_; }; } // namespace baggage diff --git a/api/include/opentelemetry/baggage/baggage_context.h b/api/include/opentelemetry/baggage/baggage_context.h index 9a92bac77f..e5b9556d3f 100644 --- a/api/include/opentelemetry/baggage/baggage_context.h +++ b/api/include/opentelemetry/baggage/baggage_context.h @@ -15,22 +15,19 @@ namespace baggage static const std::string kBaggageHeader = "baggage"; -inline nostd::shared_ptr GetBaggage( - const opentelemetry::context::Context &context) noexcept +inline nostd::shared_ptr GetBaggage(const context::Context &context) noexcept { context::ContextValue context_value = context.GetValue(kBaggageHeader); - if (nostd::holds_alternative>(context_value)) + if (nostd::holds_alternative>(context_value)) { - return nostd::get>(context_value); + return nostd::get>(context_value); } - static nostd::shared_ptr empty_baggage{ - new opentelemetry::baggage::Baggage()}; + static nostd::shared_ptr empty_baggage{new Baggage()}; return empty_baggage; } -inline context::Context SetBaggage( - opentelemetry::context::Context &context, - nostd::shared_ptr baggage) noexcept +inline context::Context SetBaggage(context::Context &context, + nostd::shared_ptr baggage) noexcept { return context.SetValue(kBaggageHeader, baggage); } diff --git a/api/include/opentelemetry/baggage/propagation/baggage_propagator.h b/api/include/opentelemetry/baggage/propagation/baggage_propagator.h index 3de60860b2..6de32882c0 100644 --- a/api/include/opentelemetry/baggage/propagation/baggage_propagator.h +++ b/api/include/opentelemetry/baggage/propagation/baggage_propagator.h @@ -14,13 +14,13 @@ namespace baggage namespace propagation { -class BaggagePropagator : public opentelemetry::context::propagation::TextMapPropagator +class BaggagePropagator : public context::propagation::TextMapPropagator { public: - void Inject(opentelemetry::context::propagation::TextMapCarrier &carrier, - const opentelemetry::context::Context &context) noexcept override + void Inject(context::propagation::TextMapCarrier &carrier, + const context::Context &context) noexcept override { - auto baggage = opentelemetry::baggage::GetBaggage(context); + auto baggage = baggage::GetBaggage(context); auto header = baggage->ToHeader(); if (header.size()) { @@ -28,15 +28,15 @@ class BaggagePropagator : public opentelemetry::context::propagation::TextMapPro } } - context::Context Extract(const opentelemetry::context::propagation::TextMapCarrier &carrier, - opentelemetry::context::Context &context) noexcept override + context::Context Extract(const context::propagation::TextMapCarrier &carrier, + context::Context &context) noexcept override { - nostd::string_view baggage_str = carrier.Get(opentelemetry::baggage::kBaggageHeader); - auto baggage = opentelemetry::baggage::Baggage::FromHeader(baggage_str); + nostd::string_view baggage_str = carrier.Get(baggage::kBaggageHeader); + auto baggage = baggage::Baggage::FromHeader(baggage_str); if (baggage->ToHeader().size()) { - return opentelemetry::baggage::SetBaggage(context, baggage); + return baggage::SetBaggage(context, baggage); } else { diff --git a/api/include/opentelemetry/common/key_value_iterable.h b/api/include/opentelemetry/common/key_value_iterable.h index 732d361e7b..9d43e1571b 100644 --- a/api/include/opentelemetry/common/key_value_iterable.h +++ b/api/include/opentelemetry/common/key_value_iterable.h @@ -5,6 +5,7 @@ #include "opentelemetry/common/attribute_value.h" #include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/api/include/opentelemetry/common/key_value_iterable_view.h b/api/include/opentelemetry/common/key_value_iterable_view.h index daea8fce2e..fb1a6ea019 100644 --- a/api/include/opentelemetry/common/key_value_iterable_view.h +++ b/api/include/opentelemetry/common/key_value_iterable_view.h @@ -4,10 +4,10 @@ #pragma once #include -#include #include #include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/type_traits.h" diff --git a/api/include/opentelemetry/common/kv_properties.h b/api/include/opentelemetry/common/kv_properties.h index 96442021b5..00fa2571c2 100644 --- a/api/include/opentelemetry/common/kv_properties.h +++ b/api/include/opentelemetry/common/kv_properties.h @@ -6,7 +6,6 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/common/string_util.h" #include "opentelemetry/nostd/function_ref.h" -#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/version.h" diff --git a/api/include/opentelemetry/common/string_util.h b/api/include/opentelemetry/common/string_util.h index 6dce79f1ba..a7070a0acd 100644 --- a/api/include/opentelemetry/common/string_util.h +++ b/api/include/opentelemetry/common/string_util.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common diff --git a/api/include/opentelemetry/common/timestamp.h b/api/include/opentelemetry/common/timestamp.h index da8765b9bc..14aa457b5b 100644 --- a/api/include/opentelemetry/common/timestamp.h +++ b/api/include/opentelemetry/common/timestamp.h @@ -3,7 +3,6 @@ #pragma once -#include #include #include diff --git a/api/include/opentelemetry/context/context.h b/api/include/opentelemetry/context/context.h index 923b396c7f..d0b53c3ea8 100644 --- a/api/include/opentelemetry/context/context.h +++ b/api/include/opentelemetry/context/context.h @@ -7,6 +7,7 @@ #include "opentelemetry/context/context_value.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context diff --git a/api/include/opentelemetry/context/context_value.h b/api/include/opentelemetry/context/context_value.h index 013b3a4608..27bd40fb05 100644 --- a/api/include/opentelemetry/context/context_value.h +++ b/api/include/opentelemetry/context/context_value.h @@ -5,16 +5,22 @@ #include -#include "opentelemetry/baggage/baggage.h" #include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/nostd/span.h" -#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/nostd/variant.h" -#include "opentelemetry/trace/span.h" -#include "opentelemetry/trace/span_context.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace baggage +{ +class Baggage; +} // namespace baggage + +namespace trace +{ +class Span; +class SpanContext; +} // namespace trace + namespace context { using ContextValue = nostd::variant #include #include + #include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context diff --git a/api/include/opentelemetry/context/propagation/global_propagator.h b/api/include/opentelemetry/context/propagation/global_propagator.h index 460764a74d..a62146e100 100644 --- a/api/include/opentelemetry/context/propagation/global_propagator.h +++ b/api/include/opentelemetry/context/propagation/global_propagator.h @@ -6,7 +6,6 @@ #include #include "opentelemetry/context/propagation/noop_propagator.h" -#include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/common/macros.h" #include "opentelemetry/common/spin_lock_mutex.h" @@ -20,6 +19,8 @@ namespace context namespace propagation { +class TextMapPropagator; + /* Stores the singleton TextMapPropagator */ class OPENTELEMETRY_EXPORT GlobalTextMapPropagator diff --git a/api/include/opentelemetry/context/propagation/text_map_propagator.h b/api/include/opentelemetry/context/propagation/text_map_propagator.h index bb0c6d8022..21bc293616 100644 --- a/api/include/opentelemetry/context/propagation/text_map_propagator.h +++ b/api/include/opentelemetry/context/propagation/text_map_propagator.h @@ -3,8 +3,8 @@ #pragma once -#include #include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/version.h" diff --git a/api/include/opentelemetry/context/runtime_context.h b/api/include/opentelemetry/context/runtime_context.h index bec96a9af4..2cd5b0ff90 100644 --- a/api/include/opentelemetry/context/runtime_context.h +++ b/api/include/opentelemetry/context/runtime_context.h @@ -5,6 +5,10 @@ #include "opentelemetry/common/macros.h" #include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context diff --git a/api/include/opentelemetry/logs/event_id.h b/api/include/opentelemetry/logs/event_id.h index 1a1ad6f078..60d020827c 100644 --- a/api/include/opentelemetry/logs/event_id.h +++ b/api/include/opentelemetry/logs/event_id.h @@ -5,6 +5,9 @@ #ifdef ENABLE_LOGS_PREVIEW +# include + +# include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/unique_ptr.h" # include "opentelemetry/version.h" @@ -18,14 +21,15 @@ namespace logs class EventId { public: - EventId(int64_t id, nostd::string_view name) noexcept + EventId(int64_t id, nostd::string_view name) noexcept : id_{id} { - id_ = id; name_ = nostd::unique_ptr{new char[name.length() + 1]}; std::copy(name.begin(), name.end(), name_.get()); name_.get()[name.length()] = 0; } + EventId(int64_t id) noexcept : id_{id}, name_{nullptr} {} + public: int64_t id_; nostd::unique_ptr name_; diff --git a/api/include/opentelemetry/logs/event_logger.h b/api/include/opentelemetry/logs/event_logger.h index 654c6f6c69..c87997816b 100644 --- a/api/include/opentelemetry/logs/event_logger.h +++ b/api/include/opentelemetry/logs/event_logger.h @@ -4,15 +4,9 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW -# include -# include -# include - -# include "opentelemetry/common/macros.h" # include "opentelemetry/logs/log_record.h" # include "opentelemetry/logs/logger.h" # include "opentelemetry/logs/logger_type_traits.h" -# include "opentelemetry/logs/severity.h" # include "opentelemetry/nostd/shared_ptr.h" # include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/unique_ptr.h" diff --git a/api/include/opentelemetry/logs/event_logger_provider.h b/api/include/opentelemetry/logs/event_logger_provider.h index 8692222c10..06170dccab 100644 --- a/api/include/opentelemetry/logs/event_logger_provider.h +++ b/api/include/opentelemetry/logs/event_logger_provider.h @@ -4,16 +4,17 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW -# include "opentelemetry/common/key_value_iterable.h" -# include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/logs/event_logger.h" -# include "opentelemetry/logs/logger.h" # include "opentelemetry/nostd/shared_ptr.h" # include "opentelemetry/nostd/string_view.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace logs { + +class EventLogger; +class Logger; + /** * Creates new EventLogger instances. */ diff --git a/api/include/opentelemetry/logs/log_record.h b/api/include/opentelemetry/logs/log_record.h index 7fb51c2d99..1014a880bc 100644 --- a/api/include/opentelemetry/logs/log_record.h +++ b/api/include/opentelemetry/logs/log_record.h @@ -5,17 +5,22 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/common/attribute_value.h" -# include "opentelemetry/common/key_value_iterable.h" # include "opentelemetry/common/timestamp.h" -# include "opentelemetry/logs/severity.h" -# include "opentelemetry/trace/span_id.h" -# include "opentelemetry/trace/trace_flags.h" -# include "opentelemetry/trace/trace_id.h" # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ +class SpanId; +class TraceId; +class TraceFlags; +} // namespace trace + namespace logs { + +enum class Severity : uint8_t; + /** * Maintains a representation of a log in a format that can be processed by a recorder. * @@ -30,25 +35,25 @@ class LogRecord * Set the timestamp for this log. * @param timestamp the timestamp to set */ - virtual void SetTimestamp(opentelemetry::common::SystemTimestamp timestamp) noexcept = 0; + virtual void SetTimestamp(common::SystemTimestamp timestamp) noexcept = 0; /** * Set the observed timestamp for this log. * @param timestamp the timestamp to set */ - virtual void SetObservedTimestamp(opentelemetry::common::SystemTimestamp timestamp) noexcept = 0; + virtual void SetObservedTimestamp(common::SystemTimestamp timestamp) noexcept = 0; /** * Set the severity for this log. * @param severity the severity of the event */ - virtual void SetSeverity(opentelemetry::logs::Severity severity) noexcept = 0; + virtual void SetSeverity(logs::Severity severity) noexcept = 0; /** * Set body field for this log. * @param message the body to set */ - virtual void SetBody(const opentelemetry::common::AttributeValue &message) noexcept = 0; + virtual void SetBody(const common::AttributeValue &message) noexcept = 0; /** * Set an attribute of a log. @@ -56,25 +61,33 @@ class LogRecord * @param value the attribute value */ virtual void SetAttribute(nostd::string_view key, - const opentelemetry::common::AttributeValue &value) noexcept = 0; + const common::AttributeValue &value) noexcept = 0; + + /** + * Set the Event Id. + * @param id The event id to set + * @param name Optional event name to set + */ + // TODO: mark this as pure virtual once all exporters have been updated + virtual void SetEventId(int64_t id, nostd::string_view name = {}) noexcept = 0; /** * Set the trace id for this log. * @param trace_id the trace id to set */ - virtual void SetTraceId(const opentelemetry::trace::TraceId &trace_id) noexcept = 0; + virtual void SetTraceId(const trace::TraceId &trace_id) noexcept = 0; /** * Set the span id for this log. * @param span_id the span id to set */ - virtual void SetSpanId(const opentelemetry::trace::SpanId &span_id) noexcept = 0; + virtual void SetSpanId(const trace::SpanId &span_id) noexcept = 0; /** * Inject trace_flags for this log. * @param trace_flags the trace flags to set */ - virtual void SetTraceFlags(const opentelemetry::trace::TraceFlags &trace_flags) noexcept = 0; + virtual void SetTraceFlags(const trace::TraceFlags &trace_flags) noexcept = 0; }; } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/logs/logger.h b/api/include/opentelemetry/logs/logger.h index 5806c6a0d1..d991a13d88 100644 --- a/api/include/opentelemetry/logs/logger.h +++ b/api/include/opentelemetry/logs/logger.h @@ -4,9 +4,6 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW -# include "opentelemetry/common/key_value_iterable.h" -# include "opentelemetry/logs/event_id.h" -# include "opentelemetry/logs/log_record.h" # include "opentelemetry/logs/logger_type_traits.h" # include "opentelemetry/logs/severity.h" # include "opentelemetry/nostd/string_view.h" @@ -14,8 +11,17 @@ # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + namespace logs { + +class EventId; +class LogRecord; + /** * Handles log record creation. **/ @@ -289,7 +295,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->EmitLogRecord(severity, event_id, format, attributes); + this->EmitLogRecord(severity, EventId{event_id}, format, attributes); } virtual void Log(Severity severity, @@ -318,7 +324,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->Log(Severity::kTrace, event_id, format, attributes); + this->Log(Severity::kTrace, EventId{event_id}, format, attributes); } inline void Trace(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept @@ -339,7 +345,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->Log(Severity::kDebug, event_id, format, attributes); + this->Log(Severity::kDebug, EventId{event_id}, format, attributes); } inline void Debug(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept @@ -360,7 +366,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->Log(Severity::kInfo, event_id, format, attributes); + this->Log(Severity::kInfo, EventId{event_id}, format, attributes); } inline void Info(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept @@ -381,7 +387,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->Log(Severity::kWarn, event_id, format, attributes); + this->Log(Severity::kWarn, EventId{event_id}, format, attributes); } inline void Warn(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept @@ -402,7 +408,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->Log(Severity::kError, event_id, format, attributes); + this->Log(Severity::kError, EventId{event_id}, format, attributes); } inline void Error(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept @@ -423,7 +429,7 @@ class Logger nostd::string_view format, const common::KeyValueIterable &attributes) noexcept { - this->Log(Severity::kFatal, event_id, format, attributes); + this->Log(Severity::kFatal, EventId{event_id}, format, attributes); } inline void Fatal(nostd::string_view format, const common::KeyValueIterable &attributes) noexcept diff --git a/api/include/opentelemetry/logs/logger_provider.h b/api/include/opentelemetry/logs/logger_provider.h index 8fb6d925a0..e2a72bcc54 100644 --- a/api/include/opentelemetry/logs/logger_provider.h +++ b/api/include/opentelemetry/logs/logger_provider.h @@ -7,13 +7,18 @@ # include "opentelemetry/common/key_value_iterable.h" # include "opentelemetry/common/key_value_iterable_view.h" -# include "opentelemetry/logs/logger.h" # include "opentelemetry/nostd/shared_ptr.h" +# include "opentelemetry/nostd/span.h" # include "opentelemetry/nostd/string_view.h" +# include "opentelemetry/nostd/type_traits.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace logs { + +class Logger; + /** * Creates new Logger instances. */ @@ -38,7 +43,6 @@ class OPENTELEMETRY_EXPORT LoggerProvider nostd::string_view library_name = "", nostd::string_view library_version = "", nostd::string_view schema_url = "", - bool include_trace_context = true, const common::KeyValueIterable &attributes = common::NoopKeyValueIterable()) = 0; nostd::shared_ptr GetLogger( @@ -46,10 +50,9 @@ class OPENTELEMETRY_EXPORT LoggerProvider nostd::string_view library_name, nostd::string_view library_version, nostd::string_view schema_url, - bool include_trace_context, std::initializer_list> attributes) { - return GetLogger(logger_name, library_name, library_version, schema_url, include_trace_context, + return GetLogger(logger_name, library_name, library_version, schema_url, nostd::span>{ attributes.begin(), attributes.end()}); } @@ -60,10 +63,9 @@ class OPENTELEMETRY_EXPORT LoggerProvider nostd::string_view library_name, nostd::string_view library_version, nostd::string_view schema_url, - bool include_trace_context, const T &attributes) { - return GetLogger(logger_name, library_name, library_version, schema_url, include_trace_context, + return GetLogger(logger_name, library_name, library_version, schema_url, common::KeyValueIterableView(attributes)); } }; diff --git a/api/include/opentelemetry/logs/logger_type_traits.h b/api/include/opentelemetry/logs/logger_type_traits.h index 82f4ee5278..b1e5e560d3 100644 --- a/api/include/opentelemetry/logs/logger_type_traits.h +++ b/api/include/opentelemetry/logs/logger_type_traits.h @@ -13,11 +13,8 @@ # include "opentelemetry/logs/event_id.h" # include "opentelemetry/logs/log_record.h" # include "opentelemetry/logs/severity.h" -# include "opentelemetry/nostd/shared_ptr.h" -# include "opentelemetry/nostd/span.h" # include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/type_traits.h" -# include "opentelemetry/nostd/unique_ptr.h" # include "opentelemetry/trace/span_context.h" # include "opentelemetry/trace/span_id.h" # include "opentelemetry/trace/trace_flags.h" @@ -48,9 +45,10 @@ template <> struct LogRecordSetterTrait { template - inline static LogRecord *Set(LogRecord *log_record, ArgumentType && /*arg*/) noexcept + inline static LogRecord *Set(LogRecord *log_record, ArgumentType &&arg) noexcept { - // TODO: set log_record + log_record->SetEventId(arg.id_, nostd::string_view{arg.name_.get()}); + return log_record; } }; diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h index 5061003274..5303b2e77f 100644 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -9,28 +9,21 @@ // This file is part of the internal implementation of OpenTelemetry. Nothing in this file should be // used directly. Please refer to logger.h for documentation on these interfaces. -# include - -# include "opentelemetry/common/attribute_value.h" -# include "opentelemetry/common/key_value_iterable.h" -# include "opentelemetry/common/timestamp.h" -# include "opentelemetry/context/runtime_context.h" +# include "opentelemetry/logs/event_logger.h" # include "opentelemetry/logs/event_logger_provider.h" # include "opentelemetry/logs/logger.h" # include "opentelemetry/logs/logger_provider.h" -# include "opentelemetry/logs/severity.h" # include "opentelemetry/nostd/shared_ptr.h" -# include "opentelemetry/nostd/span.h" # include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/unique_ptr.h" -# include "opentelemetry/trace/span_id.h" -# include "opentelemetry/trace/trace_flags.h" -# include "opentelemetry/trace/trace_id.h" -# include "opentelemetry/version.h" - # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + namespace logs { /** @@ -52,26 +45,22 @@ class NoopLogger final : public Logger /** * No-op implementation of a LoggerProvider. */ -class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider +class NoopLoggerProvider final : public LoggerProvider { public: - NoopLoggerProvider() - : logger_{ - nostd::shared_ptr(new opentelemetry::logs::NoopLogger)} - {} + NoopLoggerProvider() : logger_{nostd::shared_ptr(new NoopLogger())} {} nostd::shared_ptr GetLogger(nostd::string_view /* logger_name */, nostd::string_view /* library_name */, nostd::string_view /* library_version */, nostd::string_view /* schema_url */, - bool /* include_trace_context */, const common::KeyValueIterable & /* attributes */) override { return logger_; } private: - nostd::shared_ptr logger_; + nostd::shared_ptr logger_; }; class NoopEventLogger final : public EventLogger diff --git a/api/include/opentelemetry/logs/provider.h b/api/include/opentelemetry/logs/provider.h index e361c1e670..a33b26dbac 100644 --- a/api/include/opentelemetry/logs/provider.h +++ b/api/include/opentelemetry/logs/provider.h @@ -8,14 +8,17 @@ # include "opentelemetry/common/macros.h" # include "opentelemetry/common/spin_lock_mutex.h" -# include "opentelemetry/logs/event_logger_provider.h" -# include "opentelemetry/logs/logger_provider.h" # include "opentelemetry/logs/noop.h" # include "opentelemetry/nostd/shared_ptr.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace logs { + +class EventLoggerProvider; +class LoggerProvider; + /** * Stores the singleton global LoggerProvider. */ diff --git a/api/include/opentelemetry/logs/severity.h b/api/include/opentelemetry/logs/severity.h index 78658fbaa9..8534ce7508 100644 --- a/api/include/opentelemetry/logs/severity.h +++ b/api/include/opentelemetry/logs/severity.h @@ -56,7 +56,7 @@ const uint8_t kMaxSeverity = 255; * Included to follow the specification's recommendation to print both * severity number and text in each log record. */ -const opentelemetry::nostd::string_view SeverityNumToText[25] = { +const nostd::string_view SeverityNumToText[25] = { "INVALID", "TRACE", "TRACE2", "TRACE3", "TRACE4", "DEBUG", "DEBUG2", "DEBUG3", "DEBUG4", "INFO", "INFO2", "INFO3", "INFO4", "WARN", "WARN2", "WARN3", "WARN4", "ERROR", "ERROR2", "ERROR3", "ERROR4", "FATAL", "FATAL2", "FATAL3", "FATAL4"}; diff --git a/api/include/opentelemetry/metrics/async_instruments.h b/api/include/opentelemetry/metrics/async_instruments.h index 6e6d5012c4..f73eb2f51b 100644 --- a/api/include/opentelemetry/metrics/async_instruments.h +++ b/api/include/opentelemetry/metrics/async_instruments.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/metrics/observer_result.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace metrics diff --git a/api/include/opentelemetry/metrics/meter.h b/api/include/opentelemetry/metrics/meter.h index 877453884a..8784fe788e 100644 --- a/api/include/opentelemetry/metrics/meter.h +++ b/api/include/opentelemetry/metrics/meter.h @@ -3,10 +3,7 @@ #pragma once -#include "opentelemetry/metrics/async_instruments.h" -#include "opentelemetry/metrics/sync_instruments.h" #include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/version.h" @@ -14,6 +11,18 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace metrics { + +template +class Counter; + +template +class Histogram; + +template +class UpDownCounter; + +class ObservableInstrument; + /** * Handles instrument creation and provides a facility for batch recording. * diff --git a/api/include/opentelemetry/metrics/meter_provider.h b/api/include/opentelemetry/metrics/meter_provider.h index 4c3306ebf6..654c4022ea 100644 --- a/api/include/opentelemetry/metrics/meter_provider.h +++ b/api/include/opentelemetry/metrics/meter_provider.h @@ -3,13 +3,16 @@ #pragma once -#include "opentelemetry/metrics/meter.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace metrics { + +class Meter; + /** * Creates new Meter instances. */ diff --git a/api/include/opentelemetry/metrics/noop.h b/api/include/opentelemetry/metrics/noop.h index 0d2eacde97..3a754a6e00 100644 --- a/api/include/opentelemetry/metrics/noop.h +++ b/api/include/opentelemetry/metrics/noop.h @@ -23,12 +23,11 @@ class NoopCounter : public Counter nostd::string_view /* unit */) noexcept {} void Add(T /* value */) noexcept override {} - void Add(T /* value */, const opentelemetry::context::Context & /* context */) noexcept override - {} + void Add(T /* value */, const context::Context & /* context */) noexcept override {} void Add(T /* value */, const common::KeyValueIterable & /* attributes */) noexcept override {} void Add(T /* value */, const common::KeyValueIterable & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override + const context::Context & /* context */) noexcept override {} }; @@ -40,12 +39,10 @@ class NoopHistogram : public Histogram nostd::string_view /* description */, nostd::string_view /* unit */) noexcept {} - void Record(T /* value */, - const opentelemetry::context::Context & /* context */) noexcept override - {} + void Record(T /* value */, const context::Context & /* context */) noexcept override {} void Record(T /* value */, const common::KeyValueIterable & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override + const context::Context & /* context */) noexcept override {} }; @@ -59,12 +56,11 @@ class NoopUpDownCounter : public UpDownCounter {} ~NoopUpDownCounter() override = default; void Add(T /* value */) noexcept override {} - void Add(T /* value */, const opentelemetry::context::Context & /* context */) noexcept override - {} + void Add(T /* value */, const context::Context & /* context */) noexcept override {} void Add(T /* value */, const common::KeyValueIterable & /* attributes */) noexcept override {} void Add(T /* value */, const common::KeyValueIterable & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override + const context::Context & /* context */) noexcept override {} }; diff --git a/api/include/opentelemetry/metrics/observer_result.h b/api/include/opentelemetry/metrics/observer_result.h index 88cae28618..56c42bc20e 100644 --- a/api/include/opentelemetry/metrics/observer_result.h +++ b/api/include/opentelemetry/metrics/observer_result.h @@ -9,6 +9,8 @@ #include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/nostd/variant.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace metrics diff --git a/api/include/opentelemetry/metrics/provider.h b/api/include/opentelemetry/metrics/provider.h index ea710a4820..b2fa3e20e4 100644 --- a/api/include/opentelemetry/metrics/provider.h +++ b/api/include/opentelemetry/metrics/provider.h @@ -7,13 +7,16 @@ #include "opentelemetry/common/macros.h" #include "opentelemetry/common/spin_lock_mutex.h" -#include "opentelemetry/metrics/meter_provider.h" #include "opentelemetry/metrics/noop.h" #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace metrics { + +class MeterProvider; + /** * Stores the singleton global MeterProvider. */ diff --git a/api/include/opentelemetry/metrics/sync_instruments.h b/api/include/opentelemetry/metrics/sync_instruments.h index 8db77daae5..b26e527c2c 100644 --- a/api/include/opentelemetry/metrics/sync_instruments.h +++ b/api/include/opentelemetry/metrics/sync_instruments.h @@ -9,6 +9,7 @@ #include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/type_traits.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace metrics @@ -33,7 +34,7 @@ class Counter : public SynchronousInstrument */ virtual void Add(T value) noexcept = 0; - virtual void Add(T value, const opentelemetry::context::Context &context) noexcept = 0; + virtual void Add(T value, const context::Context &context) noexcept = 0; /** * Add adds the value to the counter's sum. The attributes should contain @@ -48,19 +49,19 @@ class Counter : public SynchronousInstrument virtual void Add(T value, const common::KeyValueIterable &attributes, - const opentelemetry::context::Context &context) noexcept = 0; + const context::Context &context) noexcept = 0; template ::value> * = nullptr> void Add(T value, const U &attributes) noexcept { - auto context = opentelemetry::context::Context{}; + auto context = context::Context{}; this->Add(value, common::KeyValueIterableView{attributes}, context); } template ::value> * = nullptr> - void Add(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept + void Add(T value, const U &attributes, const context::Context &context) noexcept { this->Add(value, common::KeyValueIterableView{attributes}, context); } @@ -69,7 +70,7 @@ class Counter : public SynchronousInstrument std::initializer_list> attributes) noexcept { - auto context = opentelemetry::context::Context{}; + auto context = context::Context{}; this->Add(value, nostd::span>{ attributes.begin(), attributes.end()}, @@ -78,7 +79,7 @@ class Counter : public SynchronousInstrument void Add(T value, std::initializer_list> attributes, - const opentelemetry::context::Context &context) noexcept + const context::Context &context) noexcept { this->Add(value, nostd::span>{ @@ -96,23 +97,23 @@ class Histogram : public SynchronousInstrument /** * Records a value. * - * @param value The increment amount. May be positive, negative or zero. + * @param value The measurement value. MUST be non-negative. */ - virtual void Record(T value, const opentelemetry::context::Context &context) noexcept = 0; + virtual void Record(T value, const context::Context &context) noexcept = 0; /** * Records a value with a set of attributes. * - * @param value The increment amount. May be positive, negative or zero. + * @param value The measurement value. MUST be non-negative. * @param attributes A set of attributes to associate with the count. */ virtual void Record(T value, const common::KeyValueIterable &attributes, - const opentelemetry::context::Context &context) noexcept = 0; + const context::Context &context) noexcept = 0; template ::value> * = nullptr> - void Record(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept + void Record(T value, const U &attributes, const context::Context &context) noexcept { this->Record(value, common::KeyValueIterableView{attributes}, context); } @@ -120,7 +121,7 @@ class Histogram : public SynchronousInstrument void Record( T value, std::initializer_list> attributes, - const opentelemetry::context::Context &context) noexcept + const context::Context &context) noexcept { this->Record(value, nostd::span>{ @@ -142,7 +143,7 @@ class UpDownCounter : public SynchronousInstrument */ virtual void Add(T value) noexcept = 0; - virtual void Add(T value, const opentelemetry::context::Context &context) noexcept = 0; + virtual void Add(T value, const context::Context &context) noexcept = 0; /** * Add a value with a set of attributes. @@ -154,19 +155,19 @@ class UpDownCounter : public SynchronousInstrument virtual void Add(T value, const common::KeyValueIterable &attributes, - const opentelemetry::context::Context &context) noexcept = 0; + const context::Context &context) noexcept = 0; template ::value> * = nullptr> void Add(T value, const U &attributes) noexcept { - auto context = opentelemetry::context::Context{}; + auto context = context::Context{}; this->Add(value, common::KeyValueIterableView{attributes}, context); } template ::value> * = nullptr> - void Add(T value, const U &attributes, const opentelemetry::context::Context &context) noexcept + void Add(T value, const U &attributes, const context::Context &context) noexcept { this->Add(value, common::KeyValueIterableView{attributes}, context); } @@ -175,7 +176,7 @@ class UpDownCounter : public SynchronousInstrument std::initializer_list> attributes) noexcept { - auto context = opentelemetry::context::Context{}; + auto context = context::Context{}; this->Add(value, nostd::span>{ attributes.begin(), attributes.end()}, @@ -184,7 +185,7 @@ class UpDownCounter : public SynchronousInstrument void Add(T value, std::initializer_list> attributes, - const opentelemetry::context::Context &context) noexcept + const context::Context &context) noexcept { this->Add(value, nostd::span>{ diff --git a/api/include/opentelemetry/plugin/detail/dynamic_load_unix.h b/api/include/opentelemetry/plugin/detail/dynamic_load_unix.h index bcc4bd0b87..1d249317a0 100644 --- a/api/include/opentelemetry/plugin/detail/dynamic_load_unix.h +++ b/api/include/opentelemetry/plugin/detail/dynamic_load_unix.h @@ -8,6 +8,8 @@ #include +#include "opentelemetry/plugin/detail/dynamic_library_handle.h" +#include "opentelemetry/plugin/detail/loader_info.h" #include "opentelemetry/plugin/detail/utility.h" #include "opentelemetry/plugin/factory.h" #include "opentelemetry/plugin/hook.h" diff --git a/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h b/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h index 7a586b6bcc..3f5e05f198 100644 --- a/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h +++ b/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h @@ -5,6 +5,8 @@ #include +#include "opentelemetry/plugin/detail/dynamic_library_handle.h" +#include "opentelemetry/plugin/detail/loader_info.h" #include "opentelemetry/plugin/detail/utility.h" #include "opentelemetry/plugin/factory.h" #include "opentelemetry/plugin/hook.h" diff --git a/api/include/opentelemetry/plugin/detail/tracer_handle.h b/api/include/opentelemetry/plugin/detail/tracer_handle.h index 559d7ddf40..46b128106a 100644 --- a/api/include/opentelemetry/plugin/detail/tracer_handle.h +++ b/api/include/opentelemetry/plugin/detail/tracer_handle.h @@ -3,10 +3,14 @@ #pragma once -#include "opentelemetry/trace/tracer.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ +class Tracer; +} // namespace trace + namespace plugin { /** diff --git a/api/include/opentelemetry/plugin/detail/utility.h b/api/include/opentelemetry/plugin/detail/utility.h index 6f8dd5d462..8007f285df 100644 --- a/api/include/opentelemetry/plugin/detail/utility.h +++ b/api/include/opentelemetry/plugin/detail/utility.h @@ -3,10 +3,12 @@ #pragma once -#include +#if __EXCEPTIONS +# include +#endif // __EXCEPTIONS + #include -#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/api/include/opentelemetry/plugin/dynamic_load.h b/api/include/opentelemetry/plugin/dynamic_load.h index 8318d534ac..58a69ad5c8 100644 --- a/api/include/opentelemetry/plugin/dynamic_load.h +++ b/api/include/opentelemetry/plugin/dynamic_load.h @@ -3,6 +3,7 @@ #pragma once +#include #include #ifdef _WIN32 @@ -10,12 +11,14 @@ #else # include "opentelemetry/plugin/detail/dynamic_load_unix.h" #endif - #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace plugin { + +class Factory; + /** * Load an OpenTelemetry implementation as a plugin. * @param plugin the path to the plugin to load diff --git a/api/include/opentelemetry/plugin/factory.h b/api/include/opentelemetry/plugin/factory.h index 0a285d65b1..6b484d8f2f 100644 --- a/api/include/opentelemetry/plugin/factory.h +++ b/api/include/opentelemetry/plugin/factory.h @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once + #include #include @@ -39,9 +40,8 @@ class Factory final * @param error_message on failure this will contain an error message. * @return a Tracer on success or nullptr on failure. */ - std::shared_ptr MakeTracer( - nostd::string_view tracer_config, - std::string &error_message) const noexcept + std::shared_ptr MakeTracer(nostd::string_view tracer_config, + std::string &error_message) const noexcept { nostd::unique_ptr plugin_error_message; auto tracer_handle = factory_impl_->MakeTracerHandle(tracer_config, plugin_error_message); @@ -50,8 +50,8 @@ class Factory final detail::CopyErrorMessage(plugin_error_message.get(), error_message); return nullptr; } - return std::shared_ptr{ - new (std::nothrow) Tracer{library_handle_, std::move(tracer_handle)}}; + return std::shared_ptr{new (std::nothrow) + Tracer{library_handle_, std::move(tracer_handle)}}; } private: diff --git a/api/include/opentelemetry/plugin/hook.h b/api/include/opentelemetry/plugin/hook.h index c06c0b3243..c9597e06a0 100644 --- a/api/include/opentelemetry/plugin/hook.h +++ b/api/include/opentelemetry/plugin/hook.h @@ -3,8 +3,7 @@ #pragma once -#include "opentelemetry/plugin/detail/loader_info.h" -#include "opentelemetry/plugin/factory.h" +#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/version.h" #ifdef _WIN32 @@ -41,6 +40,10 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace plugin { + +struct LoaderInfo; +class FactoryImpl; + using OpenTelemetryHook = nostd::unique_ptr (*)(const LoaderInfo &loader_info, nostd::unique_ptr &error_message); diff --git a/api/include/opentelemetry/plugin/tracer.h b/api/include/opentelemetry/plugin/tracer.h index df8e542c0c..b87f9e889f 100644 --- a/api/include/opentelemetry/plugin/tracer.h +++ b/api/include/opentelemetry/plugin/tracer.h @@ -6,7 +6,6 @@ #include #include "opentelemetry/common/key_value_iterable.h" -#include "opentelemetry/plugin/detail/dynamic_library_handle.h" #include "opentelemetry/plugin/detail/tracer_handle.h" #include "opentelemetry/trace/tracer.h" #include "opentelemetry/version.h" @@ -14,6 +13,9 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace plugin { + +class DynamicLibraryHandle; + class Span final : public trace::Span { public: diff --git a/api/include/opentelemetry/std/shared_ptr.h b/api/include/opentelemetry/std/shared_ptr.h index 418d4ef71e..b1b99bd36c 100644 --- a/api/include/opentelemetry/std/shared_ptr.h +++ b/api/include/opentelemetry/std/shared_ptr.h @@ -3,10 +3,10 @@ #pragma once -#include "opentelemetry/version.h" - #include +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE // Standard Type aliases in nostd namespace namespace nostd diff --git a/api/include/opentelemetry/std/string_view.h b/api/include/opentelemetry/std/string_view.h index 8fd159d3ad..5295eb4544 100644 --- a/api/include/opentelemetry/std/string_view.h +++ b/api/include/opentelemetry/std/string_view.h @@ -3,15 +3,9 @@ #pragma once -#include "opentelemetry/version.h" - -#include "opentelemetry/std/utility.h" - -#include -#include #include -#include -#include + +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE // Standard Type aliases in nostd namespace diff --git a/api/include/opentelemetry/std/type_traits.h b/api/include/opentelemetry/std/type_traits.h index 66308a42a8..f26af95b94 100644 --- a/api/include/opentelemetry/std/type_traits.h +++ b/api/include/opentelemetry/std/type_traits.h @@ -3,10 +3,10 @@ #pragma once -#include "opentelemetry/version.h" - #include +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE // Standard Type aliases in nostd namespace namespace nostd diff --git a/api/include/opentelemetry/std/unique_ptr.h b/api/include/opentelemetry/std/unique_ptr.h index f15699b676..1d7d9b1fc7 100644 --- a/api/include/opentelemetry/std/unique_ptr.h +++ b/api/include/opentelemetry/std/unique_ptr.h @@ -3,10 +3,10 @@ #pragma once -#include "opentelemetry/version.h" - #include +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE // Standard Type aliases in nostd namespace namespace nostd diff --git a/api/include/opentelemetry/std/utility.h b/api/include/opentelemetry/std/utility.h index 01cdc18331..9a1c76540b 100644 --- a/api/include/opentelemetry/std/utility.h +++ b/api/include/opentelemetry/std/utility.h @@ -3,11 +3,11 @@ #pragma once -#include "opentelemetry/version.h" - #include #include +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE // Standard Type aliases in nostd namespace namespace nostd diff --git a/api/include/opentelemetry/trace/context.h b/api/include/opentelemetry/trace/context.h index 0a57e725c1..b68fe9e95a 100644 --- a/api/include/opentelemetry/trace/context.h +++ b/api/include/opentelemetry/trace/context.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/default_span.h" #include "opentelemetry/version.h" @@ -12,7 +13,7 @@ namespace trace { // Get Span from explicit context -inline nostd::shared_ptr GetSpan(const opentelemetry::context::Context &context) noexcept +inline nostd::shared_ptr GetSpan(const context::Context &context) noexcept { context::ContextValue span = context.GetValue(kSpanKey); if (nostd::holds_alternative>(span)) @@ -23,8 +24,7 @@ inline nostd::shared_ptr GetSpan(const opentelemetry::context::Context &co } // Set Span into explicit context -inline context::Context SetSpan(opentelemetry::context::Context &context, - nostd::shared_ptr span) noexcept +inline context::Context SetSpan(context::Context &context, nostd::shared_ptr span) noexcept { return context.SetValue(kSpanKey, span); } diff --git a/api/include/opentelemetry/trace/default_span.h b/api/include/opentelemetry/trace/default_span.h index dd1e5475f2..cccc7951ad 100644 --- a/api/include/opentelemetry/trace/default_span.h +++ b/api/include/opentelemetry/trace/default_span.h @@ -2,10 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once + #include "opentelemetry/common/attribute_value.h" -#include "opentelemetry/trace/canonical_code.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/trace/span.h" #include "opentelemetry/trace/span_context.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace diff --git a/api/include/opentelemetry/trace/noop.h b/api/include/opentelemetry/trace/noop.h index 8a9b13b7a1..2a2b7312ba 100644 --- a/api/include/opentelemetry/trace/noop.h +++ b/api/include/opentelemetry/trace/noop.h @@ -7,18 +7,18 @@ // This file is part of the internal implementation of OpenTelemetry. Nothing in this file should be // used directly. Please refer to span.h and tracer.h for documentation on these interfaces. +#include + #include "opentelemetry/context/runtime_context.h" +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/span.h" #include "opentelemetry/trace/span_context.h" -#include "opentelemetry/trace/span_context_kv_iterable.h" #include "opentelemetry/trace/tracer.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" -#include - namespace trace_api = opentelemetry::trace; OPENTELEMETRY_BEGIN_NAMESPACE @@ -88,8 +88,7 @@ class OPENTELEMETRY_EXPORT NoopTracer final : public Tracer, { // Don't allocate a no-op span for every StartSpan call, but use a static // singleton for this case. - static nostd::shared_ptr noop_span( - new trace_api::NoopSpan{this->shared_from_this()}); + static nostd::shared_ptr noop_span(new trace::NoopSpan{this->shared_from_this()}); return noop_span; } @@ -102,24 +101,22 @@ class OPENTELEMETRY_EXPORT NoopTracer final : public Tracer, /** * No-op implementation of a TracerProvider. */ -class OPENTELEMETRY_EXPORT NoopTracerProvider final : public opentelemetry::trace::TracerProvider +class OPENTELEMETRY_EXPORT NoopTracerProvider final : public trace::TracerProvider { public: NoopTracerProvider() noexcept - : tracer_{nostd::shared_ptr( - new opentelemetry::trace::NoopTracer)} + : tracer_{nostd::shared_ptr(new trace::NoopTracer)} {} - nostd::shared_ptr GetTracer( - nostd::string_view /* library_name */, - nostd::string_view /* library_version */, - nostd::string_view /* schema_url */) noexcept override + nostd::shared_ptr GetTracer(nostd::string_view /* library_name */, + nostd::string_view /* library_version */, + nostd::string_view /* schema_url */) noexcept override { return tracer_; } private: - nostd::shared_ptr tracer_; + nostd::shared_ptr tracer_; }; } // namespace trace OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/trace/propagation/b3_propagator.h b/api/include/opentelemetry/trace/propagation/b3_propagator.h index d5661cb2a9..e52e42b747 100644 --- a/api/include/opentelemetry/trace/propagation/b3_propagator.h +++ b/api/include/opentelemetry/trace/propagation/b3_propagator.h @@ -3,13 +3,14 @@ #pragma once +#include + #include "detail/hex.h" #include "detail/string.h" #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/trace/context.h" #include "opentelemetry/trace/default_span.h" - -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace @@ -41,11 +42,11 @@ static const int kSpanIdHexStrLength = 16; // providing the object containing the headers, and a getter function for the extraction. Based on: // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/context/api-propagators.md#b3-extract -class B3PropagatorExtractor : public opentelemetry::context::propagation::TextMapPropagator +class B3PropagatorExtractor : public context::propagation::TextMapPropagator { public: // Returns the context that is stored in the HTTP header carrier. - context::Context Extract(const opentelemetry::context::propagation::TextMapCarrier &carrier, + context::Context Extract(const context::propagation::TextMapCarrier &carrier, context::Context &context) noexcept override { SpanContext span_context = ExtractImpl(carrier); @@ -77,7 +78,7 @@ class B3PropagatorExtractor : public opentelemetry::context::propagation::TextMa } private: - static SpanContext ExtractImpl(const opentelemetry::context::propagation::TextMapCarrier &carrier) + static SpanContext ExtractImpl(const context::propagation::TextMapCarrier &carrier) { nostd::string_view trace_id_hex; nostd::string_view span_id_hex; @@ -128,7 +129,7 @@ class B3Propagator : public B3PropagatorExtractor { public: // Sets the context for a HTTP header carrier with self defined rules. - void Inject(opentelemetry::context::propagation::TextMapCarrier &carrier, + void Inject(context::propagation::TextMapCarrier &carrier, const context::Context &context) noexcept override { SpanContext span_context = trace::GetSpan(context)->GetContext(); @@ -160,7 +161,7 @@ class B3Propagator : public B3PropagatorExtractor class B3PropagatorMultiHeader : public B3PropagatorExtractor { public: - void Inject(opentelemetry::context::propagation::TextMapCarrier &carrier, + void Inject(context::propagation::TextMapCarrier &carrier, const context::Context &context) noexcept override { SpanContext span_context = GetSpan(context)->GetContext(); diff --git a/api/include/opentelemetry/trace/propagation/detail/hex.h b/api/include/opentelemetry/trace/propagation/detail/hex.h index 10a17ff51b..c8bd58f8b8 100644 --- a/api/include/opentelemetry/trace/propagation/detail/hex.h +++ b/api/include/opentelemetry/trace/propagation/detail/hex.h @@ -3,11 +3,12 @@ #pragma once -#include "opentelemetry/nostd/string_view.h" - #include #include +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { diff --git a/api/include/opentelemetry/trace/propagation/detail/string.h b/api/include/opentelemetry/trace/propagation/detail/string.h index 67e934b408..de4699952f 100644 --- a/api/include/opentelemetry/trace/propagation/detail/string.h +++ b/api/include/opentelemetry/trace/propagation/detail/string.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace diff --git a/api/include/opentelemetry/trace/propagation/http_trace_context.h b/api/include/opentelemetry/trace/propagation/http_trace_context.h index 9440960be3..bba7592ea6 100644 --- a/api/include/opentelemetry/trace/propagation/http_trace_context.h +++ b/api/include/opentelemetry/trace/propagation/http_trace_context.h @@ -4,12 +4,17 @@ #pragma once #include + #include "detail/hex.h" #include "detail/string.h" #include "opentelemetry/context/propagation/text_map_propagator.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/trace/context.h" #include "opentelemetry/trace/default_span.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace @@ -30,10 +35,10 @@ static const size_t kTraceParentSize = 55; // HttpTraceContext().Inject(carrier, context); // HttpTraceContext().Extract(carrier, context); -class HttpTraceContext : public opentelemetry::context::propagation::TextMapPropagator +class HttpTraceContext : public context::propagation::TextMapPropagator { public: - void Inject(opentelemetry::context::propagation::TextMapCarrier &carrier, + void Inject(context::propagation::TextMapCarrier &carrier, const context::Context &context) noexcept override { SpanContext span_context = trace::GetSpan(context)->GetContext(); @@ -44,7 +49,7 @@ class HttpTraceContext : public opentelemetry::context::propagation::TextMapProp InjectImpl(carrier, span_context); } - context::Context Extract(const opentelemetry::context::propagation::TextMapCarrier &carrier, + context::Context Extract(const context::propagation::TextMapCarrier &carrier, context::Context &context) noexcept override { SpanContext span_context = ExtractImpl(carrier); @@ -83,7 +88,7 @@ class HttpTraceContext : public opentelemetry::context::propagation::TextMapProp return version != kInvalidVersion; } - static void InjectImpl(opentelemetry::context::propagation::TextMapCarrier &carrier, + static void InjectImpl(context::propagation::TextMapCarrier &carrier, const SpanContext &span_context) { char trace_parent[kTraceParentSize]; @@ -152,10 +157,10 @@ class HttpTraceContext : public opentelemetry::context::propagation::TextMapProp } return SpanContext(trace_id, span_id, TraceFlagsFromHex(trace_flags_hex), true, - opentelemetry::trace::TraceState::FromHeader(trace_state)); + trace::TraceState::FromHeader(trace_state)); } - static SpanContext ExtractImpl(const opentelemetry::context::propagation::TextMapCarrier &carrier) + static SpanContext ExtractImpl(const context::propagation::TextMapCarrier &carrier) { nostd::string_view trace_parent = carrier.Get(kTraceParent); nostd::string_view trace_state = carrier.Get(kTraceState); diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index aff94d4d0e..d5a52a02f6 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -9,11 +9,14 @@ #include "opentelemetry/common/spin_lock_mutex.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/noop.h" -#include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { + +class TracerProvider; + /** * Stores the singleton global TracerProvider. */ diff --git a/api/include/opentelemetry/trace/scope.h b/api/include/opentelemetry/trace/scope.h index ecceba458f..11ded4ab6c 100644 --- a/api/include/opentelemetry/trace/scope.h +++ b/api/include/opentelemetry/trace/scope.h @@ -4,12 +4,17 @@ #pragma once #include "opentelemetry/context/runtime_context.h" -#include "opentelemetry/trace/span.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/trace/span_metadata.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { + +class Span; + /** * Controls how long a span is active. * diff --git a/api/include/opentelemetry/trace/span.h b/api/include/opentelemetry/trace/span.h index 77de4050d4..ffd145a30d 100644 --- a/api/include/opentelemetry/trace/span.h +++ b/api/include/opentelemetry/trace/span.h @@ -7,11 +7,9 @@ #include "opentelemetry/common/attribute_value.h" #include "opentelemetry/common/key_value_iterable_view.h" -#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/type_traits.h" -#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/canonical_code.h" #include "opentelemetry/trace/span_context.h" #include "opentelemetry/trace/span_metadata.h" diff --git a/api/include/opentelemetry/trace/span_context.h b/api/include/opentelemetry/trace/span_context.h index e19bb99001..944bdc0221 100644 --- a/api/include/opentelemetry/trace/span_context.h +++ b/api/include/opentelemetry/trace/span_context.h @@ -3,11 +3,12 @@ #pragma once -#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/span_id.h" #include "opentelemetry/trace/trace_flags.h" #include "opentelemetry/trace/trace_id.h" #include "opentelemetry/trace/trace_state.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace @@ -29,7 +30,7 @@ class SpanContext final SpanContext(bool sampled_flag, bool is_remote) noexcept : trace_id_(), span_id_(), - trace_flags_(opentelemetry::trace::TraceFlags((uint8_t)sampled_flag)), + trace_flags_(trace::TraceFlags((uint8_t)sampled_flag)), is_remote_(is_remote), trace_state_(TraceState::GetDefault()) {} @@ -52,19 +53,16 @@ class SpanContext final bool IsValid() const noexcept { return trace_id_.IsValid() && span_id_.IsValid(); } // @returns the trace_flags associated with this span_context - const opentelemetry::trace::TraceFlags &trace_flags() const noexcept { return trace_flags_; } + const trace::TraceFlags &trace_flags() const noexcept { return trace_flags_; } // @returns the trace_id associated with this span_context - const opentelemetry::trace::TraceId &trace_id() const noexcept { return trace_id_; } + const trace::TraceId &trace_id() const noexcept { return trace_id_; } // @returns the span_id associated with this span_context - const opentelemetry::trace::SpanId &span_id() const noexcept { return span_id_; } + const trace::SpanId &span_id() const noexcept { return span_id_; } // @returns the trace_state associated with this span_context - const nostd::shared_ptr trace_state() const noexcept - { - return trace_state_; - } + const nostd::shared_ptr trace_state() const noexcept { return trace_state_; } /* * @param that SpanContext for comparing. @@ -86,11 +84,11 @@ class SpanContext final bool IsSampled() const noexcept { return trace_flags_.IsSampled(); } private: - opentelemetry::trace::TraceId trace_id_; - opentelemetry::trace::SpanId span_id_; - opentelemetry::trace::TraceFlags trace_flags_; + trace::TraceId trace_id_; + trace::SpanId span_id_; + trace::TraceFlags trace_flags_; bool is_remote_; - nostd::shared_ptr trace_state_; + nostd::shared_ptr trace_state_; }; } // namespace trace OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/trace/span_context_kv_iterable.h b/api/include/opentelemetry/trace/span_context_kv_iterable.h index 0f1ec307f1..8f3010ce9d 100644 --- a/api/include/opentelemetry/trace/span_context_kv_iterable.h +++ b/api/include/opentelemetry/trace/span_context_kv_iterable.h @@ -26,8 +26,8 @@ class SpanContextKeyValueIterable * @return true if every SpanContext/key-value pair was iterated over */ virtual bool ForEachKeyValue( - nostd::function_ref - callback) const noexcept = 0; + nostd::function_ref callback) + const noexcept = 0; /** * @return the number of key-value pairs */ @@ -40,9 +40,8 @@ class SpanContextKeyValueIterable class NullSpanContext : public SpanContextKeyValueIterable { public: - bool ForEachKeyValue( - nostd::function_ref - /* callback */) const noexcept override + bool ForEachKeyValue(nostd::function_ref + /* callback */) const noexcept override { return true; } diff --git a/api/include/opentelemetry/trace/span_context_kv_iterable_view.h b/api/include/opentelemetry/trace/span_context_kv_iterable_view.h index 252b4cf175..6a21aaf54a 100644 --- a/api/include/opentelemetry/trace/span_context_kv_iterable_view.h +++ b/api/include/opentelemetry/trace/span_context_kv_iterable_view.h @@ -8,7 +8,11 @@ #include #include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/utility.h" +#include "opentelemetry/trace/span_context.h" #include "opentelemetry/trace/span_context_kv_iterable.h" #include "opentelemetry/version.h" @@ -57,9 +61,8 @@ class SpanContextKeyValueIterableView final : public SpanContextKeyValueIterable public: explicit SpanContextKeyValueIterableView(const T &links) noexcept : container_{&links} {} - bool ForEachKeyValue( - nostd::function_ref - callback) const noexcept override + bool ForEachKeyValue(nostd::function_ref + callback) const noexcept override { auto iter = std::begin(*container_); auto last = std::end(*container_); @@ -78,11 +81,10 @@ class SpanContextKeyValueIterableView final : public SpanContextKeyValueIterable private: const T *container_; - bool do_callback( - SpanContext span_context, - const common::KeyValueIterable &attributes, - nostd::function_ref - callback) const noexcept + bool do_callback(SpanContext span_context, + const common::KeyValueIterable &attributes, + nostd::function_ref + callback) const noexcept { if (!callback(span_context, attributes)) { diff --git a/api/include/opentelemetry/trace/span_metadata.h b/api/include/opentelemetry/trace/span_metadata.h index f27239c739..5e615ea537 100644 --- a/api/include/opentelemetry/trace/span_metadata.h +++ b/api/include/opentelemetry/trace/span_metadata.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/common/timestamp.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace diff --git a/api/include/opentelemetry/trace/span_startoptions.h b/api/include/opentelemetry/trace/span_startoptions.h index 9265574a57..2180394d72 100644 --- a/api/include/opentelemetry/trace/span_startoptions.h +++ b/api/include/opentelemetry/trace/span_startoptions.h @@ -3,9 +3,12 @@ #pragma once +#include "opentelemetry/common/timestamp.h" #include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/variant.h" #include "opentelemetry/trace/span_context.h" #include "opentelemetry/trace/span_metadata.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace @@ -33,7 +36,7 @@ struct StartSpanOptions // // This defaults to an invalid span context. In this case, the Span is // automatically parented to the currently active span. - nostd::variant parent = SpanContext::GetInvalid(); + nostd::variant parent = SpanContext::GetInvalid(); // TODO: // SpanContext remote_parent; diff --git a/api/include/opentelemetry/trace/trace_flags.h b/api/include/opentelemetry/trace/trace_flags.h index 3cfbb022f4..1f7bf4f9b3 100644 --- a/api/include/opentelemetry/trace/trace_flags.h +++ b/api/include/opentelemetry/trace/trace_flags.h @@ -4,7 +4,6 @@ #pragma once #include -#include #include "opentelemetry/nostd/span.h" #include "opentelemetry/version.h" diff --git a/api/include/opentelemetry/trace/trace_state.h b/api/include/opentelemetry/trace/trace_state.h index 28fd126fea..f424b01997 100644 --- a/api/include/opentelemetry/trace/trace_state.h +++ b/api/include/opentelemetry/trace/trace_state.h @@ -4,14 +4,15 @@ #pragma once #include -#include #include #include "opentelemetry/common/kv_properties.h" +#include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/version.h" #if defined(OPENTELEMETRY_HAVE_WORKING_REGEX) # include @@ -73,7 +74,7 @@ class OPENTELEMETRY_EXPORT TraceState if (!IsValidKey(key) || !IsValidValue(value)) { // invalid header. return empty TraceState - ts->kv_properties_.reset(new opentelemetry::common::KeyValueProperties()); + ts->kv_properties_.reset(new common::KeyValueProperties()); break; } @@ -229,8 +230,8 @@ class OPENTELEMETRY_EXPORT TraceState } private: - TraceState() : kv_properties_(new opentelemetry::common::KeyValueProperties()) {} - TraceState(size_t size) : kv_properties_(new opentelemetry::common::KeyValueProperties(size)) {} + TraceState() : kv_properties_(new common::KeyValueProperties()) {} + TraceState(size_t size) : kv_properties_(new common::KeyValueProperties(size)) {} static nostd::string_view TrimString(nostd::string_view str, size_t left, size_t right) { @@ -311,7 +312,7 @@ class OPENTELEMETRY_EXPORT TraceState private: // Store entries in a C-style array to avoid using std::array or std::vector. - nostd::unique_ptr kv_properties_; + nostd::unique_ptr kv_properties_; }; } // namespace trace diff --git a/api/include/opentelemetry/trace/tracer.h b/api/include/opentelemetry/trace/tracer.h index b60336a48d..82b4d0ea02 100644 --- a/api/include/opentelemetry/trace/tracer.h +++ b/api/include/opentelemetry/trace/tracer.h @@ -3,10 +3,11 @@ #pragma once +#include + #include "opentelemetry/context/context.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" -#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/default_span.h" #include "opentelemetry/trace/scope.h" #include "opentelemetry/trace/span.h" @@ -14,8 +15,6 @@ #include "opentelemetry/trace/span_startoptions.h" #include "opentelemetry/version.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 9d3125db40..bc8ff8da89 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -5,11 +5,14 @@ #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" -#include "opentelemetry/trace/tracer.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { + +class Tracer; + /** * Creates new Tracer instances. */ diff --git a/api/include/opentelemetry/version.h b/api/include/opentelemetry/version.h index be7b677d85..2178591728 100644 --- a/api/include/opentelemetry/version.h +++ b/api/include/opentelemetry/version.h @@ -7,10 +7,10 @@ #include "opentelemetry/detail/preprocessor.h" #define OPENTELEMETRY_ABI_VERSION_NO 1 -#define OPENTELEMETRY_VERSION "1.9.0" +#define OPENTELEMETRY_VERSION "1.9.1" #define OPENTELEMETRY_VERSION_MAJOR 1 #define OPENTELEMETRY_VERSION_MINOR 9 -#define OPENTELEMETRY_VERSION_PATCH 0 +#define OPENTELEMETRY_VERSION_PATCH 1 #define OPENTELEMETRY_ABI_VERSION OPENTELEMETRY_STRINGIFY(OPENTELEMETRY_ABI_VERSION_NO) diff --git a/api/test/logs/logger_benchmark.cc b/api/test/logs/logger_benchmark.cc index 683ce1eda7..fa5ad2b0c6 100644 --- a/api/test/logs/logger_benchmark.cc +++ b/api/test/logs/logger_benchmark.cc @@ -165,7 +165,7 @@ static void BM_StructuredLogWithEventIdAndTwoAttributes(benchmark::State &state) for (int64_t i = 0; i < kMaxIterations; i++) { logger->Trace( - "This is a simple structured log message from {process_id}:{thread_id}", + 0x12345678, "This is a simple structured log message from {process_id}:{thread_id}", opentelemetry::common::MakeAttributes({{"process_id", 12347}, {"thread_id", 12348}})); } }); diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc index ccdcd990c5..789ffd1259 100644 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -202,7 +202,6 @@ class TestProvider : public LoggerProvider nostd::string_view /* library_name */, nostd::string_view /* library_version */, nostd::string_view /* schema_url */, - bool /* include_trace_context */, const common::KeyValueIterable & /* attributes */) override { return nostd::shared_ptr(new TestLogger()); diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc index 0d607f1d01..27af9b0c43 100644 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -24,7 +24,6 @@ class TestProvider : public LoggerProvider nostd::string_view /* library_name */, nostd::string_view /* library_version */, nostd::string_view /* schema_url */, - bool /* include_trace_context */, const opentelemetry::common::KeyValueIterable & /* attributes */) override { return shared_ptr(nullptr); diff --git a/api/test/plugin/dynamic_load_test.cc b/api/test/plugin/dynamic_load_test.cc index 4fdc79eee6..8e8b14800c 100644 --- a/api/test/plugin/dynamic_load_test.cc +++ b/api/test/plugin/dynamic_load_test.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/plugin/dynamic_load.h" +#include "opentelemetry/plugin/factory.h" #include diff --git a/bazel/repository.bzl b/bazel/repository.bzl index daa9dcd3eb..1cf6410488 100644 --- a/bazel/repository.bzl +++ b/bazel/repository.bzl @@ -100,10 +100,10 @@ def opentelemetry_cpp_deps(): http_archive, name = "com_github_opentelemetry_proto", build_file = "@io_opentelemetry_cpp//bazel:opentelemetry_proto.BUILD", - sha256 = "464bc2b348e674a1a03142e403cbccb01be8655b6de0f8bfe733ea31fcd421be", - strip_prefix = "opentelemetry-proto-0.19.0", + sha256 = "6ab267cf82832ed60ad075d574c78da736193eecb9693e8a8d02f65d6d3f3520", + strip_prefix = "opentelemetry-proto-0.20.0", urls = [ - "https://github.com/open-telemetry/opentelemetry-proto/archive/v0.19.0.tar.gz", + "https://github.com/open-telemetry/opentelemetry-proto/archive/v0.20.0.tar.gz", ], ) diff --git a/buildscripts/pre-commit b/buildscripts/pre-commit index eb09e01c2c..c21f363b5a 100755 --- a/buildscripts/pre-commit +++ b/buildscripts/pre-commit @@ -10,7 +10,7 @@ if [[ ! -w "$(pwd)/sdk/src/version/version.cc" && ! -w "$(pwd)/api/include/open exit 1 fi -# format: "v..-+--g"" +# format: "v..-+--g" semver_regex="^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(\\-([0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*))?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?-([0-9]+)-g([0-9|a-z]+)$" git_tag=$(git describe --tags --long 2>/dev/null) || true if [[ ! -z $git_tag ]] && [[ $git_tag =~ $semver_regex ]]; then @@ -22,7 +22,7 @@ if [[ ! -z $git_tag ]] && [[ $git_tag =~ $semver_regex ]]; then count_new_commits="${BASH_REMATCH[9]}" latest_commit_hash="${BASH_REMATCH[10]}" if [[ -z ${major} ]] || [[ -z ${minor} ]] || [[ -z ${patch} ]] || [[ -z ${count_new_commits} ]] || [[ -z ${latest_commit_hash} ]]; then - echo "Error: Incorrect tag format recevived. Exiting.." + echo "Error: Incorrect tag format received. Exiting.." exit 1 fi else @@ -38,9 +38,8 @@ if [[ -z ${latest_commit_hash} ]]; then exit 1 fi -branch="$(git rev-parse --abbrev-ref HEAD)" short_version="${major}.${minor}.${patch}" -full_version="${short_version}-${pre_release}-${build_metadata}-${count_new_commits}-${branch}-${latest_commit_hash}" +full_version="${short_version}-${pre_release}-${build_metadata}" # Update api version.h sed -i "/^\#define OPENTELEMETRY_VERSION /c\#define OPENTELEMETRY_VERSION \"${short_version}\"" "$(pwd)/api/include/opentelemetry/version.h" @@ -64,18 +63,14 @@ namespace sdk { namespace version { -const int major_version = ${major}; -const int minor_version = ${minor}; -const int patch_version = ${patch}; -const char *pre_release = "${pre_release}"; -const char *build_metadata = "${build_metadata}"; -const int count_new_commits = ${count_new_commits}; -const char *branch = "${branch}"; -const char *commit_hash = "${latest_commit_hash}"; -const char *short_version = "${short_version}"; -const char *full_version = - "${full_version}"; -const char *build_date = "$(date -u)"; +const int major_version = ${major}; +const int minor_version = ${minor}; +const int patch_version = ${patch}; +const char *pre_release = "${pre_release}"; +const char *build_metadata = "${build_metadata}"; +const char *short_version = "${short_version}"; +const char *full_version = "${full_version}"; +const char *build_date = "$(date -u)"; } // namespace version } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 64d3b72308..d504b33ae8 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -94,7 +94,6 @@ elif [[ "$1" == "cmake.maintainer.sync.test" ]]; then cd "${BUILD_DIR}" rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ - -DWITH_OTLP=ON \ -DWITH_OTLP_HTTP=ON \ -DWITH_OTLP_HTTP_SSL_PREVIEW=ON \ -DWITH_OTLP_HTTP_SSL_TLS_PREVIEW=ON \ @@ -118,7 +117,30 @@ elif [[ "$1" == "cmake.maintainer.async.test" ]]; then cd "${BUILD_DIR}" rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_HTTP=ON \ + -DWITH_OTLP_HTTP_SSL_PREVIEW=ON \ + -DWITH_OTLP_HTTP_SSL_TLS_PREVIEW=ON \ + -DWITH_PROMETHEUS=ON \ + -DWITH_EXAMPLES=ON \ + -DWITH_EXAMPLES_HTTP=ON \ + -DWITH_ZIPKIN=ON \ + -DWITH_JAEGER=OFF \ + -DBUILD_W3CTRACECONTEXT_TEST=ON \ + -DWITH_ELASTICSEARCH=ON \ + -DWITH_LOGS_PREVIEW=ON \ + -DWITH_METRICS_EXEMPLAR_PREVIEW=ON \ + -DWITH_ASYNC_EXPORT_PREVIEW=ON \ + -DOTELCPP_MAINTAINER_MODE=ON \ + -DWITH_NO_DEPRECATED_CODE=ON \ + "${SRC_DIR}" + make -k -j $(nproc) + make test + exit 0 +elif [[ "$1" == "cmake.maintainer.cpp11.async.test" ]]; then + cd "${BUILD_DIR}" + rm -rf * + cmake -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_CXX_STANDARD=11 \ -DWITH_OTLP_HTTP=ON \ -DWITH_OTLP_HTTP_SSL_PREVIEW=ON \ -DWITH_OTLP_HTTP_SSL_TLS_PREVIEW=ON \ @@ -220,7 +242,7 @@ elif [[ "$1" == "cmake.legacy.exporter.otprotocol.test" ]]; then ${SRC_DIR}/tools/build-benchmark.sh cmake -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_STANDARD=11 \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ -DWITH_OTLP_HTTP=ON \ -DWITH_ASYNC_EXPORT_PREVIEW=ON \ "${SRC_DIR}" @@ -234,7 +256,7 @@ elif [[ "$1" == "cmake.exporter.otprotocol.test" ]]; then cd "${BUILD_DIR}" rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ -DWITH_OTLP_HTTP=ON \ "${SRC_DIR}" grpc_cpp_plugin=`which grpc_cpp_plugin` @@ -247,7 +269,7 @@ elif [[ "$1" == "cmake.exporter.otprotocol.shared_libs.with_static_grpc.test" ]] cd "${BUILD_DIR}" rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ -DWITH_OTLP_HTTP=ON \ -DBUILD_SHARED_LIBS=ON \ "${SRC_DIR}" @@ -261,7 +283,7 @@ elif [[ "$1" == "cmake.exporter.otprotocol.with_async_export.test" ]]; then cd "${BUILD_DIR}" rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ -DWITH_OTLP_HTTP=ON \ -DWITH_ASYNC_EXPORT_PREVIEW=ON \ "${SRC_DIR}" @@ -275,7 +297,7 @@ elif [[ "$1" == "cmake.do_not_install.test" ]]; then cd "${BUILD_DIR}" rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ -DWITH_OTLP_HTTP=ON \ -DWITH_ASYNC_EXPORT_PREVIEW=ON \ -DOPENTELEMETRY_INSTALL=OFF \ diff --git a/cmake/nlohmann-json.cmake b/cmake/nlohmann-json.cmake index 84f107b97c..d56a6cbb6d 100644 --- a/cmake/nlohmann-json.cmake +++ b/cmake/nlohmann-json.cmake @@ -33,6 +33,8 @@ find_package(nlohmann_json QUIET) set(nlohmann_json_clone FALSE) if(nlohmann_json_FOUND) message(STATUS "nlohmann::json dependency satisfied by: package") +elseif(TARGET nlohmann_json) + message(STATUS "nlohmann::json is already added as a CMake target!") elseif(EXISTS ${PROJECT_SOURCE_DIR}/.git AND EXISTS ${PROJECT_SOURCE_DIR}/third_party/nlohmann-json/CMakeLists.txt) diff --git a/cmake/opentelemetry-proto.cmake b/cmake/opentelemetry-proto.cmake index 1aa1ba0349..c3ea5a65ce 100644 --- a/cmake/opentelemetry-proto.cmake +++ b/cmake/opentelemetry-proto.cmake @@ -43,7 +43,7 @@ else() message( STATUS "opentelemetry-proto dependency satisfied by: github download") if("${opentelemetry-proto}" STREQUAL "") - set(opentelemetry-proto "v0.19.0") + set(opentelemetry-proto "v0.20.0") endif() include(ExternalProject) ExternalProject_Add( @@ -229,31 +229,47 @@ endif() include_directories("${GENERATED_PROTOBUF_PATH}") -if(WITH_OTLP_GRPC) - add_library( - opentelemetry_proto STATIC - ${COMMON_PB_CPP_FILE} - ${RESOURCE_PB_CPP_FILE} - ${TRACE_PB_CPP_FILE} - ${LOGS_PB_CPP_FILE} - ${METRICS_PB_CPP_FILE} - ${TRACE_SERVICE_PB_CPP_FILE} - ${TRACE_SERVICE_GRPC_PB_CPP_FILE} - ${LOGS_SERVICE_PB_CPP_FILE} - ${LOGS_SERVICE_GRPC_PB_CPP_FILE} - ${METRICS_SERVICE_PB_CPP_FILE} - ${METRICS_SERVICE_GRPC_PB_CPP_FILE}) +unset(OTELCPP_PROTO_TARGET_OPTIONS) +if(CMAKE_SYSTEM_NAME MATCHES "Windows|MinGW|WindowsStore") + list(APPEND OTELCPP_PROTO_TARGET_OPTIONS STATIC) +elseif(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) + list(APPEND OTELCPP_PROTO_TARGET_OPTIONS SHARED) else() + list(APPEND OTELCPP_PROTO_TARGET_OPTIONS STATIC) +endif() + +set(OPENTELEMETRY_PROTO_TARGETS opentelemetry_proto) +add_library( + opentelemetry_proto + ${OTELCPP_PROTO_TARGET_OPTIONS} + ${COMMON_PB_CPP_FILE} + ${RESOURCE_PB_CPP_FILE} + ${TRACE_PB_CPP_FILE} + ${LOGS_PB_CPP_FILE} + ${METRICS_PB_CPP_FILE} + ${TRACE_SERVICE_PB_CPP_FILE} + ${LOGS_SERVICE_PB_CPP_FILE} + ${METRICS_SERVICE_PB_CPP_FILE}) + +if(WITH_OTLP_GRPC) add_library( - opentelemetry_proto STATIC - ${COMMON_PB_CPP_FILE} - ${RESOURCE_PB_CPP_FILE} - ${TRACE_PB_CPP_FILE} - ${LOGS_PB_CPP_FILE} - ${METRICS_PB_CPP_FILE} - ${TRACE_SERVICE_PB_CPP_FILE} - ${LOGS_SERVICE_PB_CPP_FILE} - ${METRICS_SERVICE_PB_CPP_FILE}) + opentelemetry_proto_grpc + ${OTELCPP_PROTO_TARGET_OPTIONS} ${TRACE_SERVICE_GRPC_PB_CPP_FILE} + ${LOGS_SERVICE_GRPC_PB_CPP_FILE} ${METRICS_SERVICE_GRPC_PB_CPP_FILE}) + + list(APPEND OPENTELEMETRY_PROTO_TARGETS opentelemetry_proto_grpc) + target_link_libraries(opentelemetry_proto_grpc PUBLIC opentelemetry_proto) + + set_target_properties(opentelemetry_proto_grpc PROPERTIES EXPORT_NAME + proto_grpc) + patch_protobuf_targets(opentelemetry_proto_grpc) + get_target_property(GRPC_INCLUDE_DIRECTORY gRPC::grpc++ + INTERFACE_INCLUDE_DIRECTORIES) + if(GRPC_INCLUDE_DIRECTORY) + target_include_directories( + opentelemetry_proto_grpc + PUBLIC "$") + endif() endif() if(needs_proto_download) @@ -264,7 +280,7 @@ patch_protobuf_targets(opentelemetry_proto) if(OPENTELEMETRY_INSTALL) install( - TARGETS opentelemetry_proto + TARGETS ${OPENTELEMETRY_PROTO_TARGETS} EXPORT "${PROJECT_NAME}-target" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -282,9 +298,21 @@ if(TARGET protobuf::libprotobuf) else() # cmake 3.8 or lower target_include_directories(opentelemetry_proto PUBLIC ${Protobuf_INCLUDE_DIRS}) - target_link_libraries(opentelemetry_proto INTERFACE ${Protobuf_LIBRARIES}) + target_link_libraries(opentelemetry_proto PUBLIC ${Protobuf_LIBRARIES}) +endif() + +if(WITH_OTLP_GRPC) + if(WITH_ABSEIL) + find_package(absl CONFIG) + if(TARGET absl::synchronization) + target_link_libraries(opentelemetry_proto_grpc + PRIVATE absl::synchronization) + endif() + endif() endif() if(BUILD_SHARED_LIBS) - set_property(TARGET opentelemetry_proto PROPERTY POSITION_INDEPENDENT_CODE ON) + foreach(proto_target ${OPENTELEMETRY_PROTO_TARGETS}) + set_property(TARGET ${proto_target} PROPERTY POSITION_INDEPENDENT_CODE ON) + endforeach() endif() diff --git a/docker/Dockerfile b/docker/Dockerfile index 412f997747..75360e6cbb 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -28,8 +28,8 @@ RUN git clone --recurse-submodules -j ${CORES} --depth=1 \ -DWITH_JAEGER=ON \ -DCMAKE_INSTALL_PREFIX=/opt/third_party/install \ -DBUILD_TESTING=OFF \ - -DWITH_OTLP=ON \ -DWITH_OTLP_GRPC=ON \ + -DWITH_OTLP_HTTP=ON \ -DBUILD_SHARED_LIBS=ON \ .. \ && cmake --build . -j ${CORES} --target install diff --git a/docker/Dockerfile.centos b/docker/Dockerfile.centos index c95595691b..25a6f2442f 100644 --- a/docker/Dockerfile.centos +++ b/docker/Dockerfile.centos @@ -80,6 +80,7 @@ RUN git clone --depth=1 https://github.com/open-telemetry/opentelemetry-cpp.git -DWITH_ZIPKIN=ON \ -DWITH_JAEGER=ON \ -DBUILD_TESTING=OFF \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ + -DWITH_OTLP_HTTP=ON \ .. \ && make -j${nproc} install && ldconfig diff --git a/docker/ubuntuLatest/Dockerfile b/docker/ubuntuLatest/Dockerfile index 5e13a7d3b8..aec2296401 100644 --- a/docker/ubuntuLatest/Dockerfile +++ b/docker/ubuntuLatest/Dockerfile @@ -59,7 +59,8 @@ RUN apt-get install -y --no-install-recommends libcurl4-openssl-dev && git clone -DWITH_ZIPKIN=ON \ -DWITH_JAEGER=ON \ -DBUILD_TESTING=OFF \ - -DWITH_OTLP=ON \ + -DWITH_OTLP_GRPC=ON \ + -DWITH_OTLP_HTTP=ON \ .. && \ make -j${nproc} install && ldconfig && \ cd ../.. diff --git a/docs/public/conf.py b/docs/public/conf.py index 5a1390fe99..53ec43b82a 100644 --- a/docs/public/conf.py +++ b/docs/public/conf.py @@ -24,7 +24,7 @@ author = 'OpenTelemetry authors' # The full version, including alpha/beta/rc tags -release = "1.9.0" +release = "1.9.1" # Run sphinx on subprojects and copy output # ----------------------------------------- diff --git a/examples/batch/main.cc b/examples/batch/main.cc index a417933247..0e05c1b700 100644 --- a/examples/batch/main.cc +++ b/examples/batch/main.cc @@ -2,7 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/ostream/span_exporter_factory.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/trace/batch_span_processor_factory.h" +#include "opentelemetry/sdk/trace/batch_span_processor_options.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/grpc/tracer_common.h b/examples/grpc/tracer_common.h index 073bffd50a..347e7a8184 100644 --- a/examples/grpc/tracer_common.h +++ b/examples/grpc/tracer_common.h @@ -7,7 +7,10 @@ #include "opentelemetry/context/propagation/text_map_propagator.h" #include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" +#include "opentelemetry/sdk/trace/tracer_context.h" #include "opentelemetry/sdk/trace/tracer_context_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/propagation/http_trace_context.h" diff --git a/examples/http/tracer_common.h b/examples/http/tracer_common.h index 0b74d2ff8e..7d9f1ca571 100644 --- a/examples/http/tracer_common.h +++ b/examples/http/tracer_common.h @@ -4,7 +4,10 @@ #pragma once #include "opentelemetry/exporters/ostream/span_exporter_factory.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" +#include "opentelemetry/sdk/trace/tracer_context.h" #include "opentelemetry/sdk/trace/tracer_context_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/jaeger/main.cc b/examples/jaeger/main.cc index faa9758f02..a5b3c38c35 100644 --- a/examples/jaeger/main.cc +++ b/examples/jaeger/main.cc @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/jaeger/jaeger_exporter_factory.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/logs_simple/main.cc b/examples/logs_simple/main.cc index f4bcecbb39..c12733d4c3 100644 --- a/examples/logs_simple/main.cc +++ b/examples/logs_simple/main.cc @@ -3,6 +3,8 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/exporters/ostream/span_exporter_factory.h" +# include "opentelemetry/sdk/trace/exporter.h" +# include "opentelemetry/sdk/trace/processor.h" # include "opentelemetry/sdk/trace/simple_processor_factory.h" # include "opentelemetry/sdk/trace/tracer_provider_factory.h" # include "opentelemetry/trace/provider.h" @@ -10,6 +12,7 @@ # include "opentelemetry/exporters/ostream/log_record_exporter.h" # include "opentelemetry/logs/provider.h" # include "opentelemetry/sdk/logs/logger_provider_factory.h" +# include "opentelemetry/sdk/logs/processor.h" # include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" # ifdef BAZEL_BUILD diff --git a/examples/multithreaded/main.cc b/examples/multithreaded/main.cc index 49eaf4d16d..6071e2597a 100644 --- a/examples/multithreaded/main.cc +++ b/examples/multithreaded/main.cc @@ -3,6 +3,8 @@ #include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/sdk/resource/resource.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/otlp/grpc_log_main.cc b/examples/otlp/grpc_log_main.cc index e0c85c38c2..f6f6685922 100644 --- a/examples/otlp/grpc_log_main.cc +++ b/examples/otlp/grpc_log_main.cc @@ -5,8 +5,12 @@ # include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" # include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h" # include "opentelemetry/logs/provider.h" +# include "opentelemetry/sdk/logs/exporter.h" # include "opentelemetry/sdk/logs/logger_provider_factory.h" +# include "opentelemetry/sdk/logs/processor.h" # include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" +# include "opentelemetry/sdk/trace/exporter.h" +# include "opentelemetry/sdk/trace/processor.h" # include "opentelemetry/sdk/trace/simple_processor_factory.h" # include "opentelemetry/sdk/trace/tracer_provider_factory.h" # include "opentelemetry/trace/provider.h" diff --git a/examples/otlp/grpc_main.cc b/examples/otlp/grpc_main.cc index d7e3b29d6c..c238d9ad2a 100644 --- a/examples/otlp/grpc_main.cc +++ b/examples/otlp/grpc_main.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/otlp/http_log_main.cc b/examples/otlp/http_log_main.cc index a1171b04e0..5a5eeb599a 100644 --- a/examples/otlp/http_log_main.cc +++ b/examples/otlp/http_log_main.cc @@ -8,7 +8,9 @@ # include "opentelemetry/logs/provider.h" # include "opentelemetry/sdk/common/global_log_handler.h" # include "opentelemetry/sdk/logs/logger_provider_factory.h" +# include "opentelemetry/sdk/logs/processor.h" # include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" +# include "opentelemetry/sdk/trace/processor.h" # include "opentelemetry/sdk/trace/simple_processor_factory.h" # include "opentelemetry/sdk/trace/tracer_provider_factory.h" # include "opentelemetry/trace/provider.h" diff --git a/examples/otlp/http_main.cc b/examples/otlp/http_main.cc index 09b8daeee2..6a0667b918 100644 --- a/examples/otlp/http_main.cc +++ b/examples/otlp/http_main.cc @@ -4,6 +4,7 @@ #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/simple/main.cc b/examples/simple/main.cc index 6a8b28e4dd..48768b6448 100644 --- a/examples/simple/main.cc +++ b/examples/simple/main.cc @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/ostream/span_exporter_factory.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/examples/zipkin/main.cc b/examples/zipkin/main.cc index 6788d8cabe..0052cd430e 100644 --- a/examples/zipkin/main.cc +++ b/examples/zipkin/main.cc @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/zipkin/zipkin_exporter_factory.h" +#include "opentelemetry/sdk/resource/resource.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" diff --git a/exporters/CMakeLists.txt b/exporters/CMakeLists.txt index f852f420f5..d980fbd838 100644 --- a/exporters/CMakeLists.txt +++ b/exporters/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -if(WITH_OTLP) +if(WITH_OTLP_GRPC OR WITH_OTLP_HTTP) add_subdirectory(otlp) endif() diff --git a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h index d6ed78d117..c5be2a2cd8 100644 --- a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h +++ b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h @@ -72,6 +72,16 @@ class ElasticSearchRecordable final : public sdk::logs::Recordable */ void SetBody(const opentelemetry::common::AttributeValue &message) noexcept override; + /** + * Set the Event Id + * @param id the event id to set + * @param name the event name to set + */ + void SetEventId(int64_t /* id */, nostd::string_view /* name */) noexcept override + { + // TODO: implement event id + } + /** * Set the trace id for this log. * @param trace_id the trace id to set diff --git a/exporters/elasticsearch/src/es_log_recordable.cc b/exporters/elasticsearch/src/es_log_recordable.cc index 03c6c640e5..e3f60be0a9 100644 --- a/exporters/elasticsearch/src/es_log_recordable.cc +++ b/exporters/elasticsearch/src/es_log_recordable.cc @@ -4,6 +4,12 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/exporters/elasticsearch/es_log_recordable.h" +# include "opentelemetry/logs/severity.h" +# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +# include "opentelemetry/sdk/resource/resource.h" +# include "opentelemetry/trace/span_id.h" +# include "opentelemetry/trace/trace_flags.h" +# include "opentelemetry/trace/trace_id.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h index ccf332b599..8040032597 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -359,13 +359,11 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider nostd::string_view library_name, nostd::string_view version = "", nostd::string_view schema_url = "", - bool include_trace_context = true, const common::KeyValueIterable &attributes = common::NoopKeyValueIterable()) override { UNREFERENCED_PARAMETER(library_name); UNREFERENCED_PARAMETER(version); UNREFERENCED_PARAMETER(schema_url); - UNREFERENCED_PARAMETER(include_trace_context); UNREFERENCED_PARAMETER(attributes); ETWProvider::EventFormat evtFmt = config_.encoding; return nostd::shared_ptr{ diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h index 039351f66e..6601f850df 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h @@ -32,6 +32,7 @@ #include "opentelemetry/trace/trace_id.h" #include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/sdk/common/empty_attributes.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/samplers/always_on.h" diff --git a/exporters/jaeger/src/recordable.cc b/exporters/jaeger/src/recordable.cc index d147d96553..1fd7e99dff 100644 --- a/exporters/jaeger/src/recordable.cc +++ b/exporters/jaeger/src/recordable.cc @@ -3,6 +3,7 @@ #include "opentelemetry/exporters/jaeger/recordable.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/resource/semantic_conventions.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/exporters/jaeger/test/jaeger_exporter_test.cc b/exporters/jaeger/test/jaeger_exporter_test.cc index 7f86f877bc..ea305267c5 100644 --- a/exporters/jaeger/test/jaeger_exporter_test.cc +++ b/exporters/jaeger/test/jaeger_exporter_test.cc @@ -1,11 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include -#include -#include +#include "opentelemetry/exporters/jaeger/jaeger_exporter.h" #include "opentelemetry/sdk/trace/batch_span_processor.h" +#include "opentelemetry/sdk/trace/batch_span_processor_options.h" +#include "opentelemetry/sdk/trace/tracer.h" #include "opentelemetry/sdk/trace/tracer_provider.h" +#include "opentelemetry/trace/span_startoptions.h" #ifdef BAZEL_BUILD # include "exporters/jaeger/src/thrift_sender.h" @@ -16,6 +17,9 @@ #include #include "gmock/gmock.h" +#include +#include + namespace trace = opentelemetry::trace; namespace nostd = opentelemetry::nostd; namespace sdktrace = opentelemetry::sdk::trace; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/log_record_exporter.h b/exporters/ostream/include/opentelemetry/exporters/ostream/log_record_exporter.h index 34806bd200..54dae898d2 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/log_record_exporter.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/log_record_exporter.h @@ -4,14 +4,17 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW +# include "opentelemetry/common/attribute_value.h" # include "opentelemetry/common/spin_lock_mutex.h" # include "opentelemetry/nostd/type_traits.h" +# include "opentelemetry/sdk/common/attribute_utils.h" # include "opentelemetry/sdk/logs/exporter.h" # include "opentelemetry/version.h" # include # include +# include OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h b/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h index 36e5917457..92419fdea0 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h @@ -5,13 +5,23 @@ #include #include + #include "opentelemetry/common/spin_lock_mutex.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" +#include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/push_metric_exporter.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace resource +{ +class Resource; +} // namespace resource +} // namespace sdk + namespace exporter { namespace metrics diff --git a/exporters/ostream/src/log_record_exporter.cc b/exporters/ostream/src/log_record_exporter.cc index 751de71e2c..611a749184 100644 --- a/exporters/ostream/src/log_record_exporter.cc +++ b/exporters/ostream/src/log_record_exporter.cc @@ -4,7 +4,9 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/exporters/ostream/log_record_exporter.h" # include "opentelemetry/exporters/ostream/common_utils.h" +# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" # include "opentelemetry/sdk/logs/read_write_log_record.h" +# include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/sdk_config.h" # include @@ -52,6 +54,8 @@ sdk::common::ExportResult OStreamLogRecordExporter::Export( continue; } + int64_t event_id = log_record->GetEventId(); + // Convert trace, spanid, traceflags into exportable representation constexpr int trace_id_len = 32; constexpr int span_id__len = 16; @@ -96,6 +100,8 @@ sdk::common::ExportResult OStreamLogRecordExporter::Export( printAttributes(log_record->GetAttributes(), "\n "); sout_ << "\n" + << " event_id : " << event_id << "\n" + << " event_name : " << log_record->GetEventName() << "\n" << " trace_id : " << std::string(trace_id, trace_id_len) << "\n" << " span_id : " << std::string(span_id, span_id__len) << "\n" << " trace_flags : " << std::string(trace_flags, trace_flags_len) << "\n" diff --git a/exporters/ostream/src/metric_exporter.cc b/exporters/ostream/src/metric_exporter.cc index 21ecd0109a..003aaa075f 100644 --- a/exporters/ostream/src/metric_exporter.cc +++ b/exporters/ostream/src/metric_exporter.cc @@ -2,14 +2,19 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/ostream/metric_exporter.h" -#include -#include -#include #include "opentelemetry/exporters/ostream/common_utils.h" +#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk_config.h" +#include +#include +#include +#include +#include + namespace { std::string timeToString(opentelemetry::common::SystemTimestamp time_stamp) diff --git a/exporters/ostream/test/ostream_log_test.cc b/exporters/ostream/test/ostream_log_test.cc index 95cdb69380..92ff3ece76 100644 --- a/exporters/ostream/test/ostream_log_test.cc +++ b/exporters/ostream/test/ostream_log_test.cc @@ -3,15 +3,18 @@ #ifdef ENABLE_LOGS_PREVIEW -# include # include "opentelemetry/exporters/ostream/log_record_exporter.h" # include "opentelemetry/logs/provider.h" # include "opentelemetry/nostd/span.h" +# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" # include "opentelemetry/sdk/logs/logger_provider.h" # include "opentelemetry/sdk/logs/read_write_log_record.h" # include "opentelemetry/sdk/logs/simple_log_record_processor.h" +# include "opentelemetry/sdk/version/version.h" # include + +# include # include namespace sdklogs = opentelemetry::sdk::logs; @@ -20,6 +23,8 @@ namespace nostd = opentelemetry::nostd; namespace exporterlogs = opentelemetry::exporter::logs; namespace common = opentelemetry::common; +using Attributes = std::initializer_list>; + OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter { @@ -103,6 +108,8 @@ TEST(OstreamLogExporter, DefaultLogRecordToCout) " telemetry.sdk.name: opentelemetry\n", " telemetry.sdk.language: cpp\n", " attributes : \n", + " event_id : 0\n" + " event_name : \n", " trace_id : 00000000000000000000000000000000\n", " span_id : 0000000000000000\n", " trace_flags : 00\n", @@ -176,6 +183,8 @@ TEST(OStreamLogRecordExporter, SimpleLogToCout) " telemetry.sdk.name: opentelemetry\n", " telemetry.sdk.language: cpp\n", " attributes : \n", + " event_id : 0\n" + " event_name : \n", " trace_id : 00000000000000000000000000000000\n", " span_id : 0000000000000000\n", " trace_flags : 00\n", @@ -248,6 +257,8 @@ TEST(OStreamLogRecordExporter, LogWithStringAttributesToCerr) " key1: val1\n", " attributes : \n", " a: 1\n", + " event_id : 0\n" + " event_name : \n", " trace_id : 00000000000000000000000000000000\n", " span_id : 0000000000000000\n", " trace_flags : 00\n", @@ -327,6 +338,8 @@ TEST(OStreamLogRecordExporter, LogWithVariantTypesToClog) " res1: [1,2,3]\n", " attributes : \n", " attr1: [0,1,0]\n", + " event_id : 0\n" + " event_name : \n", " trace_id : 00000000000000000000000000000000\n", " span_id : 0000000000000000\n", " trace_flags : 00\n", @@ -367,7 +380,7 @@ TEST(OStreamLogRecordExporter, IntegrationTest) logs_api::Provider::SetLoggerProvider(provider); const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"}; auto logger = logs_api::Provider::GetLoggerProvider()->GetLogger( - "Logger", "opentelelemtry_library", OPENTELEMETRY_SDK_VERSION, schema_url, true, + "Logger", "opentelelemtry_library", OPENTELEMETRY_SDK_VERSION, schema_url, {{"scope.attr.key", 123}}); // Back up cout's streambuf @@ -398,6 +411,79 @@ TEST(OStreamLogRecordExporter, IntegrationTest) " telemetry.sdk.name: opentelemetry\n", " telemetry.sdk.language: cpp\n", " attributes : \n", + " event_id : 0\n" + " event_name : \n", + " trace_id : 00000000000000000000000000000000\n", + " span_id : 0000000000000000\n", + " trace_flags : 00\n", + " scope : \n", + " name : opentelelemtry_library\n", + " version : " OPENTELEMETRY_SDK_VERSION "\n", + " schema_url : https://opentelemetry.io/schemas/1.11.0\n", + " attributes : \n", + " scope.attr.key: 123\n", + "}\n"}; + + std::string ostream_output = stdcoutOutput.str(); + for (auto &expected : expected_output) + { + std::string::size_type result = ostream_output.find(expected); + if (result == std::string::npos) + { + std::cout << "Can not find: \"" << expected << "\" in\n" << ostream_output << std::endl; + } + ASSERT_NE(result, std::string::npos); + } +} + +// Test using the simple log processor and ostream exporter to cout +// and use the rest of the logging pipeline (Logger, LoggerProvider, Provider) and user-facing API +// as well +TEST(OStreamLogRecordExporter, IntegrationTestWithEventId) +{ + // Initialize a logger + auto exporter = + std::unique_ptr(new exporterlogs::OStreamLogRecordExporter); + auto sdkProvider = std::shared_ptr(new sdklogs::LoggerProvider()); + sdkProvider->AddProcessor(std::unique_ptr( + new sdklogs::SimpleLogRecordProcessor(std::move(exporter)))); + auto apiProvider = nostd::shared_ptr(sdkProvider); + auto provider = nostd::shared_ptr(apiProvider); + logs_api::Provider::SetLoggerProvider(provider); + const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"}; + auto logger = logs_api::Provider::GetLoggerProvider()->GetLogger( + "Logger", "opentelelemtry_library", OPENTELEMETRY_SDK_VERSION, schema_url, + {{"scope.attr.key", 123}}); + + // Back up cout's streambuf + std::streambuf *original = std::cout.rdbuf(); + + // Redirect cout to our string stream + std::stringstream stdcoutOutput; + std::cout.rdbuf(stdcoutOutput.rdbuf()); + + logs_api::EventId event_id{12345678, "test_event_id"}; + + // Write a log to ostream exporter + logger->Debug(event_id, "Hello {key1} {key2}", + common::MakeKeyValueIterableView({{"key1", 123}, {"key2", "value2"}})); + + // Restore cout's original streambuf + std::cout.rdbuf(original); + + // Compare actual vs expected outputs + std::vector expected_output{ + " severity_num : 5\n" + " severity_text : DEBUG\n" + " body : Hello {key1} {key2}\n", + " resource : \n", + " telemetry.sdk.version: " OPENTELEMETRY_VERSION "\n", + " service.name: unknown_service\n", + " telemetry.sdk.name: opentelemetry\n", + " telemetry.sdk.language: cpp\n", + " attributes : \n", + " event_id : 12345678\n" + " event_name : test_event_id\n", " trace_id : 00000000000000000000000000000000\n", " span_id : 0000000000000000\n", " trace_flags : 00\n", diff --git a/exporters/ostream/test/ostream_metric_test.cc b/exporters/ostream/test/ostream_metric_test.cc index cb4a8a3ab4..17fbcb5880 100644 --- a/exporters/ostream/test/ostream_metric_test.cc +++ b/exporters/ostream/test/ostream_metric_test.cc @@ -2,18 +2,20 @@ // SPDX-License-Identifier: Apache-2.0 #include -#include -#include -#include "opentelemetry/sdk/metrics/instruments.h" -#include "opentelemetry/sdk/resource/resource_detector.h" -#include "opentelemetry/sdk/version/version.h" -#include #include "opentelemetry/exporters/ostream/metric_exporter.h" +#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" +#include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/resource/resource.h" +#include "opentelemetry/sdk/resource/resource_detector.h" +#include "opentelemetry/sdk/version/version.h" + +#include +#include +#include namespace metric_sdk = opentelemetry::sdk::metrics; namespace nostd = opentelemetry::nostd; diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 8ab053c9cc..e05b0e24f4 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -16,9 +16,6 @@ target_include_directories( "$") set(OPENTELEMETRY_OTLP_TARGETS opentelemetry_otlp_recordable) -target_link_libraries( - opentelemetry_otlp_recordable - PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) if(WITH_LOGS_PREVIEW) target_link_libraries(opentelemetry_otlp_recordable PUBLIC opentelemetry_logs) @@ -34,12 +31,18 @@ if(WITH_OTLP_GRPC) PROPERTIES EXPORT_NAME otlp_grpc_client) set_target_version(opentelemetry_exporter_otlp_grpc_client) + # Because opentelemetry_proto_grpc depends on gRPC, and gRPC can only be + # linked in one dynamic library or executable (otherwise, there may be + # conflicts with some global variables in certain versions of gRPC), we have + # switched the link for opentelemetry_exporter_otlp_grpc_client into all + # targets that depend on opentelemetry_proto_grpc. target_link_libraries( opentelemetry_exporter_otlp_grpc_client - PUBLIC opentelemetry_sdk opentelemetry_ext opentelemetry_proto) + PUBLIC opentelemetry_sdk opentelemetry_common opentelemetry_ext + # gRPC::grpc++ must be linked before opentelemetry_proto_grpc. + opentelemetry_proto_grpc + PRIVATE gRPC::grpc++) - target_link_libraries(opentelemetry_exporter_otlp_grpc_client - PRIVATE gRPC::grpc++) get_target_property(GRPC_INCLUDE_DIRECTORY gRPC::grpc++ INTERFACE_INCLUDE_DIRECTORIES) if(GRPC_INCLUDE_DIRECTORY) @@ -110,8 +113,9 @@ if(WITH_OTLP_HTTP) target_link_libraries( opentelemetry_exporter_otlp_http_client - PUBLIC opentelemetry_sdk opentelemetry_proto opentelemetry_http_client_curl - nlohmann_json::nlohmann_json) + PUBLIC opentelemetry_sdk opentelemetry_ext + PRIVATE opentelemetry_proto opentelemetry_http_client_curl + nlohmann_json::nlohmann_json) if(nlohmann_json_clone) add_dependencies(opentelemetry_exporter_otlp_http_client nlohmann_json::nlohmann_json) @@ -173,6 +177,10 @@ if(WITH_OTLP_HTTP) opentelemetry_exporter_otlp_http_metric) endif() +target_link_libraries( + opentelemetry_otlp_recordable + PUBLIC opentelemetry_trace opentelemetry_resources opentelemetry_proto) + if(OPENTELEMETRY_INSTALL) install( TARGETS ${OPENTELEMETRY_OTLP_TARGETS} @@ -190,8 +198,9 @@ endif() if(BUILD_TESTING) add_executable(otlp_recordable_test test/otlp_recordable_test.cc) - target_link_libraries(otlp_recordable_test ${GTEST_BOTH_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} opentelemetry_otlp_recordable) + target_link_libraries( + otlp_recordable_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} + opentelemetry_otlp_recordable protobuf::libprotobuf) gtest_add_tests( TARGET otlp_recordable_test TEST_PREFIX exporter.otlp. @@ -210,8 +219,10 @@ if(BUILD_TESTING) add_executable(otlp_metrics_serialization_test test/otlp_metrics_serialization_test.cc) - target_link_libraries(otlp_metrics_serialization_test ${GTEST_BOTH_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} opentelemetry_otlp_recordable) + target_link_libraries( + otlp_metrics_serialization_test ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} opentelemetry_otlp_recordable + protobuf::libprotobuf) gtest_add_tests( TARGET otlp_metrics_serialization_test TEST_PREFIX exporter.otlp. @@ -300,9 +311,14 @@ if(BUILD_TESTING) if(WITH_OTLP_HTTP) add_executable(otlp_http_exporter_test test/otlp_http_exporter_test.cc) target_link_libraries( - otlp_http_exporter_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} - ${GMOCK_LIB} opentelemetry_exporter_otlp_http - opentelemetry_http_client_nosend) + otlp_http_exporter_test + ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + ${GMOCK_LIB} + opentelemetry_exporter_otlp_http + opentelemetry_http_client_nosend + nlohmann_json::nlohmann_json + protobuf::libprotobuf) gtest_add_tests( TARGET otlp_http_exporter_test TEST_PREFIX exporter.otlp. @@ -355,7 +371,9 @@ if(BUILD_TESTING) ${GMOCK_LIB} opentelemetry_exporter_otlp_http_metric opentelemetry_metrics - opentelemetry_http_client_nosend) + opentelemetry_http_client_nosend + nlohmann_json::nlohmann_json + protobuf::libprotobuf) gtest_add_tests( TARGET otlp_http_metric_exporter_test TEST_PREFIX exporter.otlp. diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h index 69bc8ca78d..11bb64c24f 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h @@ -5,10 +5,10 @@ // clang-format off -# include "opentelemetry/exporters/otlp/protobuf_include_prefix.h" -# include "opentelemetry/proto/collector/metrics/v1/metrics_service.grpc.pb.h" -# include "opentelemetry/common/spin_lock_mutex.h" -# include "opentelemetry/exporters/otlp/protobuf_include_suffix.h" +#include "opentelemetry/exporters/otlp/protobuf_include_prefix.h" +#include "opentelemetry/proto/collector/metrics/v1/metrics_service.grpc.pb.h" +#include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/exporters/otlp/protobuf_include_suffix.h" // clang-format on diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h index d09d7f525c..0aebf79760 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h @@ -8,7 +8,6 @@ #include "opentelemetry/exporters/otlp/otlp_environment.h" #include "opentelemetry/exporters/otlp/otlp_http_client.h" #include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" -#include "opentelemetry/exporters/otlp/otlp_metric_utils.h" #include #include diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h index cef1b3ef8f..0648fe3308 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h @@ -67,6 +67,16 @@ class OtlpLogRecordable final : public opentelemetry::sdk::logs::Recordable */ void SetBody(const opentelemetry::common::AttributeValue &message) noexcept override; + /** + * @brief Set the Event Id for this log. + * @param id the event Id to set + * @param name the event name to set + */ + void SetEventId(int64_t /* id */, nostd::string_view /* name */) noexcept override + { + // TODO: export Event Id to OTLP + } + /** * Set the trace id for this log. * @param trace_id the trace id to set diff --git a/exporters/otlp/src/otlp_http_client.cc b/exporters/otlp/src/otlp_http_client.cc index 5cbc65952c..44c154f725 100644 --- a/exporters/otlp/src/otlp_http_client.cc +++ b/exporters/otlp/src/otlp_http_client.cc @@ -451,7 +451,7 @@ static void ConvertGenericMessageToJson(nlohmann::json &value, { const google::protobuf::FieldDescriptor *field_descriptor = fields_with_data[i]; nlohmann::json &child_value = options.use_json_name ? value[field_descriptor->json_name()] - : value[field_descriptor->name()]; + : value[field_descriptor->camelcase_name()]; if (field_descriptor->is_repeated()) { ConvertListFieldToJson(child_value, message, field_descriptor, options); @@ -712,12 +712,13 @@ OtlpHttpClient::OtlpHttpClient(OtlpHttpClientOptions &&options, opentelemetry::sdk::common::ExportResult OtlpHttpClient::Export( const google::protobuf::Message &message) noexcept { - opentelemetry::sdk::common::ExportResult session_result = - opentelemetry::sdk::common::ExportResult::kSuccess; + std::shared_ptr session_result = + std::make_shared( + opentelemetry::sdk::common::ExportResult::kSuccess); opentelemetry::sdk::common::ExportResult export_result = Export( message, - [&session_result](opentelemetry::sdk::common::ExportResult result) { - session_result = result; + [session_result](opentelemetry::sdk::common::ExportResult result) { + *session_result = result; return result == opentelemetry::sdk::common::ExportResult::kSuccess; }, 0); @@ -727,7 +728,7 @@ opentelemetry::sdk::common::ExportResult OtlpHttpClient::Export( return export_result; } - return session_result; + return *session_result; } sdk::common::ExportResult OtlpHttpClient::Export( diff --git a/exporters/otlp/src/otlp_metric_utils.cc b/exporters/otlp/src/otlp_metric_utils.cc index c4ab641567..f642bbf85e 100644 --- a/exporters/otlp/src/otlp_metric_utils.cc +++ b/exporters/otlp/src/otlp_metric_utils.cc @@ -3,6 +3,7 @@ #include "opentelemetry/exporters/otlp/otlp_metric_utils.h" #include "opentelemetry/exporters/otlp/otlp_populate_attribute_utils.h" +#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -50,7 +51,8 @@ void OtlpMetricUtils::ConvertSumMetric(const metric_sdk::MetricData &metric_data { sum->set_aggregation_temporality( GetProtoAggregationTemporality(metric_data.aggregation_temporality)); - sum->set_is_monotonic(true); + sum->set_is_monotonic(metric_data.instrument_descriptor.type_ == + metric_sdk::InstrumentType::kCounter); auto start_ts = metric_data.start_ts.time_since_epoch().count(); auto ts = metric_data.end_ts.time_since_epoch().count(); for (auto &point_data_with_attributes : metric_data.point_data_attr_) diff --git a/exporters/otlp/src/otlp_populate_attribute_utils.cc b/exporters/otlp/src/otlp_populate_attribute_utils.cc index d86953506c..69a284835a 100644 --- a/exporters/otlp/src/otlp_populate_attribute_utils.cc +++ b/exporters/otlp/src/otlp_populate_attribute_utils.cc @@ -67,58 +67,66 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue( } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_bool_value(val); + array_value->add_values()->set_bool_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_double_value(val); + array_value->add_values()->set_double_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_string_value(val.data(), val.size()); + array_value->add_values()->set_string_value(val.data(), val.size()); } } } @@ -168,51 +176,58 @@ void OtlpPopulateAttributeUtils::PopulateAnyValue( } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_bool_value(val); + array_value->add_values()->set_bool_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_int_value(val); + array_value->add_values()->set_int_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_double_value(val); + array_value->add_values()->set_double_value(val); } } else if (nostd::holds_alternative>(value)) { + auto array_value = proto_value->mutable_array_value(); for (const auto &val : nostd::get>(value)) { - proto_value->mutable_array_value()->add_values()->set_string_value(val); + array_value->add_values()->set_string_value(val); } } } diff --git a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc index a0455adb70..f2ed416327 100644 --- a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc @@ -19,8 +19,10 @@ # include "opentelemetry/sdk/logs/batch_log_record_processor.h" # include "opentelemetry/sdk/logs/exporter.h" # include "opentelemetry/sdk/logs/logger_provider.h" +# include "opentelemetry/sdk/logs/recordable.h" # include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/sdk/trace/exporter.h" +# include "opentelemetry/sdk/trace/processor.h" # include "opentelemetry/sdk/trace/simple_processor_factory.h" # include "opentelemetry/sdk/trace/tracer_provider_factory.h" # include "opentelemetry/trace/provider.h" @@ -170,7 +172,7 @@ TEST_F(OtlpGrpcLogRecordExporterTestPeer, ExportIntegrationTest) auto trace_span = tracer->StartSpan("test_log"); opentelemetry::trace::Scope trace_scope{trace_span}; - auto logger = provider->GetLogger("test", "opentelelemtry_library", "", schema_url, true, + auto logger = provider->GetLogger("test", "opentelelemtry_library", "", schema_url, {{"scope_key1", "scope_value"}, {"scope_key2", 2}}); std::unordered_map attributes; attributes["service.name"] = "unit_test_service"; diff --git a/exporters/otlp/test/otlp_http_exporter_test.cc b/exporters/otlp/test/otlp_http_exporter_test.cc index 007cd56249..2ac698b0de 100644 --- a/exporters/otlp/test/otlp_http_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_exporter_test.cc @@ -17,6 +17,7 @@ # include "opentelemetry/ext/http/client/http_client_factory.h" # include "opentelemetry/ext/http/server/http_server.h" # include "opentelemetry/sdk/trace/batch_span_processor.h" +# include "opentelemetry/sdk/trace/batch_span_processor_options.h" # include "opentelemetry/sdk/trace/tracer_provider.h" # include "opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h" # include "opentelemetry/trace/provider.h" @@ -165,10 +166,10 @@ class OtlpHttpExporterTestPeer : public ::testing::Test std::shared_ptr callback) { auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_span = *check_json["resource_spans"].begin(); - auto scope_span = *resource_span["scope_spans"].begin(); + auto resource_span = *check_json["resourceSpans"].begin(); + auto scope_span = *resource_span["scopeSpans"].begin(); auto span = *scope_span["spans"].begin(); - auto received_trace_id = span["trace_id"].get(); + auto received_trace_id = span["traceId"].get(); EXPECT_EQ(received_trace_id, report_trace_id); auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); @@ -256,10 +257,10 @@ class OtlpHttpExporterTestPeer : public ::testing::Test std::shared_ptr callback) { auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_span = *check_json["resource_spans"].begin(); - auto scope_span = *resource_span["scope_spans"].begin(); + auto resource_span = *check_json["resourceSpans"].begin(); + auto scope_span = *resource_span["scopeSpans"].begin(); auto span = *scope_span["spans"].begin(); - auto received_trace_id = span["trace_id"].get(); + auto received_trace_id = span["traceId"].get(); EXPECT_EQ(received_trace_id, report_trace_id); auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); diff --git a/exporters/otlp/test/otlp_http_log_record_exporter_test.cc b/exporters/otlp/test/otlp_http_log_record_exporter_test.cc index aa55e7fc7c..7720b6e5d8 100644 --- a/exporters/otlp/test/otlp_http_log_record_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_log_record_exporter_test.cc @@ -143,7 +143,7 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test opentelemetry::trace::SpanId span_id{span_id_bin}; const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = provider->GetLogger("test", "opentelelemtry_library", "", schema_url, true, + auto logger = provider->GetLogger("test", "opentelelemtry_library", "", schema_url, {{"scope_key1", "scope_value"}, {"scope_key2", 2}}); trace_id.ToLowerBase16(MakeSpan(trace_id_hex)); @@ -160,15 +160,15 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test std::shared_ptr callback) { auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_logs = *check_json["resource_logs"].begin(); - auto scope_logs = *resource_logs["scope_logs"].begin(); + auto resource_logs = *check_json["resourceLogs"].begin(); + auto scope_logs = *resource_logs["scopeLogs"].begin(); auto scope = scope_logs["scope"]; - auto log = *scope_logs["log_records"].begin(); - auto received_trace_id = log["trace_id"].get(); - auto received_span_id = log["span_id"].get(); + auto log = *scope_logs["logRecords"].begin(); + auto received_trace_id = log["traceId"].get(); + auto received_span_id = log["spanId"].get(); EXPECT_EQ(received_trace_id, report_trace_id); EXPECT_EQ(received_span_id, report_span_id); - EXPECT_EQ("Log message", log["body"]["string_value"].get()); + EXPECT_EQ("Log message", log["body"]["stringValue"].get()); EXPECT_LE(15, log["attributes"].size()); auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); ASSERT_TRUE(custom_header != mock_session->GetRequest()->headers_.end()); @@ -188,7 +188,7 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test if ("scope_key1" == attribute["key"]) { check_scope_attribute = true; - EXPECT_EQ("scope_value", attribute["value"]["string_value"].get()); + EXPECT_EQ("scope_value", attribute["value"]["stringValue"].get()); } } ASSERT_TRUE(check_scope_attribute); @@ -260,7 +260,7 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test opentelemetry::trace::SpanId span_id{span_id_bin}; const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = provider->GetLogger("test", "opentelelemtry_library", "1.2.0", schema_url, true, + auto logger = provider->GetLogger("test", "opentelelemtry_library", "1.2.0", schema_url, {{"scope_key1", "scope_value"}, {"scope_key2", 2}}); trace_id.ToLowerBase16(MakeSpan(trace_id_hex)); @@ -277,21 +277,21 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test std::shared_ptr callback) { auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_logs = *check_json["resource_logs"].begin(); - auto scope_logs = *resource_logs["scope_logs"].begin(); - auto schema_url = scope_logs["schema_url"].get(); + auto resource_logs = *check_json["resourceLogs"].begin(); + auto scope_logs = *resource_logs["scopeLogs"].begin(); + auto schema_url = scope_logs["schemaUrl"].get(); auto scope = scope_logs["scope"]; auto scope_name = scope["name"]; auto scope_version = scope["version"]; - auto log = *scope_logs["log_records"].begin(); - auto received_trace_id = log["trace_id"].get(); - auto received_span_id = log["span_id"].get(); + auto log = *scope_logs["logRecords"].begin(); + auto received_trace_id = log["traceId"].get(); + auto received_span_id = log["spanId"].get(); EXPECT_EQ(schema_url, "https://opentelemetry.io/schemas/1.2.0"); EXPECT_EQ(scope_name, "opentelelemtry_library"); EXPECT_EQ(scope_version, "1.2.0"); EXPECT_EQ(received_trace_id, report_trace_id); EXPECT_EQ(received_span_id, report_span_id); - EXPECT_EQ("Log message", log["body"]["string_value"].get()); + EXPECT_EQ("Log message", log["body"]["stringValue"].get()); EXPECT_LE(15, log["attributes"].size()); auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); ASSERT_TRUE(custom_header != mock_session->GetRequest()->headers_.end()); @@ -311,7 +311,7 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test if ("scope_key1" == attribute["key"]) { check_scope_attribute = true; - EXPECT_EQ("scope_value", attribute["value"]["string_value"].get()); + EXPECT_EQ("scope_value", attribute["value"]["stringValue"].get()); } } ASSERT_TRUE(check_scope_attribute); @@ -385,7 +385,7 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test opentelemetry::trace::SpanId span_id{span_id_bin}; const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = provider->GetLogger("test", "opentelelemtry_library", "1.2.0", schema_url, true, + auto logger = provider->GetLogger("test", "opentelelemtry_library", "1.2.0", schema_url, {{"scope_key1", "scope_value"}, {"scope_key2", 2}}); report_trace_id.assign(reinterpret_cast(trace_id_bin), sizeof(trace_id_bin)); @@ -498,7 +498,7 @@ class OtlpHttpLogRecordExporterTestPeer : public ::testing::Test opentelemetry::trace::SpanId span_id{span_id_bin}; const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = provider->GetLogger("test", "opentelelemtry_library", "", schema_url, true, + auto logger = provider->GetLogger("test", "opentelelemtry_library", "", schema_url, {{"scope_key1", "scope_value"}, {"scope_key2", 2}}); report_trace_id.assign(reinterpret_cast(trace_id_bin), sizeof(trace_id_bin)); diff --git a/exporters/otlp/test/otlp_http_metric_exporter_test.cc b/exporters/otlp/test/otlp_http_metric_exporter_test.cc index 27f4614157..97586b101c 100644 --- a/exporters/otlp/test/otlp_http_metric_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_metric_exporter_test.cc @@ -16,9 +16,11 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/ext/http/client/http_client_factory.h" #include "opentelemetry/ext/http/server/http_server.h" +#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" +#include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h" @@ -160,8 +162,8 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_metrics = *check_json["resource_metrics"].begin(); - auto scope_metrics = *resource_metrics["scope_metrics"].begin(); + auto resource_metrics = *check_json["resourceMetrics"].begin(); + auto scope_metrics = *resource_metrics["scopeMetrics"].begin(); auto scope = scope_metrics["scope"]; EXPECT_EQ("library_name", scope["name"].get()); EXPECT_EQ("1.5.0", scope["version"].get()); @@ -171,9 +173,9 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test EXPECT_EQ("metrics_description", metric["description"].get()); EXPECT_EQ("metrics_unit", metric["unit"].get()); - auto data_points = metric["sum"]["data_points"]; - EXPECT_EQ(10.0, data_points[0]["as_double"].get()); - EXPECT_EQ(20.0, data_points[1]["as_double"].get()); + auto data_points = metric["sum"]["dataPoints"]; + EXPECT_EQ(10.0, data_points[0]["asDouble"].get()); + EXPECT_EQ(20.0, data_points[1]["asDouble"].get()); auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); ASSERT_TRUE(custom_header != mock_session->GetRequest()->headers_.end()); @@ -341,8 +343,8 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_metrics = *check_json["resource_metrics"].begin(); - auto scope_metrics = *resource_metrics["scope_metrics"].begin(); + auto resource_metrics = *check_json["resourceMetrics"].begin(); + auto scope_metrics = *resource_metrics["scopeMetrics"].begin(); auto scope = scope_metrics["scope"]; EXPECT_EQ("library_name", scope["name"].get()); EXPECT_EQ("1.5.0", scope["version"].get()); @@ -352,9 +354,9 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test EXPECT_EQ("metrics_description", metric["description"].get()); EXPECT_EQ("metrics_unit", metric["unit"].get()); - auto data_points = metric["gauge"]["data_points"]; - EXPECT_EQ(10.0, data_points[0]["as_double"].get()); - EXPECT_EQ(20l, JsonToInteger(data_points[1]["as_int"])); + auto data_points = metric["gauge"]["dataPoints"]; + EXPECT_EQ(10.0, data_points[0]["asDouble"].get()); + EXPECT_EQ(20l, JsonToInteger(data_points[1]["asInt"])); auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); ASSERT_TRUE(custom_header != mock_session->GetRequest()->headers_.end()); @@ -536,8 +538,8 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test auto check_json = nlohmann::json::parse(mock_session->GetRequest()->body_, nullptr, false); - auto resource_metrics = *check_json["resource_metrics"].begin(); - auto scope_metrics = *resource_metrics["scope_metrics"].begin(); + auto resource_metrics = *check_json["resourceMetrics"].begin(); + auto scope_metrics = *resource_metrics["scopeMetrics"].begin(); auto scope = scope_metrics["scope"]; EXPECT_EQ("library_name", scope["name"].get()); EXPECT_EQ("1.5.0", scope["version"].get()); @@ -547,43 +549,43 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test EXPECT_EQ("metrics_description", metric["description"].get()); EXPECT_EQ("metrics_unit", metric["unit"].get()); - auto data_points = metric["histogram"]["data_points"]; + auto data_points = metric["histogram"]["dataPoints"]; EXPECT_EQ(3, JsonToInteger(data_points[0]["count"])); EXPECT_EQ(900.5, data_points[0]["sum"].get()); EXPECT_EQ(1.8, data_points[0]["min"].get()); EXPECT_EQ(19, data_points[0]["max"].get()); - EXPECT_EQ(4, data_points[0]["bucket_counts"].size()); - if (4 == data_points[0]["bucket_counts"].size()) + EXPECT_EQ(4, data_points[0]["bucketCounts"].size()); + if (4 == data_points[0]["bucketCounts"].size()) { - EXPECT_EQ(200, JsonToInteger(data_points[0]["bucket_counts"][0])); - EXPECT_EQ(300, JsonToInteger(data_points[0]["bucket_counts"][1])); - EXPECT_EQ(400, JsonToInteger(data_points[0]["bucket_counts"][2])); - EXPECT_EQ(500, JsonToInteger(data_points[0]["bucket_counts"][3])); + EXPECT_EQ(200, JsonToInteger(data_points[0]["bucketCounts"][0])); + EXPECT_EQ(300, JsonToInteger(data_points[0]["bucketCounts"][1])); + EXPECT_EQ(400, JsonToInteger(data_points[0]["bucketCounts"][2])); + EXPECT_EQ(500, JsonToInteger(data_points[0]["bucketCounts"][3])); } - EXPECT_EQ(3, data_points[0]["explicit_bounds"].size()); - if (3 == data_points[0]["explicit_bounds"].size()) + EXPECT_EQ(3, data_points[0]["explicitBounds"].size()); + if (3 == data_points[0]["explicitBounds"].size()) { - EXPECT_EQ(10.1, data_points[0]["explicit_bounds"][0].get()); - EXPECT_EQ(20.2, data_points[0]["explicit_bounds"][1].get()); - EXPECT_EQ(30.2, data_points[0]["explicit_bounds"][2].get()); + EXPECT_EQ(10.1, data_points[0]["explicitBounds"][0].get()); + EXPECT_EQ(20.2, data_points[0]["explicitBounds"][1].get()); + EXPECT_EQ(30.2, data_points[0]["explicitBounds"][2].get()); } EXPECT_EQ(3, JsonToInteger(data_points[1]["count"])); EXPECT_EQ(900.0, data_points[1]["sum"].get()); - EXPECT_EQ(4, data_points[1]["bucket_counts"].size()); - if (4 == data_points[1]["bucket_counts"].size()) + EXPECT_EQ(4, data_points[1]["bucketCounts"].size()); + if (4 == data_points[1]["bucketCounts"].size()) { - EXPECT_EQ(200, JsonToInteger(data_points[1]["bucket_counts"][0])); - EXPECT_EQ(300, JsonToInteger(data_points[1]["bucket_counts"][1])); - EXPECT_EQ(400, JsonToInteger(data_points[1]["bucket_counts"][2])); - EXPECT_EQ(500, JsonToInteger(data_points[1]["bucket_counts"][3])); + EXPECT_EQ(200, JsonToInteger(data_points[1]["bucketCounts"][0])); + EXPECT_EQ(300, JsonToInteger(data_points[1]["bucketCounts"][1])); + EXPECT_EQ(400, JsonToInteger(data_points[1]["bucketCounts"][2])); + EXPECT_EQ(500, JsonToInteger(data_points[1]["bucketCounts"][3])); } - EXPECT_EQ(3, data_points[1]["explicit_bounds"].size()); - if (3 == data_points[1]["explicit_bounds"].size()) + EXPECT_EQ(3, data_points[1]["explicitBounds"].size()); + if (3 == data_points[1]["explicitBounds"].size()) { - EXPECT_EQ(10.0, data_points[1]["explicit_bounds"][0].get()); - EXPECT_EQ(20.0, data_points[1]["explicit_bounds"][1].get()); - EXPECT_EQ(30.0, data_points[1]["explicit_bounds"][2].get()); + EXPECT_EQ(10.0, data_points[1]["explicitBounds"][0].get()); + EXPECT_EQ(20.0, data_points[1]["explicitBounds"][1].get()); + EXPECT_EQ(30.0, data_points[1]["explicitBounds"][2].get()); } auto custom_header = mock_session->GetRequest()->headers_.find("Custom-Header-Key"); diff --git a/exporters/otlp/test/otlp_metrics_serialization_test.cc b/exporters/otlp/test/otlp_metrics_serialization_test.cc index cc3781c66f..ac0f717b25 100644 --- a/exporters/otlp/test/otlp_metrics_serialization_test.cc +++ b/exporters/otlp/test/otlp_metrics_serialization_test.cc @@ -35,7 +35,34 @@ static metrics_sdk::MetricData CreateSumAggregationData() point_data_attr_1.point_data = s_data_1; point_data_attr_2.attributes = {{"k2", "v2"}}; - point_data_attr_2.point_data = s_data_1; + point_data_attr_2.point_data = s_data_2; + std::vector point_data_attr; + point_data_attr.push_back(point_data_attr_1); + point_data_attr.push_back(point_data_attr_2); + data.point_data_attr_ = std::move(point_data_attr); + return data; +} + +static metrics_sdk::MetricData CreateUpDownCounterAggregationData() +{ + metrics_sdk::MetricData data; + data.start_ts = opentelemetry::common::SystemTimestamp(std::chrono::system_clock::now()); + metrics_sdk::InstrumentDescriptor inst_desc = {"UpDownCounter", "Robot Pose Y", "Meter", + metrics_sdk::InstrumentType::kUpDownCounter, + metrics_sdk::InstrumentValueType::kDouble}; + metrics_sdk::SumPointData s_data_1, s_data_2; + s_data_1.value_ = 1.35; + s_data_2.value_ = 1.37; + + data.aggregation_temporality = metrics_sdk::AggregationTemporality::kCumulative; + data.end_ts = opentelemetry::common::SystemTimestamp(std::chrono::system_clock::now()); + data.instrument_descriptor = inst_desc; + metrics_sdk::PointDataAttributes point_data_attr_1, point_data_attr_2; + point_data_attr_1.attributes = {{"environment_id", "DEV-AYS"}}; + point_data_attr_1.point_data = s_data_1; + + point_data_attr_2.attributes = {{"robot_id", "DEV-AYS-03-02"}}; + point_data_attr_2.point_data = s_data_2; std::vector point_data_attr; point_data_attr.push_back(point_data_attr_1); point_data_attr.push_back(point_data_attr_2); @@ -68,7 +95,7 @@ static metrics_sdk::MetricData CreateHistogramAggregationData() point_data_attr_1.point_data = s_data_1; point_data_attr_2.attributes = {{"k2", "v2"}}; - point_data_attr_2.point_data = s_data_1; + point_data_attr_2.point_data = s_data_2; std::vector point_data_attr; point_data_attr.push_back(point_data_attr_1); point_data_attr.push_back(point_data_attr_2); @@ -95,7 +122,7 @@ static metrics_sdk::MetricData CreateObservableGaugeAggregationData() point_data_attr_1.point_data = s_data_1; point_data_attr_2.attributes = {{"k2", "v2"}}; - point_data_attr_2.point_data = s_data_1; + point_data_attr_2.point_data = s_data_2; std::vector point_data_attr; point_data_attr.push_back(point_data_attr_1); point_data_attr.push_back(point_data_attr_2); @@ -120,6 +147,20 @@ TEST(OtlpMetricSerializationTest, Counter) EXPECT_EQ(1, 1); } +TEST(OtlpMetricSerializationTest, UpDownCounter) +{ + metrics_sdk::MetricData data = CreateUpDownCounterAggregationData(); + opentelemetry::proto::metrics::v1::Sum sum; + otlp_exporter::OtlpMetricUtils::ConvertSumMetric(data, &sum); + EXPECT_EQ(sum.aggregation_temporality(), + proto::metrics::v1::AggregationTemporality::AGGREGATION_TEMPORALITY_CUMULATIVE); + EXPECT_EQ(sum.is_monotonic(), false); + EXPECT_EQ(sum.data_points(0).as_double(), 1.35); + EXPECT_EQ(sum.data_points(1).as_double(), 1.37); + + EXPECT_EQ(1, 1); +} + TEST(OtlpMetricSerializationTest, Histogram) { metrics_sdk::MetricData data = CreateHistogramAggregationData(); diff --git a/exporters/otlp/test/otlp_recordable_test.cc b/exporters/otlp/test/otlp_recordable_test.cc index abad2991b7..4db58844f7 100644 --- a/exporters/otlp/test/otlp_recordable_test.cc +++ b/exporters/otlp/test/otlp_recordable_test.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/otlp/otlp_recordable.h" +#include "opentelemetry/sdk/resource/resource.h" #if defined(__GNUC__) // GCC raises -Wsuggest-override warnings on GTest, @@ -284,6 +285,29 @@ TEST(OtlpRecordable, SetArrayAttribute) } } +template +struct EmptyArrayAttributeTest : public testing::Test +{ + using ElementType = T; +}; + +using ArrayElementTypes = + testing::Types; +TYPED_TEST_SUITE(EmptyArrayAttributeTest, ArrayElementTypes); + +// Test empty arrays. +TYPED_TEST(EmptyArrayAttributeTest, SetEmptyArrayAttribute) +{ + using ArrayElementType = typename TestFixture::ElementType; + OtlpRecordable rec; + + nostd::span span = {}; + rec.SetAttribute("empty_arr_attr", span); + + EXPECT_TRUE(rec.span().attributes(0).value().has_array_value()); + EXPECT_TRUE(rec.span().attributes(0).value().array_value().values().empty()); +} + /** * AttributeValue can contain different int types, such as int, int64_t, * unsigned int, and uint64_t. To avoid writing test cases for each, we can diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h index e602c87737..ce7f0a1191 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter_utils.h @@ -107,6 +107,9 @@ class PrometheusExporterUtils const std::vector &boundaries, const std::vector &counts, ::prometheus::ClientMetric *metric); + + // For testing + friend class SanitizeNameTester; }; } // namespace metrics } // namespace exporter diff --git a/exporters/prometheus/src/exporter_utils.cc b/exporters/prometheus/src/exporter_utils.cc index 451c34ff45..966d665df6 100644 --- a/exporters/prometheus/src/exporter_utils.cc +++ b/exporters/prometheus/src/exporter_utils.cc @@ -39,11 +39,12 @@ std::vector PrometheusExporterUtils::TranslateT for (const auto &metric_data : instrumentation_info.metric_data_) { auto origin_name = metric_data.instrument_descriptor.name_; + auto unit = metric_data.instrument_descriptor.unit_; auto sanitized = SanitizeNames(origin_name); prometheus_client::MetricFamily metric_family; - metric_family.name = sanitized; + metric_family.name = sanitized + "_" + unit; metric_family.help = metric_data.instrument_descriptor.description_; - auto time = metric_data.start_ts.time_since_epoch(); + auto time = metric_data.end_ts.time_since_epoch(); for (const auto &point_data_attr : metric_data.point_data_attr_) { auto kind = getAggregationType(point_data_attr.point_data); @@ -129,10 +130,40 @@ std::vector PrometheusExporterUtils::TranslateT */ std::string PrometheusExporterUtils::SanitizeNames(std::string name) { - // replace all '.' and '-' with '_' - std::replace(name.begin(), name.end(), '.', '_'); - std::replace(name.begin(), name.end(), '-', '_'); + constexpr const auto replacement = '_'; + constexpr const auto replacement_dup = '='; + auto valid = [](int i, char c) { + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == ':' || + (c >= '0' && c <= '9' && i > 0)) + { + return true; + } + return false; + }; + + bool has_dup = false; + for (int i = 0; i < (int)name.size(); ++i) + { + if (valid(i, name[i])) + { + continue; + } + if (i > 0 && (name[i - 1] == replacement || name[i - 1] == replacement_dup)) + { + has_dup = true; + name[i] = replacement_dup; + } + else + { + name[i] = replacement; + } + } + if (has_dup) + { + auto end = std::remove(name.begin(), name.end(), replacement_dup); + return std::string{name.begin(), end}; + } return name; } diff --git a/exporters/prometheus/test/exporter_utils_test.cc b/exporters/prometheus/test/exporter_utils_test.cc index 2b37ab77ad..2eac7a6d8b 100644 --- a/exporters/prometheus/test/exporter_utils_test.cc +++ b/exporters/prometheus/test/exporter_utils_test.cc @@ -14,6 +14,22 @@ namespace metric_api = opentelemetry::metrics; namespace prometheus_client = ::prometheus; OPENTELEMETRY_BEGIN_NAMESPACE + +namespace exporter +{ +namespace metrics +{ +class SanitizeNameTester +{ +public: + static std::string sanitize(std::string name) + { + return PrometheusExporterUtils::SanitizeNames(name); + } +}; +} // namespace metrics +} // namespace exporter + template void assert_basic(prometheus_client::MetricFamily &metric, const std::string &sanitized_name, @@ -22,9 +38,9 @@ void assert_basic(prometheus_client::MetricFamily &metric, int label_num, std::vector vals) { - ASSERT_EQ(metric.name, sanitized_name); // name sanitized - ASSERT_EQ(metric.help, description); // description not changed - ASSERT_EQ(metric.type, type); // type translated + ASSERT_EQ(metric.name, sanitized_name + "_unit"); // name sanitized + ASSERT_EQ(metric.help, description); // description not changed + ASSERT_EQ(metric.type, type); // type translated auto metric_data = metric.metric[0]; ASSERT_EQ(metric_data.label.size(), label_num); @@ -129,4 +145,14 @@ TEST(PrometheusExporterUtils, TranslateToPrometheusHistogramNormal) assert_histogram(metric, std::list{10.1, 20.2, 30.2}, {200, 300, 400, 500}); } +TEST(PrometheusExporterUtils, SanitizeName) +{ + ASSERT_EQ(exporter::metrics::SanitizeNameTester::sanitize("name"), "name"); + ASSERT_EQ(exporter::metrics::SanitizeNameTester::sanitize("name?"), "name_"); + ASSERT_EQ(exporter::metrics::SanitizeNameTester::sanitize("name???"), "name_"); + ASSERT_EQ(exporter::metrics::SanitizeNameTester::sanitize("name?__"), "name_"); + ASSERT_EQ(exporter::metrics::SanitizeNameTester::sanitize("name?__name"), "name_name"); + ASSERT_EQ(exporter::metrics::SanitizeNameTester::sanitize("name?__name:"), "name_name:"); +} + OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/zipkin/src/recordable.cc b/exporters/zipkin/src/recordable.cc index 96b486e51e..3397053e29 100644 --- a/exporters/zipkin/src/recordable.cc +++ b/exporters/zipkin/src/recordable.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/exporters/zipkin/recordable.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/resource/semantic_conventions.h" #include diff --git a/exporters/zipkin/test/zipkin_exporter_test.cc b/exporters/zipkin/test/zipkin_exporter_test.cc index f8493bec6d..fab19efb65 100644 --- a/exporters/zipkin/test/zipkin_exporter_test.cc +++ b/exporters/zipkin/test/zipkin_exporter_test.cc @@ -4,10 +4,10 @@ #ifndef HAVE_CPP_STDLIB # include "opentelemetry/exporters/zipkin/zipkin_exporter.h" -# include # include "opentelemetry/ext/http/client/curl/http_client_curl.h" # include "opentelemetry/ext/http/server/http_server.h" # include "opentelemetry/sdk/trace/batch_span_processor.h" +# include "opentelemetry/sdk/trace/batch_span_processor_options.h" # include "opentelemetry/sdk/trace/tracer_provider.h" # include "opentelemetry/trace/provider.h" @@ -16,6 +16,8 @@ # include "nlohmann/json.hpp" +# include + # if defined(_MSC_VER) # include "opentelemetry/sdk/common/env_variables.h" using opentelemetry::sdk::common::setenv; diff --git a/ext/include/opentelemetry/ext/http/client/curl/http_operation_curl.h b/ext/include/opentelemetry/ext/http/client/curl/http_operation_curl.h index 65355a05cd..b711ac8445 100644 --- a/ext/include/opentelemetry/ext/http/client/curl/http_operation_curl.h +++ b/ext/include/opentelemetry/ext/http/client/curl/http_operation_curl.h @@ -269,6 +269,8 @@ class HttpOperation CURLcode SetCurlLongOption(CURLoption option, long value); + CURLcode SetCurlOffOption(CURLoption option, curl_off_t value); + const char *GetCurlErrorMessage(CURLcode code); std::atomic is_aborted_; // Set to 'true' when async callback is aborted diff --git a/ext/include/opentelemetry/ext/http/common/url_parser.h b/ext/include/opentelemetry/ext/http/common/url_parser.h index 2ac6d00af8..31da004003 100644 --- a/ext/include/opentelemetry/ext/http/common/url_parser.h +++ b/ext/include/opentelemetry/ext/http/common/url_parser.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include #include "opentelemetry/nostd/string_view.h" @@ -83,7 +84,7 @@ class UrlParser pos = url_.find_first_of("/?", cpos); if (pos == std::string::npos) { - path_ = "/"; // use default path + path_ = std::string("/"); // use default path if (is_port) { port_ = static_cast( @@ -122,7 +123,7 @@ class UrlParser } return; } - path_ = "/"; + path_ = std::string("/"); if (url_[cpos] == '?') { query_ = std::string(url_.begin() + cpos, url_.begin() + url_.length()); diff --git a/ext/src/dll/CMakeLists.txt b/ext/src/dll/CMakeLists.txt index 4cfcd87412..d9156a5f8c 100644 --- a/ext/src/dll/CMakeLists.txt +++ b/ext/src/dll/CMakeLists.txt @@ -23,16 +23,16 @@ if(WITH_OTLP_HTTP) endif() if(WITH_LOGS_PREVIEW) + target_link_libraries(opentelemetry_cpp PRIVATE opentelemetry_logs) + if(WITH_OTLP_GRPC) - target_link_libraries( - opentelemetry_cpp PRIVATE opentelemetry_logs - opentelemetry_exporter_otlp_grpc_log) + target_link_libraries(opentelemetry_cpp + PRIVATE opentelemetry_exporter_otlp_grpc_log) endif() if(WITH_OTLP_HTTP) - target_link_libraries( - opentelemetry_cpp PRIVATE opentelemetry_logs - opentelemetry_exporter_otlp_http_log) + target_link_libraries(opentelemetry_cpp + PRIVATE opentelemetry_exporter_otlp_http_log) endif() endif() diff --git a/ext/src/dll/opentelemetry_cpp.src b/ext/src/dll/opentelemetry_cpp.src index 9f5ee76ba3..043b6a96d6 100644 --- a/ext/src/dll/opentelemetry_cpp.src +++ b/ext/src/dll/opentelemetry_cpp.src @@ -7,7 +7,11 @@ EXPORTS // public: static class std::unique_ptr > __cdecl opentelemetry::v1::exporter::trace::OStreamSpanExporterFactory::Create(void) ?Create@OStreamSpanExporterFactory@trace@exporter@v1@opentelemetry@@SA?AV?$unique_ptr@VSpanExporter@trace@sdk@v1@opentelemetry@@U?$default_delete@VSpanExporter@trace@sdk@v1@opentelemetry@@@std@@@std@@XZ // public: static class std::unique_ptr > __cdecl opentelemetry::v1::sdk::trace::SimpleSpanProcessorFactory::Create(class std::unique_ptr > && __ptr64) +#if defined(_WIN64) ?Create@SimpleSpanProcessorFactory@trace@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VSpanProcessor@trace@sdk@v1@opentelemetry@@U?$default_delete@VSpanProcessor@trace@sdk@v1@opentelemetry@@@std@@@std@@$$QEAV?$unique_ptr@VSpanExporter@trace@sdk@v1@opentelemetry@@U?$default_delete@VSpanExporter@trace@sdk@v1@opentelemetry@@@std@@@7@@Z +#else + ?Create@SimpleSpanProcessorFactory@trace@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VSpanProcessor@trace@sdk@v1@opentelemetry@@U?$default_delete@VSpanProcessor@trace@sdk@v1@opentelemetry@@@std@@@std@@$$QAV?$unique_ptr@VSpanExporter@trace@sdk@v1@opentelemetry@@U?$default_delete@VSpanExporter@trace@sdk@v1@opentelemetry@@@std@@@7@@Z +#endif // public: static class std::unique_ptr > __cdecl opentelemetry::v1::sdk::trace::TracerProviderFactory::Create(class std::unique_ptr >) ?Create@TracerProviderFactory@trace@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VTracerProvider@trace@v1@opentelemetry@@U?$default_delete@VTracerProvider@trace@v1@opentelemetry@@@std@@@std@@V?$unique_ptr@VSpanProcessor@trace@sdk@v1@opentelemetry@@U?$default_delete@VSpanProcessor@trace@sdk@v1@opentelemetry@@@std@@@7@@Z #if defined(WITH_OTLP_GRPC) @@ -20,13 +24,29 @@ EXPORTS #endif // defined(WITH_OTLP_HTTP) #if defined(ENABLE_LOGS_PREVIEW) // public: static class std::unique_ptr > __cdecl opentelemetry::v1::sdk::logs::LoggerProviderFactory::Create(class std::unique_ptr > && __ptr64) +#if defined(_WIN64) ?Create@LoggerProviderFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLoggerProvider@logs@v1@opentelemetry@@U?$default_delete@VLoggerProvider@logs@v1@opentelemetry@@@std@@@std@@$$QEAV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@7@@Z +#else + ?Create@LoggerProviderFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLoggerProvider@logs@v1@opentelemetry@@U?$default_delete@VLoggerProvider@logs@v1@opentelemetry@@@std@@@std@@$$QAV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@7@@Z +#endif // public: static class std::unique_ptr > __cdecl opentelemetry::v1::sdk::logs::BatchLogRecordProcessorFactory::Create(class std::unique_ptr > && __ptr64,struct opentelemetry::v1::sdk::logs::BatchLogRecordProcessorOptions const & __ptr64) +#if defined(_WIN64) ?Create@BatchLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QEAV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@7@AEBUBatchLogRecordProcessorOptions@2345@@Z +#else + ?Create@BatchLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QAV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@7@AEBUBatchLogRecordProcessorOptions@2345@@Z +#endif // public: static class std::unique_ptr > __cdecl opentelemetry::v1::sdk::logs::SimpleLogRecordProcessorFactory::Create(class std::unique_ptr > && __ptr64) +#if defined(_WIN64) ?Create@SimpleLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QEAV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@7@@Z +#else + ?Create@SimpleLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QAV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@7@@Z +#endif // public: static class std::unique_ptr > __cdecl opentelemetry::v1::sdk::logs::MultiLogRecordProcessorFactory::Create(class std::vector >,class std::allocator > > > && __ptr64) +#if defined(WIN32) ?Create@MultiLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QEAV?$vector@V?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@V?$allocator@V?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@@2@@7@@Z +#else + ?Create@MultiLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QAV?$vector@V?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@V?$allocator@V?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@@2@@7@@Z +#endif #if defined(WITH_OTLP_GRPC) // public: static class std::unique_ptr > __cdecl opentelemetry::v1::exporter::otlp::OtlpGrpcLogRecordExporterFactory::Create(struct opentelemetry::v1::exporter::otlp::OtlpGrpcExporterOptions const & __ptr64) ?Create@OtlpGrpcLogRecordExporterFactory@otlp@exporter@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@std@@AEBUOtlpGrpcExporterOptions@2345@@Z diff --git a/ext/src/http/client/curl/CMakeLists.txt b/ext/src/http/client/curl/CMakeLists.txt index 96e7c5b42a..7e2507bd75 100644 --- a/ext/src/http/client/curl/CMakeLists.txt +++ b/ext/src/http/client/curl/CMakeLists.txt @@ -8,7 +8,8 @@ add_library( set_target_properties(opentelemetry_http_client_curl PROPERTIES EXPORT_NAME http_client_curl) set_target_version(opentelemetry_http_client_curl) - +target_link_libraries(opentelemetry_http_client_curl + PUBLIC opentelemetry_common) if(TARGET CURL::libcurl) target_link_libraries( opentelemetry_http_client_curl diff --git a/ext/src/http/client/curl/http_operation_curl.cc b/ext/src/http/client/curl/http_operation_curl.cc index dcb1ec9042..22b2565e6f 100644 --- a/ext/src/http/client/curl/http_operation_curl.cc +++ b/ext/src/http/client/curl/http_operation_curl.cc @@ -556,6 +556,26 @@ CURLcode HttpOperation::SetCurlLongOption(CURLoption option, long value) return rc; } +CURLcode HttpOperation::SetCurlOffOption(CURLoption option, curl_off_t value) +{ + CURLcode rc; + + /* + curl_easy_setopt() is a macro with variadic arguments, type unsafe. + SetCurlOffOption() ensures it is called with a curl_off_t. + */ + rc = curl_easy_setopt(curl_resource_.easy_handle, option, value); + + if (rc != CURLE_OK) + { + const char *message = GetCurlErrorMessage(rc); + OTEL_INTERNAL_LOG_ERROR("CURL, set option <" << std::to_string(option) << "> failed: <" + << message << ">"); + } + + return rc; +} + CURLcode HttpOperation::Setup() { if (!curl_resource_.easy_handle) @@ -980,7 +1000,7 @@ CURLcode HttpOperation::Setup() return rc; } - rc = SetCurlLongOption(CURLOPT_POSTFIELDSIZE_LARGE, req_size); + rc = SetCurlOffOption(CURLOPT_POSTFIELDSIZE_LARGE, req_size); if (rc != CURLE_OK) { return rc; diff --git a/ext/test/w3c_tracecontext_test/main.cc b/ext/test/w3c_tracecontext_test/main.cc index 562f45f107..92807dd8ad 100644 --- a/ext/test/w3c_tracecontext_test/main.cc +++ b/ext/test/w3c_tracecontext_test/main.cc @@ -6,6 +6,7 @@ #include "opentelemetry/ext/http/client/curl/http_client_curl.h" #include "opentelemetry/ext/http/server/http_server.h" #include "opentelemetry/sdk/trace/simple_processor.h" +#include "opentelemetry/sdk/trace/tracer_context.h" #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/trace/propagation/http_trace_context.h" #include "opentelemetry/trace/provider.h" diff --git a/functional/otlp/func_http_main.cc b/functional/otlp/func_http_main.cc index 72fbb5e21c..cfe12a2707 100644 --- a/functional/otlp/func_http_main.cc +++ b/functional/otlp/func_http_main.cc @@ -4,10 +4,12 @@ #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h" #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/provider.h" +#include #include namespace trace = opentelemetry::trace; diff --git a/sdk/include/opentelemetry/sdk/common/atomic_shared_ptr.h b/sdk/include/opentelemetry/sdk/common/atomic_shared_ptr.h index 07e19ac0f8..39c0ce91cc 100644 --- a/sdk/include/opentelemetry/sdk/common/atomic_shared_ptr.h +++ b/sdk/include/opentelemetry/sdk/common/atomic_shared_ptr.h @@ -6,6 +6,7 @@ #include #include #include + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/common/attribute_utils.h b/sdk/include/opentelemetry/sdk/common/attribute_utils.h index b7839bddc7..c8afd657e2 100644 --- a/sdk/include/opentelemetry/sdk/common/attribute_utils.h +++ b/sdk/include/opentelemetry/sdk/common/attribute_utils.h @@ -7,8 +7,10 @@ #include #include #include + #include "opentelemetry/common/attribute_value.h" #include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/common/attributemap_hash.h b/sdk/include/opentelemetry/sdk/common/attributemap_hash.h index 086f6b7901..408070255a 100644 --- a/sdk/include/opentelemetry/sdk/common/attributemap_hash.h +++ b/sdk/include/opentelemetry/sdk/common/attributemap_hash.h @@ -3,8 +3,13 @@ #pragma once -#include +#include + +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/variant.h" #include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/common/circular_buffer.h b/sdk/include/opentelemetry/sdk/common/circular_buffer.h index 9f34659352..c2548012b1 100644 --- a/sdk/include/opentelemetry/sdk/common/circular_buffer.h +++ b/sdk/include/opentelemetry/sdk/common/circular_buffer.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include #include diff --git a/sdk/include/opentelemetry/sdk/common/circular_buffer_range.h b/sdk/include/opentelemetry/sdk/common/circular_buffer_range.h index 9ef3b66be0..e9b89f9d02 100644 --- a/sdk/include/opentelemetry/sdk/common/circular_buffer_range.h +++ b/sdk/include/opentelemetry/sdk/common/circular_buffer_range.h @@ -4,8 +4,6 @@ #pragma once #include -#include -#include #include #include "opentelemetry/nostd/span.h" diff --git a/sdk/include/opentelemetry/sdk/common/empty_attributes.h b/sdk/include/opentelemetry/sdk/common/empty_attributes.h index 4f740bf10e..664f907d23 100644 --- a/sdk/include/opentelemetry/sdk/common/empty_attributes.h +++ b/sdk/include/opentelemetry/sdk/common/empty_attributes.h @@ -3,14 +3,14 @@ #pragma once -#include "opentelemetry/common/key_value_iterable_view.h" -#include "opentelemetry/common/macros.h" - #include -#include #include #include +#include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/common/macros.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/common/global_log_handler.h b/sdk/include/opentelemetry/sdk/common/global_log_handler.h index 56103d3818..74dd90ccc6 100644 --- a/sdk/include/opentelemetry/sdk/common/global_log_handler.h +++ b/sdk/include/opentelemetry/sdk/common/global_log_handler.h @@ -3,7 +3,6 @@ #pragma once -#include #include #include diff --git a/sdk/include/opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h b/sdk/include/opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h index 8a7f9b808a..52f58c6f4e 100644 --- a/sdk/include/opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h +++ b/sdk/include/opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h @@ -4,6 +4,7 @@ #pragma once #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/instrumentationscope/instrumentation_scope.h b/sdk/include/opentelemetry/sdk/instrumentationscope/instrumentation_scope.h index 5d75e61f75..9bae218ba4 100644 --- a/sdk/include/opentelemetry/sdk/instrumentationscope/instrumentation_scope.h +++ b/sdk/include/opentelemetry/sdk/instrumentationscope/instrumentation_scope.h @@ -3,16 +3,16 @@ #pragma once -#include "opentelemetry/common/key_value_iterable.h" +#include + #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/type_traits.h" #include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/nostd/variant.h" #include "opentelemetry/sdk/common/attribute_utils.h" #include "opentelemetry/version.h" -#include -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h index d13e8782f1..23a1d947aa 100644 --- a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h +++ b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor.h @@ -8,6 +8,7 @@ # include "opentelemetry/sdk/logs/batch_log_record_processor_options.h" # include "opentelemetry/sdk/logs/exporter.h" # include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/version.h" # include # include diff --git a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_factory.h b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_factory.h index 55adc68f72..83740542cb 100644 --- a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_factory.h @@ -7,9 +7,7 @@ # include -# include "opentelemetry/sdk/logs/batch_log_record_processor_options.h" -# include "opentelemetry/sdk/logs/exporter.h" -# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -18,6 +16,10 @@ namespace sdk namespace logs { +struct BatchLogRecordProcessorOptions; +class LogRecordExporter; +class LogRecordProcessor; + /** * Factory class for BatchLogRecordProcessor. */ diff --git a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h index 1449bb48dc..05a2c48c3c 100644 --- a/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h +++ b/sdk/include/opentelemetry/sdk/logs/batch_log_record_processor_options.h @@ -5,11 +5,11 @@ #ifdef ENABLE_LOGS_PREVIEW -# include "opentelemetry/sdk/version/version.h" - # include # include +# include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/logs/event_logger.h b/sdk/include/opentelemetry/sdk/logs/event_logger.h index 85ad924766..b15754940a 100644 --- a/sdk/include/opentelemetry/sdk/logs/event_logger.h +++ b/sdk/include/opentelemetry/sdk/logs/event_logger.h @@ -4,19 +4,21 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW -# include -# include +# include -# include "opentelemetry/common/macros.h" # include "opentelemetry/logs/event_logger.h" -# include "opentelemetry/logs/logger.h" +# include "opentelemetry/nostd/shared_ptr.h" +# include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/unique_ptr.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace logs { +class Logger; +class LogRecord; class EventLogger final : public opentelemetry::logs::EventLogger { diff --git a/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h b/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h index ba12d94600..0eb9435f45 100644 --- a/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h @@ -5,9 +5,9 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/logs/event_logger_provider.h" -# include "opentelemetry/logs/logger.h" # include "opentelemetry/nostd/shared_ptr.h" -# include "opentelemetry/sdk/logs/logger.h" +# include "opentelemetry/nostd/string_view.h" +# include "opentelemetry/version.h" // Define the maximum number of loggers that are allowed to be registered to the loggerprovider. // TODO: Add link to logging spec once this is added to it @@ -18,6 +18,7 @@ namespace sdk { namespace logs { +class EventLogger; class Logger; class EventLoggerProvider final : public opentelemetry::logs::EventLoggerProvider diff --git a/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h b/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h index 06aa1c4f2e..ecc78d1b80 100644 --- a/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h @@ -5,10 +5,15 @@ #ifdef ENABLE_LOGS_PREVIEW -# include "opentelemetry/logs/event_logger_provider.h" -# include "opentelemetry/nostd/shared_ptr.h" +# include +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ +class EventLoggerProvider; +} // namespace logs + namespace sdk { namespace logs diff --git a/sdk/include/opentelemetry/sdk/logs/exporter.h b/sdk/include/opentelemetry/sdk/logs/exporter.h index 069fd8784c..fc0e68564c 100644 --- a/sdk/include/opentelemetry/sdk/logs/exporter.h +++ b/sdk/include/opentelemetry/sdk/logs/exporter.h @@ -4,19 +4,20 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW +# include # include -# include # include "opentelemetry/nostd/span.h" # include "opentelemetry/sdk/common/exporter_utils.h" -# include "opentelemetry/sdk/logs/processor.h" -# include "opentelemetry/sdk/logs/recordable.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace logs { +class Recordable; + /** * LogRecordExporter defines the interface that log exporters must implement. */ diff --git a/sdk/include/opentelemetry/sdk/logs/logger.h b/sdk/include/opentelemetry/sdk/logs/logger.h index ece83a8b57..67eafe84bc 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger.h +++ b/sdk/include/opentelemetry/sdk/logs/logger.h @@ -5,14 +5,15 @@ #ifdef ENABLE_LOGS_PREVIEW # include -# include +# include # include "opentelemetry/common/macros.h" # include "opentelemetry/logs/logger.h" +# include "opentelemetry/nostd/string_view.h" # include "opentelemetry/nostd/unique_ptr.h" # include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" # include "opentelemetry/sdk/logs/logger_context.h" -# include "opentelemetry/sdk/logs/logger_provider.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -33,8 +34,7 @@ class Logger final : public opentelemetry::logs::Logger opentelemetry::nostd::string_view name, std::shared_ptr context, std::unique_ptr instrumentation_scope = - instrumentationscope::InstrumentationScope::Create(""), - bool include_trace_context = true) noexcept; + instrumentationscope::InstrumentationScope::Create("")) noexcept; /** * Returns the name of this logger. @@ -67,8 +67,6 @@ class Logger final : public opentelemetry::logs::Logger // logger-context. std::unique_ptr instrumentation_scope_; std::shared_ptr context_; - - bool include_trace_context_; }; } // namespace logs diff --git a/sdk/include/opentelemetry/sdk/logs/logger_context.h b/sdk/include/opentelemetry/sdk/logs/logger_context.h index fe6db6822a..0b2de9bc15 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger_context.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_context.h @@ -5,9 +5,10 @@ #ifdef ENABLE_LOGS_PREVIEW +# include # include +# include -# include "opentelemetry/sdk/logs/processor.h" # include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/version.h" @@ -16,6 +17,8 @@ namespace sdk { namespace logs { +class LogRecordProcessor; + /** * A class which stores the LoggerContext context. * diff --git a/sdk/include/opentelemetry/sdk/logs/logger_context_factory.h b/sdk/include/opentelemetry/sdk/logs/logger_context_factory.h index 377094d5db..0e3502c10c 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger_context_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_context_factory.h @@ -6,17 +6,22 @@ #ifdef ENABLE_LOGS_PREVIEW # include +# include -# include "opentelemetry/sdk/logs/logger_context.h" -# include "opentelemetry/sdk/logs/processor.h" -# include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + namespace logs { +class LoggerContext; +class LogRecordProcessor; /** * Factory class for LoggerContext. diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h index a52c1a7220..3c9211cc36 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -6,16 +6,13 @@ # include # include -# include # include # include "opentelemetry/logs/logger_provider.h" -# include "opentelemetry/logs/noop.h" # include "opentelemetry/nostd/shared_ptr.h" -# include "opentelemetry/sdk/common/atomic_shared_ptr.h" -# include "opentelemetry/sdk/logs/logger.h" -# include "opentelemetry/sdk/logs/logger_context.h" -# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/nostd/string_view.h" +# include "opentelemetry/sdk/resource/resource.h" +# include "opentelemetry/version.h" // Define the maximum number of loggers that are allowed to be registered to the loggerprovider. // TODO: Add link to logging spec once this is added to it @@ -27,6 +24,8 @@ namespace sdk namespace logs { class Logger; +class LoggerContext; +class LogRecordProcessor; class LoggerProvider final : public opentelemetry::logs::LoggerProvider { @@ -78,7 +77,6 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider nostd::string_view library_name, nostd::string_view library_version = "", nostd::string_view schema_url = "", - bool include_trace_context = true, const opentelemetry::common::KeyValueIterable &attributes = opentelemetry::common::NoopKeyValueIterable()) noexcept override; diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider_factory.h b/sdk/include/opentelemetry/sdk/logs/logger_provider_factory.h index 0795129df3..bbd715dc89 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider_factory.h @@ -8,18 +8,25 @@ # include # include -# include "opentelemetry/logs/logger_provider.h" -# include "opentelemetry/nostd/shared_ptr.h" -# include "opentelemetry/sdk/common/atomic_shared_ptr.h" -# include "opentelemetry/sdk/logs/logger.h" -# include "opentelemetry/sdk/logs/logger_context.h" -# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace logs +{ +class LoggerProvider; +} // namespace logs + namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + namespace logs { +class LoggerContext; +class LogRecordProcessor; /** * Factory class for LoggerProvider. diff --git a/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h b/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h index 54a7e7959e..91995aa6a3 100644 --- a/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h +++ b/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor.h @@ -5,12 +5,11 @@ #ifdef ENABLE_LOGS_PREVIEW +# include # include # include -# include "opentelemetry/sdk/logs/multi_recordable.h" # include "opentelemetry/sdk/logs/processor.h" -# include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -18,6 +17,7 @@ namespace sdk { namespace logs { +class Recordable; /** * Log processor allow hooks for receive method invocations. diff --git a/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor_factory.h b/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor_factory.h index c91cad52ff..c3e87c12db 100644 --- a/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/multi_log_record_processor_factory.h @@ -8,13 +8,14 @@ # include # include -# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace logs { +class LogRecordProcessor; /** * Factory class for MultiLogRecordProcessor. diff --git a/sdk/include/opentelemetry/sdk/logs/multi_recordable.h b/sdk/include/opentelemetry/sdk/logs/multi_recordable.h index 8bbc2ae200..97ae1451fc 100644 --- a/sdk/include/opentelemetry/sdk/logs/multi_recordable.h +++ b/sdk/include/opentelemetry/sdk/logs/multi_recordable.h @@ -10,7 +10,6 @@ # include # include "opentelemetry/common/macros.h" -# include "opentelemetry/sdk/logs/processor.h" # include "opentelemetry/sdk/logs/recordable.h" # include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/version.h" @@ -20,6 +19,8 @@ namespace sdk { namespace logs { +class LogRecordProcessor; + class MultiRecordable final : public Recordable { public: @@ -55,6 +56,13 @@ class MultiRecordable final : public Recordable */ void SetBody(const opentelemetry::common::AttributeValue &message) noexcept override; + /** + * Set the event id + * @param id the event id to set + * @param name the event name to set + */ + void SetEventId(int64_t id, nostd::string_view name) noexcept override; + /** * Set the trace id for this log. * @param trace_id the trace id to set diff --git a/sdk/include/opentelemetry/sdk/logs/processor.h b/sdk/include/opentelemetry/sdk/logs/processor.h index 97f823a25b..8a409e0020 100644 --- a/sdk/include/opentelemetry/sdk/logs/processor.h +++ b/sdk/include/opentelemetry/sdk/logs/processor.h @@ -7,14 +7,15 @@ # include # include -# include "opentelemetry/nostd/unique_ptr.h" -# include "opentelemetry/sdk/logs/recordable.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace logs { +class Recordable; + /** * The Log Processor is responsible for passing log records * to the configured exporter. diff --git a/sdk/include/opentelemetry/sdk/logs/read_write_log_record.h b/sdk/include/opentelemetry/sdk/logs/read_write_log_record.h index c81a2da126..915c8852e9 100644 --- a/sdk/include/opentelemetry/sdk/logs/read_write_log_record.h +++ b/sdk/include/opentelemetry/sdk/logs/read_write_log_record.h @@ -6,18 +6,17 @@ # include # include +# include # include "opentelemetry/common/attribute_value.h" # include "opentelemetry/common/key_value_iterable.h" # include "opentelemetry/common/timestamp.h" # include "opentelemetry/logs/log_record.h" # include "opentelemetry/logs/severity.h" -# include "opentelemetry/nostd/unique_ptr.h" +# include "opentelemetry/nostd/string_view.h" # include "opentelemetry/sdk/common/attribute_utils.h" # include "opentelemetry/sdk/common/empty_attributes.h" -# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" # include "opentelemetry/sdk/logs/readable_log_record.h" -# include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/trace/span_id.h" # include "opentelemetry/trace/trace_flags.h" # include "opentelemetry/trace/trace_id.h" @@ -87,6 +86,25 @@ class ReadWriteLogRecord final : public ReadableLogRecord */ const opentelemetry::common::AttributeValue &GetBody() const noexcept override; + /** + * Set the Event Id object + * @param id the event Id to set + * @param name the event name to set + */ + void SetEventId(int64_t id, nostd::string_view name) noexcept override; + + /** + * Get event Id of this log. + * @return the event Id of this log. + */ + int64_t GetEventId() const noexcept override; + + /** + * Get event name of this log. + * @return the event name of this log. + */ + nostd::string_view GetEventName() const noexcept override; + /** * Set the trace id for this log. * @param trace_id the trace id to set @@ -176,6 +194,9 @@ class ReadWriteLogRecord final : public ReadableLogRecord opentelemetry::common::SystemTimestamp timestamp_; opentelemetry::common::SystemTimestamp observed_timestamp_; + int64_t event_id_; + std::string event_name_; + // We do not pay for trace state when not necessary struct TraceState { diff --git a/sdk/include/opentelemetry/sdk/logs/readable_log_record.h b/sdk/include/opentelemetry/sdk/logs/readable_log_record.h index 7b3d8ad502..ba20ca7949 100644 --- a/sdk/include/opentelemetry/sdk/logs/readable_log_record.h +++ b/sdk/include/opentelemetry/sdk/logs/readable_log_record.h @@ -8,22 +8,32 @@ # include # include "opentelemetry/common/attribute_value.h" -# include "opentelemetry/common/key_value_iterable.h" # include "opentelemetry/common/timestamp.h" # include "opentelemetry/logs/severity.h" -# include "opentelemetry/sdk/common/attribute_utils.h" -# include "opentelemetry/sdk/common/empty_attributes.h" -# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +# include "opentelemetry/nostd/string_view.h" # include "opentelemetry/sdk/logs/recordable.h" -# include "opentelemetry/sdk/resource/resource.h" -# include "opentelemetry/trace/span_id.h" -# include "opentelemetry/trace/trace_flags.h" -# include "opentelemetry/trace/trace_id.h" # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ +class SpanId; +class TraceId; +class TraceFlags; +} // namespace trace + namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + +namespace instrumentationscope +{ +class InstrumentationScope; +} // namespace instrumentationscope + namespace logs { /** @@ -64,6 +74,18 @@ class ReadableLogRecord : public Recordable */ virtual const opentelemetry::common::AttributeValue &GetBody() const noexcept = 0; + /** + * Get the Event id. + * @return the event id + */ + virtual int64_t GetEventId() const noexcept = 0; + + /** + * Get the Event Name. + * @return the event name + */ + virtual nostd::string_view GetEventName() const noexcept = 0; + /** * Get the trace id of this log. * @return the trace id of this log diff --git a/sdk/include/opentelemetry/sdk/logs/recordable.h b/sdk/include/opentelemetry/sdk/logs/recordable.h index 983a2e6b57..ff0099af56 100644 --- a/sdk/include/opentelemetry/sdk/logs/recordable.h +++ b/sdk/include/opentelemetry/sdk/logs/recordable.h @@ -4,24 +4,22 @@ #pragma once #ifdef ENABLE_LOGS_PREVIEW -# include "opentelemetry/common/attribute_value.h" -# include "opentelemetry/common/key_value_iterable.h" -# include "opentelemetry/common/timestamp.h" # include "opentelemetry/logs/log_record.h" -# include "opentelemetry/logs/severity.h" -# include "opentelemetry/sdk/common/attribute_utils.h" -# include "opentelemetry/sdk/common/empty_attributes.h" -# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" -# include "opentelemetry/sdk/logs/recordable.h" -# include "opentelemetry/sdk/resource/resource.h" -# include "opentelemetry/trace/span_id.h" -# include "opentelemetry/trace/trace_flags.h" -# include "opentelemetry/trace/trace_id.h" # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + +namespace instrumentationscope +{ +class InstrumentationScope; +} // namespace instrumentationscope + namespace logs { /** diff --git a/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor.h b/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor.h index f3d6bc27c3..4bb3dab2de 100644 --- a/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor.h +++ b/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor.h @@ -5,18 +5,21 @@ #ifdef ENABLE_LOGS_PREVIEW # include +# include # include -# include # include "opentelemetry/common/spin_lock_mutex.h" -# include "opentelemetry/sdk/logs/exporter.h" # include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace logs { +class LogRecordExporter; +class Recordable; + /** * The simple log processor passes all log records * in a batch of 1 to the configured diff --git a/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor_factory.h b/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor_factory.h index aec65349c5..cd022aadd6 100644 --- a/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/simple_log_record_processor_factory.h @@ -7,14 +7,15 @@ # include -# include "opentelemetry/sdk/logs/exporter.h" -# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace logs { +class LogRecordExporter; +class LogRecordProcessor; /** * Factory class for SimpleLogRecordProcessor. diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation.h index 361a1cd3b8..a4ec9175c5 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation.h @@ -3,9 +3,11 @@ #pragma once -#include "opentelemetry/nostd/string_view.h" +#include + #include "opentelemetry/sdk/metrics/data/metric_data.h" -#include "opentelemetry/sdk/metrics/data/point_data.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation_config.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation_config.h index 69dc4c8864..f5a48d7ddb 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation_config.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/aggregation_config.h @@ -3,10 +3,10 @@ #pragma once -#include "opentelemetry/version.h" - #include +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h new file mode 100644 index 0000000000..14c00070b1 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h @@ -0,0 +1,46 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/version.h" + +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ + +/* + * An indexer for base2 exponential histograms. It is used to calculate index for a given value and + * scale. + */ +class Base2ExponentialHistogramIndexer +{ +public: + /* + * Construct a new indexer for a given scale. + */ + explicit Base2ExponentialHistogramIndexer(int32_t scale = 0); + Base2ExponentialHistogramIndexer(const Base2ExponentialHistogramIndexer &other) = default; + Base2ExponentialHistogramIndexer &operator=(const Base2ExponentialHistogramIndexer &other) = + default; + + /** + * Compute the index for the given value. + * + * @param value Measured value (must be non-zero). + * @return the index of the bucket which the value maps to. + */ + int32_t ComputeIndex(double value) const; + +private: + int32_t scale_; + double scale_factor_; +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/default_aggregation.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/default_aggregation.h index 927c17e968..203a2d32b9 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/default_aggregation.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/default_aggregation.h @@ -4,23 +4,22 @@ #pragma once #include -#include "opentelemetry/common/spin_lock_mutex.h" + #include "opentelemetry/sdk/metrics/aggregation/aggregation.h" -#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #include "opentelemetry/sdk/metrics/aggregation/drop_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/sum_aggregation.h" #include "opentelemetry/sdk/metrics/data/point_data.h" #include "opentelemetry/sdk/metrics/instruments.h" - -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace metrics { +class AggregationConfig; class DefaultAggregation { diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/drop_aggregation.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/drop_aggregation.h index 713ce60b8e..4664f8dcd4 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/drop_aggregation.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/drop_aggregation.h @@ -3,10 +3,11 @@ #pragma once -#include "opentelemetry/common/spin_lock_mutex.h" -#include "opentelemetry/sdk/metrics/aggregation/aggregation.h" +#include -#include +#include "opentelemetry/sdk/metrics/aggregation/aggregation.h" +#include "opentelemetry/sdk/metrics/data/point_data.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h index 5d1097d93f..4419ee81f3 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h @@ -3,18 +3,20 @@ #pragma once +#include #include + #include "opentelemetry/common/spin_lock_mutex.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation.h" -#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" - -#include +#include "opentelemetry/sdk/metrics/data/point_data.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace metrics { +class AggregationConfig; class LongHistogramAggregation : public Aggregation { diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h index 05242e304d..859fe26d6b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h @@ -3,10 +3,12 @@ #pragma once +#include + #include "opentelemetry/common/spin_lock_mutex.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation.h" - -#include +#include "opentelemetry/sdk/metrics/data/point_data.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/aggregation/sum_aggregation.h b/sdk/include/opentelemetry/sdk/metrics/aggregation/sum_aggregation.h index 881854e0c2..a098d86b72 100644 --- a/sdk/include/opentelemetry/sdk/metrics/aggregation/sum_aggregation.h +++ b/sdk/include/opentelemetry/sdk/metrics/aggregation/sum_aggregation.h @@ -3,10 +3,12 @@ #pragma once +#include + #include "opentelemetry/common/spin_lock_mutex.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation.h" - -#include +#include "opentelemetry/sdk/metrics/data/point_data.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/async_instruments.h b/sdk/include/opentelemetry/sdk/metrics/async_instruments.h index 321c8089c1..a22ce1f0f8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/async_instruments.h +++ b/sdk/include/opentelemetry/sdk/metrics/async_instruments.h @@ -3,11 +3,12 @@ #pragma once +#include + #include "opentelemetry/metrics/async_instruments.h" #include "opentelemetry/metrics/observer_result.h" -#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/metrics/instruments.h" -#include "opentelemetry/sdk/metrics/state/observable_registry.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -16,6 +17,7 @@ namespace metrics { class AsyncWritableMetricStorage; +class ObservableRegistry; class ObservableInstrument : public opentelemetry::metrics::ObservableInstrument { diff --git a/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h b/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h new file mode 100644 index 0000000000..1608a3a011 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/data/circular_buffer.h @@ -0,0 +1,158 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "opentelemetry/nostd/variant.h" + +#include +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ + +/** + * An integer array that automatically expands its memory consumption (via copy/allocation) when + * reaching limits. This assumes counts remain low, to lower memory overhead. + * + * This class is NOT thread-safe. It is expected to be behind a synchronized incrementer. + * + * Instances start by attempting to store one-byte per-cell in the integer array. As values grow, + * this will automatically instantiate the next-size integer array (uint8_t -> uint16_t -> uint32_t + * -> uint64_t) and copy over values into the larger array. This class expects most usage to remain + * within the uint8_t boundary (e.g. cell values < 256). + */ +class AdaptingIntegerArray +{ +public: + // Construct an adapting integer array of a given size. + explicit AdaptingIntegerArray(size_t size) : backing_(std::vector(size, 0)) {} + AdaptingIntegerArray(const AdaptingIntegerArray &other) = default; + AdaptingIntegerArray(AdaptingIntegerArray &&other) = default; + AdaptingIntegerArray &operator=(const AdaptingIntegerArray &other) = default; + AdaptingIntegerArray &operator=(AdaptingIntegerArray &&other) = default; + + /** + * Increments the value at the specified index by the given count in the array. + * + * @param index The index of the value to increment. + * @param count The count by which to increment the value. + */ + void Increment(size_t index, uint64_t count); + + /** + * Returns the value at the specified index from the array. + * + * @param index The index of the value to retrieve. + * @return The value at the specified index. + */ + uint64_t Get(size_t index) const; + + /** + * Returns the size of the array. + * + * @return The size of the array. + */ + size_t Size() const; + + /** + * Clears the array, resetting all values to zero. + */ + void Clear(); + +private: + void EnlargeToFit(uint64_t value); + + nostd::variant, + std::vector, + std::vector, + std::vector> + backing_; +}; + +/** + * A circle-buffer-backed exponential counter. + * + * The first recorded value becomes the 'base_index'. Going backwards leads to start/stop index. + * + * This expand start/end index as it sees values. + * + * This class is NOT thread-safe. It is expected to be behind a synchronized incrementer. + */ +class AdaptingCircularBufferCounter +{ +public: + explicit AdaptingCircularBufferCounter(size_t max_size) : backing_(max_size) {} + AdaptingCircularBufferCounter(const AdaptingCircularBufferCounter &other) = default; + AdaptingCircularBufferCounter(AdaptingCircularBufferCounter &&other) = default; + AdaptingCircularBufferCounter &operator=(const AdaptingCircularBufferCounter &other) = default; + AdaptingCircularBufferCounter &operator=(AdaptingCircularBufferCounter &&other) = default; + + /** + * The first index with a recording. May be negative. + * + * Note: the returned value is not meaningful when Empty returns true. + * + * @return the first index with a recording. + */ + int32_t StartIndex() const { return start_index_; } + + /** + * The last index with a recording. May be negative. + * + * Note: the returned value is not meaningful when Empty returns true. + * + * @return The last index with a recording. + */ + int32_t EndIndex() const { return end_index_; } + + /** + * Returns true if no recordings, false if at least one recording. + */ + bool Empty() const { return base_index_ == kNullIndex; } + + /** + * Returns the maximum number of buckets allowed in this counter. + */ + size_t MaxSize() const { return backing_.Size(); } + + /** Resets all bucket counts to zero and resets index start/end tracking. **/ + void Clear(); + + /** + * Persist new data at index, incrementing by delta amount. + * + * @param index The index of where to perform the incrementation. + * @param delta How much to increment the index by. + * @return success status. + */ + bool Increment(int32_t index, uint64_t delta); + + /** + * Get the number of recordings for the given index. + * + * @return the number of recordings for the index, or 0 if the index is out of bounds. + */ + uint64_t Get(int32_t index); + +private: + size_t ToBufferIndex(int32_t index) const; + + static constexpr int32_t kNullIndex = std::numeric_limits::min(); + + // Index of the first populated element, may be kNullIndex if container is empty. + int32_t start_index_ = kNullIndex; + // Index of the last populated element, may be kNullIndex if container is empty. + int32_t end_index_ = kNullIndex; + // Index corresponding to the element located at the start of the backing array, may be kNullIndex + // if container is empty. + int32_t base_index_ = kNullIndex; + AdaptingIntegerArray backing_; +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/data/exemplar_data.h b/sdk/include/opentelemetry/sdk/metrics/data/exemplar_data.h index f04b06c9f6..0420b50aab 100644 --- a/sdk/include/opentelemetry/sdk/metrics/data/exemplar_data.h +++ b/sdk/include/opentelemetry/sdk/metrics/data/exemplar_data.h @@ -4,11 +4,12 @@ #pragma once #include + #include "opentelemetry/common/timestamp.h" -#include "opentelemetry/context/context.h" #include "opentelemetry/sdk/common/attribute_utils.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" -#include "opentelemetry/sdk/metrics/export/metric_producer.h" +#include "opentelemetry/trace/span_context.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/data/metric_data.h b/sdk/include/opentelemetry/sdk/metrics/data/metric_data.h index 28a53dd407..ad1084f581 100644 --- a/sdk/include/opentelemetry/sdk/metrics/data/metric_data.h +++ b/sdk/include/opentelemetry/sdk/metrics/data/metric_data.h @@ -3,12 +3,12 @@ #pragma once +#include + #include "opentelemetry/nostd/variant.h" #include "opentelemetry/sdk/common/attribute_utils.h" -#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/data/point_data.h" #include "opentelemetry/sdk/metrics/instruments.h" -#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/data/point_data.h b/sdk/include/opentelemetry/sdk/metrics/data/point_data.h index 62ba3df1bc..9bf82e040a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/data/point_data.h +++ b/sdk/include/opentelemetry/sdk/metrics/data/point_data.h @@ -3,13 +3,12 @@ #pragma once +#include + #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/variant.h" -#include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/version.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h index c10ec061bb..4a1366aa80 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h @@ -4,8 +4,14 @@ #pragma once #include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h index cfc3439992..f3bc904e26 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h @@ -3,12 +3,24 @@ #pragma once -#include "opentelemetry/context/context.h" +#include + #include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +class Context; +} // namespace context + namespace sdk { +namespace common +{ +class OrderedAttributeMap; +} // namespace common + namespace metrics { using MetricAttributes = opentelemetry::sdk::common::OrderedAttributeMap; diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h index 5264c33170..6ed97a689e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h @@ -5,13 +5,22 @@ #include #include -#include "opentelemetry/context/context.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/attribute_utils.h" + #include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class SystemTimestamp; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h index d2cc13f20c..76f5742ca2 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h @@ -5,6 +5,7 @@ #include #include + #include "opentelemetry/context/context.h" #include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/shared_ptr.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h index 7da7dc8ac0..bbc032df3b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h @@ -5,16 +5,25 @@ #include #include -#include "opentelemetry/context/context.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/attribute_utils.h" + #include "opentelemetry/sdk/metrics/data/exemplar_data.h" #include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class OrderedAttributeMap; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h index 1f2967467b..84d4ef9f77 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h @@ -4,8 +4,14 @@ #pragma once #include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h index d137991f71..edcde3c12f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h @@ -3,17 +3,30 @@ #pragma once +#include #include -#include "opentelemetry/context/context.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/attribute_utils.h" + +#include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class SystemTimestamp; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics { +class ExemplarData; + class NoExemplarReservoir final : public ExemplarReservoir { diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index ea418b698d..258e099f0f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -3,16 +3,30 @@ #pragma once +#include #include -#include "opentelemetry/sdk/metrics/data/exemplar_data.h" + #include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class SystemTimestamp; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics { +class ExemplarData; + /** * An interface for an exemplar reservoir of samples. * diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index 2309fc72e4..6074393d2d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -5,16 +5,20 @@ #include #include -#include + #include "opentelemetry/common/timestamp.h" -#include "opentelemetry/context/context.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/nostd/variant.h" #include "opentelemetry/sdk/metrics/data/exemplar_data.h" #include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/trace/context.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h index 1017d64aa7..b3b2f09e23 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h @@ -4,14 +4,18 @@ #pragma once #include -#include #include -#include "opentelemetry/context/context.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/attribute_utils.h" + +#include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h index de01cbc632..fbc0489d3d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h @@ -5,6 +5,7 @@ #include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/trace/context.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/export/metric_producer.h b/sdk/include/opentelemetry/sdk/metrics/export/metric_producer.h index 82b8c1c474..2a0c87fcaa 100644 --- a/sdk/include/opentelemetry/sdk/metrics/export/metric_producer.h +++ b/sdk/include/opentelemetry/sdk/metrics/export/metric_producer.h @@ -3,13 +3,25 @@ #pragma once -#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +#include + +#include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" -#include "opentelemetry/sdk/resource/resource.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + +namespace instrumentationscope +{ +class InstrumentationScope; +} // namespace instrumentationscope + namespace metrics { diff --git a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h index 83773ffb61..29c2e351e5 100644 --- a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h +++ b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h @@ -3,14 +3,16 @@ #pragma once -#include "opentelemetry/sdk/metrics/metric_reader.h" -#include "opentelemetry/version.h" - #include #include #include +#include +#include #include +#include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/instrument_metadata_validator.h b/sdk/include/opentelemetry/sdk/metrics/instrument_metadata_validator.h index 95848a8eec..fec1027746 100644 --- a/sdk/include/opentelemetry/sdk/metrics/instrument_metadata_validator.h +++ b/sdk/include/opentelemetry/sdk/metrics/instrument_metadata_validator.h @@ -4,6 +4,7 @@ #pragma once #include + #include "opentelemetry/common/macros.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/instruments.h b/sdk/include/opentelemetry/sdk/metrics/instruments.h index 6c6497555b..84244128a4 100644 --- a/sdk/include/opentelemetry/sdk/metrics/instruments.h +++ b/sdk/include/opentelemetry/sdk/metrics/instruments.h @@ -4,8 +4,10 @@ #pragma once #include -#include "opentelemetry/common/macros.h" +#include + #include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 6beff61063..41a10f69e9 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -4,15 +4,22 @@ #pragma once #include +#include +#include +#include +#include + +#include "opentelemetry/common/macros.h" #include "opentelemetry/metrics/meter.h" #include "opentelemetry/metrics/noop.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/instrument_metadata_validator.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_context.h" #include "opentelemetry/sdk/metrics/state/async_metric_storage.h" - -#include "opentelemetry/common/macros.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk_config.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index 75ab2a4be9..8155b4da9f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -3,18 +3,19 @@ #pragma once +#include +#include +#include +#include + #include "opentelemetry/common/spin_lock_mutex.h" -#include "opentelemetry/sdk/metrics/state/metric_collector.h" -#include "opentelemetry/sdk/metrics/view/instrument_selector.h" -#include "opentelemetry/sdk/metrics/view/meter_selector.h" +#include "opentelemetry/common/timestamp.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" -#include -#include -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -22,8 +23,11 @@ namespace metrics { // forward declaration +class CollectorHandle; +class InstrumentSelector; class Meter; class MetricReader; +class MeterSelector; /** * A class which stores the MeterProvider context. diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index f2c72e2d25..fedf6aac61 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -3,24 +3,30 @@ #pragma once +#include #include #include -#include -#include "opentelemetry/metrics/meter.h" + #include "opentelemetry/metrics/meter_provider.h" #include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/metrics/meter.h" -#include "opentelemetry/sdk/metrics/meter_context.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ +class Meter; +} // namespace metrics + namespace sdk { namespace metrics { // forward declaration +class MeterContext; class MetricCollector; class MetricReader; @@ -40,7 +46,7 @@ class MeterProvider final : public opentelemetry::metrics::MeterProvider * Initialize a new meter provider with a specified context * @param context The shared meter configuration/pipeline for this provider. */ - explicit MeterProvider(std::shared_ptr context) noexcept; + explicit MeterProvider(std::shared_ptr context) noexcept; nostd::shared_ptr GetMeter( nostd::string_view name, @@ -88,7 +94,7 @@ class MeterProvider final : public opentelemetry::metrics::MeterProvider ~MeterProvider() override; private: - std::shared_ptr context_; + std::shared_ptr context_; std::mutex lock_; }; } // namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/metric_reader.h b/sdk/include/opentelemetry/sdk/metrics/metric_reader.h index 86101e39a0..96b34a4427 100644 --- a/sdk/include/opentelemetry/sdk/metrics/metric_reader.h +++ b/sdk/include/opentelemetry/sdk/metrics/metric_reader.h @@ -3,21 +3,22 @@ #pragma once +#include +#include + #include "opentelemetry/common/spin_lock_mutex.h" -#include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" -#include "opentelemetry/sdk/metrics/export/metric_producer.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/version.h" -#include -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace metrics { +class MetricProducer; +struct ResourceMetrics; /** * MetricReader defines the interface to collect metrics from SDK diff --git a/sdk/include/opentelemetry/sdk/metrics/observer_result.h b/sdk/include/opentelemetry/sdk/metrics/observer_result.h index 4b6a55e3bc..38c5843633 100644 --- a/sdk/include/opentelemetry/sdk/metrics/observer_result.h +++ b/sdk/include/opentelemetry/sdk/metrics/observer_result.h @@ -3,12 +3,13 @@ #pragma once +#include + #include "opentelemetry/common/key_value_iterable.h" #include "opentelemetry/metrics/observer_result.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" - -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h b/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h index 58e2c68c62..409a826ca9 100644 --- a/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h +++ b/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h @@ -3,21 +3,20 @@ #pragma once -#include "opentelemetry/nostd/span.h" +#include + #include "opentelemetry/sdk/common/exporter_utils.h" -#include "opentelemetry/sdk/metrics/export/metric_producer.h" +#include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/version.h" -#include -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace metrics { - class MetricData; +struct ResourceMetrics; + /** * PushMetricExporter defines the interface to be used by metrics libraries to * push metrics data to the OpenTelemetry exporters. diff --git a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h index aad00bb5cf..aada06142a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h @@ -3,6 +3,10 @@ #pragma once +#include +#include +#include + #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" @@ -14,8 +18,6 @@ #include "opentelemetry/sdk/metrics/state/temporal_metric_storage.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h b/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h index 95cd8a7d10..e94c005ecc 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h @@ -3,8 +3,12 @@ #pragma once -#include "opentelemetry/sdk/metrics/data/metric_data.h" +#include +#include + #include "opentelemetry/sdk/metrics/export/metric_producer.h" +#include "opentelemetry/sdk/metrics/instruments.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h index 0f8f4ddba7..277b45fbb6 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h @@ -3,14 +3,28 @@ #pragma once -#include "opentelemetry/common/key_value_iterable_view.h" +#include +#include + #include "opentelemetry/common/timestamp.h" -#include "opentelemetry/context/context.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h index 421c12b34c..6202b0c7fb 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/multi_metric_storage.h @@ -3,13 +3,26 @@ #pragma once -#include "opentelemetry/common/key_value_iterable_view.h" +#include +#include +#include + +#include "opentelemetry/common/timestamp.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/metric_storage.h" - -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + namespace sdk { namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/state/observable_registry.h b/sdk/include/opentelemetry/sdk/metrics/state/observable_registry.h index 09c439afa4..5eb5b6d6ff 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/observable_registry.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/observable_registry.h @@ -3,13 +3,14 @@ #pragma once -#include "opentelemetry/common/timestamp.h" -#include "opentelemetry/metrics/async_instruments.h" - #include #include #include +#include "opentelemetry/common/timestamp.h" +#include "opentelemetry/metrics/async_instruments.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index b8146872e3..37b0e06707 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -3,8 +3,18 @@ #pragma once +#include +#include +#include +#include +#include #include -#include "opentelemetry/common/key_value_iterable_view.h" + +#include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" @@ -14,9 +24,7 @@ #include "opentelemetry/sdk/metrics/state/temporal_metric_storage.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" - -#include -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/state/temporal_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/temporal_metric_storage.h index 4ddc593149..0a08e7d100 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/temporal_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/temporal_metric_storage.h @@ -3,19 +3,26 @@ #pragma once -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" -#include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" -#include "opentelemetry/sdk/metrics/state/metric_collector.h" - #include #include +#include + +#include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/common/timestamp.h" +#include "opentelemetry/nostd/function_ref.h" +#include "opentelemetry/nostd/span.h" +#include "opentelemetry/sdk/metrics/instruments.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace metrics { +class AggregationConfig; +class AttributesHashMap; +class CollectorHandle; +class MetricData; struct LastReportedMetrics { diff --git a/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h b/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h index 803191170c..825547a846 100644 --- a/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h +++ b/sdk/include/opentelemetry/sdk/metrics/sync_instruments.h @@ -3,14 +3,13 @@ #pragma once -#include "opentelemetry/common/key_value_iterable.h" +#include + #include "opentelemetry/metrics/sync_instruments.h" -#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/metric_storage.h" #include "opentelemetry/sdk_config.h" - -#include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h b/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h index c3328bfa1e..91e4b268cf 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h @@ -3,7 +3,14 @@ #pragma once +#include +#include + +#include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/sdk/metrics/instruments.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/view/instrument_selector.h b/sdk/include/opentelemetry/sdk/metrics/view/instrument_selector.h index a8cf38b49f..2055ed96fa 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/instrument_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/instrument_selector.h @@ -3,9 +3,13 @@ #pragma once +#include + #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/view/predicate_factory.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/metrics/view/meter_selector.h b/sdk/include/opentelemetry/sdk/metrics/view/meter_selector.h index de61d21412..16d777b71f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/meter_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/meter_selector.h @@ -3,8 +3,11 @@ #pragma once +#include + #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/metrics/view/predicate_factory.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/view/predicate_factory.h b/sdk/include/opentelemetry/sdk/metrics/view/predicate_factory.h index 7df3955873..ba2303ff92 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/predicate_factory.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/predicate_factory.h @@ -3,8 +3,11 @@ #pragma once +#include + #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/metrics/view/predicate.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/view/view.h b/sdk/include/opentelemetry/sdk/metrics/view/view.h index 678c53f6c6..2d3edcee0e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/view.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/view.h @@ -3,12 +3,13 @@ #pragma once -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/nostd/string_view.h" +#include +#include + #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" -#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/view/view_registry.h b/sdk/include/opentelemetry/sdk/metrics/view/view_registry.h index 87773b2091..9f12259665 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/view_registry.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/view_registry.h @@ -3,11 +3,16 @@ #pragma once +#include #include +#include + +#include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/view/instrument_selector.h" #include "opentelemetry/sdk/metrics/view/meter_selector.h" #include "opentelemetry/sdk/metrics/view/view.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/resource/resource.h b/sdk/include/opentelemetry/sdk/resource/resource.h index 09da0b8c97..d578491d78 100644 --- a/sdk/include/opentelemetry/sdk/resource/resource.h +++ b/sdk/include/opentelemetry/sdk/resource/resource.h @@ -3,18 +3,11 @@ #pragma once -#include "opentelemetry/common/attribute_value.h" -#include "opentelemetry/common/key_value_iterable_view.h" +#include #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 -#include -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/resource/resource_detector.h b/sdk/include/opentelemetry/sdk/resource/resource_detector.h index 6447a2660d..dcbd874847 100644 --- a/sdk/include/opentelemetry/sdk/resource/resource_detector.h +++ b/sdk/include/opentelemetry/sdk/resource/resource_detector.h @@ -3,7 +3,7 @@ #pragma once -#include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -12,8 +12,6 @@ namespace sdk namespace resource { -class Resource; - /** * Interface for a Resource Detector */ diff --git a/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h b/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h index 60e93d8a9f..34d499a2ef 100644 --- a/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h +++ b/sdk/include/opentelemetry/sdk/trace/batch_span_processor.h @@ -3,21 +3,23 @@ #pragma once -#include "opentelemetry/sdk/common/circular_buffer.h" -#include "opentelemetry/sdk/trace/batch_span_processor_options.h" -#include "opentelemetry/sdk/trace/exporter.h" -#include "opentelemetry/sdk/trace/processor.h" - #include #include +#include +#include #include +#include "opentelemetry/sdk/common/circular_buffer.h" +#include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { - namespace trace { +class SpanExporter; +struct BatchSpanProcessorOptions; /** * This is an implementation of the SpanProcessor which creates batches of finished spans and passes diff --git a/sdk/include/opentelemetry/sdk/trace/batch_span_processor_factory.h b/sdk/include/opentelemetry/sdk/trace/batch_span_processor_factory.h index 6e66d2d2b9..4f645b2633 100644 --- a/sdk/include/opentelemetry/sdk/trace/batch_span_processor_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/batch_span_processor_factory.h @@ -5,16 +5,16 @@ #include -#include "opentelemetry/sdk/trace/batch_span_processor_options.h" -#include "opentelemetry/sdk/trace/exporter.h" -#include "opentelemetry/sdk/trace/processor.h" -#include "opentelemetry/sdk/version/version.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class SpanExporter; +class SpanProcessor; +struct BatchSpanProcessorOptions; /** * Factory class for BatchSpanProcessor. diff --git a/sdk/include/opentelemetry/sdk/trace/batch_span_processor_options.h b/sdk/include/opentelemetry/sdk/trace/batch_span_processor_options.h index 053126c065..ac1052383b 100644 --- a/sdk/include/opentelemetry/sdk/trace/batch_span_processor_options.h +++ b/sdk/include/opentelemetry/sdk/trace/batch_span_processor_options.h @@ -3,10 +3,10 @@ #pragma once -#include "opentelemetry/sdk/version/version.h" - #include +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/trace/exporter.h b/sdk/include/opentelemetry/sdk/trace/exporter.h index ffacca2b35..f9ed068b64 100644 --- a/sdk/include/opentelemetry/sdk/trace/exporter.h +++ b/sdk/include/opentelemetry/sdk/trace/exporter.h @@ -3,16 +3,20 @@ #pragma once +#include #include + #include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/common/exporter_utils.h" -#include "opentelemetry/sdk/trace/recordable.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class Recordable; + /** * SpanExporter defines the interface that protocol-specific span exporters must * implement. @@ -40,8 +44,7 @@ class OPENTELEMETRY_EXPORT SpanExporter * @param spans a span of unique pointers to span recordables */ virtual sdk::common::ExportResult Export( - const nostd::span> - &spans) noexcept = 0; + const nostd::span> &spans) noexcept = 0; /** * Export all spans that have been exported. diff --git a/sdk/include/opentelemetry/sdk/trace/id_generator.h b/sdk/include/opentelemetry/sdk/trace/id_generator.h index 559870d961..bd807ff89a 100644 --- a/sdk/include/opentelemetry/sdk/trace/id_generator.h +++ b/sdk/include/opentelemetry/sdk/trace/id_generator.h @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once + #include "opentelemetry/trace/span_id.h" #include "opentelemetry/trace/trace_id.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/trace/multi_recordable.h b/sdk/include/opentelemetry/sdk/trace/multi_recordable.h index 6abd39f90b..8519591286 100644 --- a/sdk/include/opentelemetry/sdk/trace/multi_recordable.h +++ b/sdk/include/opentelemetry/sdk/trace/multi_recordable.h @@ -3,13 +3,13 @@ #pragma once +#include + #include "opentelemetry/common/timestamp.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/recordable.h" #include "opentelemetry/version.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/include/opentelemetry/sdk/trace/multi_span_processor.h b/sdk/include/opentelemetry/sdk/trace/multi_span_processor.h index e3b4a2031e..094c5b3e24 100644 --- a/sdk/include/opentelemetry/sdk/trace/multi_span_processor.h +++ b/sdk/include/opentelemetry/sdk/trace/multi_span_processor.h @@ -3,13 +3,14 @@ #pragma once +#include +#include #include #include #include "opentelemetry/sdk/trace/multi_recordable.h" #include "opentelemetry/sdk/trace/processor.h" - -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/trace/processor.h b/sdk/include/opentelemetry/sdk/trace/processor.h index f87b893837..3701422eb5 100644 --- a/sdk/include/opentelemetry/sdk/trace/processor.h +++ b/sdk/include/opentelemetry/sdk/trace/processor.h @@ -5,13 +5,21 @@ #include #include -#include "opentelemetry/sdk/trace/recordable.h" + +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ +class SpanContext; +} // namespace trace + namespace sdk { namespace trace { +class Recordable; + /** * Span processor allow hooks for span start and end method invocations. * diff --git a/sdk/include/opentelemetry/sdk/trace/random_id_generator.h b/sdk/include/opentelemetry/sdk/trace/random_id_generator.h index 59df91651f..f06f02f5e7 100644 --- a/sdk/include/opentelemetry/sdk/trace/random_id_generator.h +++ b/sdk/include/opentelemetry/sdk/trace/random_id_generator.h @@ -2,7 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once + #include "opentelemetry/sdk/trace/id_generator.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/trace/random_id_generator_factory.h b/sdk/include/opentelemetry/sdk/trace/random_id_generator_factory.h index 1b8f7e3c3b..6c94984403 100644 --- a/sdk/include/opentelemetry/sdk/trace/random_id_generator_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/random_id_generator_factory.h @@ -5,13 +5,14 @@ #include -#include "opentelemetry/sdk/trace/id_generator.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class IdGenerator; /** * Factory class for RandomIdGenerator. diff --git a/sdk/include/opentelemetry/sdk/trace/recordable.h b/sdk/include/opentelemetry/sdk/trace/recordable.h index 721e33232d..cb73ef5f64 100644 --- a/sdk/include/opentelemetry/sdk/trace/recordable.h +++ b/sdk/include/opentelemetry/sdk/trace/recordable.h @@ -3,27 +3,33 @@ #pragma once +#include + #include "opentelemetry/common/attribute_value.h" -#include "opentelemetry/common/key_value_iterable.h" #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/empty_attributes.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" -#include "opentelemetry/sdk/resource/resource.h" -#include "opentelemetry/trace/canonical_code.h" -#include "opentelemetry/trace/span.h" #include "opentelemetry/trace/span_context.h" #include "opentelemetry/trace/span_id.h" -#include "opentelemetry/trace/trace_id.h" +#include "opentelemetry/trace/span_metadata.h" #include "opentelemetry/version.h" -#include - // TODO: Create generic short pattern for opentelemetry::common and opentelemetry::trace OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + namespace trace { diff --git a/sdk/include/opentelemetry/sdk/trace/sampler.h b/sdk/include/opentelemetry/sdk/trace/sampler.h index 799d490e8b..b90a2e66b2 100644 --- a/sdk/include/opentelemetry/sdk/trace/sampler.h +++ b/sdk/include/opentelemetry/sdk/trace/sampler.h @@ -3,19 +3,30 @@ #pragma once -#include "opentelemetry/common/attribute_value.h" -#include "opentelemetry/trace/span.h" -#include "opentelemetry/trace/span_context.h" -#include "opentelemetry/trace/span_context_kv_iterable.h" -#include "opentelemetry/trace/trace_id.h" -#include "opentelemetry/trace/trace_state.h" -#include "opentelemetry/version.h" - #include #include #include +#include "opentelemetry/common/attribute_value.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/trace/span_metadata.h" +#include "opentelemetry/trace/trace_id.h" +#include "opentelemetry/version.h" + OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace trace +{ +class SpanContext; +class SpanContextKeyValueIterable; +class TraceState; +} // namespace trace + namespace sdk { namespace trace diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/always_off.h b/sdk/include/opentelemetry/sdk/trace/samplers/always_off.h index 2392b9b2fb..a857086d23 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/always_off.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/always_off.h @@ -3,7 +3,12 @@ #pragma once +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/trace/span_context.h" +#include "opentelemetry/trace/span_metadata.h" +#include "opentelemetry/trace/trace_id.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/always_off_factory.h b/sdk/include/opentelemetry/sdk/trace/samplers/always_off_factory.h index 2ae09b229c..19f76c715f 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/always_off_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/always_off_factory.h @@ -5,13 +5,14 @@ #include -#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class Sampler; /** * Factory class for AlwaysOffSampler. diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/always_on.h b/sdk/include/opentelemetry/sdk/trace/samplers/always_on.h index 6c8583599d..6b983008c7 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/always_on.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/always_on.h @@ -3,9 +3,24 @@ #pragma once +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/trace/span_context.h" +#include "opentelemetry/trace/span_metadata.h" +#include "opentelemetry/trace/trace_id.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace trace +{ +class SpanContextKeyValueIterable; +} // namespace trace + namespace sdk { namespace trace diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/always_on_factory.h b/sdk/include/opentelemetry/sdk/trace/samplers/always_on_factory.h index 3484f0d4fa..c72d97fdec 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/always_on_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/always_on_factory.h @@ -5,13 +5,14 @@ #include -#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class Sampler; /** * Factory class for AlwaysOnSampler. diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/parent.h b/sdk/include/opentelemetry/sdk/trace/samplers/parent.h index c76a6c2a58..59dd314589 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/parent.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/parent.h @@ -3,10 +3,25 @@ #pragma once -#include "opentelemetry/sdk/common/atomic_shared_ptr.h" +#include + +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace trace +{ +class SpanContext; +class SpanContextKeyValueIterable; +class TraceState; +} // namespace trace + namespace sdk { namespace trace diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/parent_factory.h b/sdk/include/opentelemetry/sdk/trace/samplers/parent_factory.h index 006bdab1da..2fdf87819d 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/parent_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/parent_factory.h @@ -5,13 +5,14 @@ #include -#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class Sampler; /** * Factory class for ParentBasedSampler. diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio.h b/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio.h index 407b480d62..b5df576091 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio.h @@ -3,9 +3,27 @@ #pragma once +#include + +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/trace/span_metadata.h" +#include "opentelemetry/trace/trace_id.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class KeyValueIterable; +} // namespace common + +namespace trace +{ +class SpanContext; +class SpanContextKeyValueIterable; +class TraceState; +} // namespace trace + namespace sdk { namespace trace diff --git a/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h b/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h index 79728ba200..eb434fc6fe 100644 --- a/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/samplers/trace_id_ratio_factory.h @@ -5,13 +5,14 @@ #include -#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class Sampler; /** * Factory class for TraceIdRatioBasedSampler. diff --git a/sdk/include/opentelemetry/sdk/trace/simple_processor.h b/sdk/include/opentelemetry/sdk/trace/simple_processor.h index 671218d0cf..dee8e80bb8 100644 --- a/sdk/include/opentelemetry/sdk/trace/simple_processor.h +++ b/sdk/include/opentelemetry/sdk/trace/simple_processor.h @@ -4,11 +4,16 @@ #pragma once #include +#include +#include #include #include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/sdk/trace/recordable.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/trace/simple_processor_factory.h b/sdk/include/opentelemetry/sdk/trace/simple_processor_factory.h index efa3078a38..6a106e7f21 100644 --- a/sdk/include/opentelemetry/sdk/trace/simple_processor_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/simple_processor_factory.h @@ -5,14 +5,15 @@ #include -#include "opentelemetry/sdk/trace/exporter.h" -#include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class SpanExporter; +class SpanProcessor; /** * Factory class for SimpleSpanProcessor. diff --git a/sdk/include/opentelemetry/sdk/trace/span_data.h b/sdk/include/opentelemetry/sdk/trace/span_data.h index 61a7ced6fe..4e1a52ce5d 100644 --- a/sdk/include/opentelemetry/sdk/trace/span_data.h +++ b/sdk/include/opentelemetry/sdk/trace/span_data.h @@ -4,20 +4,23 @@ #pragma once #include +#include +#include +#include #include #include + #include "opentelemetry/common/attribute_value.h" #include "opentelemetry/common/macros.h" #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/attribute_utils.h" +#include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/trace/recordable.h" -#include "opentelemetry/trace/canonical_code.h" #include "opentelemetry/trace/span.h" #include "opentelemetry/trace/span_id.h" #include "opentelemetry/trace/trace_id.h" - -#include +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h index 3ac17aad66..67e606ba97 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -3,40 +3,46 @@ #pragma once +#include + #include "opentelemetry/common/macros.h" -#include "opentelemetry/sdk/common/atomic_shared_ptr.h" +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" -#include "opentelemetry/sdk/resource/resource.h" -#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/samplers/always_on.h" #include "opentelemetry/sdk/trace/tracer_context.h" -#include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer.h" #include "opentelemetry/version.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + namespace trace { +class IdGenerator; +class SpanProcessor; using namespace opentelemetry::sdk::instrumentationscope; -class Tracer final : public trace_api::Tracer, public std::enable_shared_from_this +class Tracer final : public opentelemetry::trace::Tracer, + public std::enable_shared_from_this { public: /** Construct a new Tracer with the given context pipeline. */ - explicit Tracer(std::shared_ptr context, + explicit Tracer(std::shared_ptr context, std::unique_ptr instrumentation_scope = InstrumentationScope::Create("")) noexcept; - nostd::shared_ptr StartSpan( + nostd::shared_ptr StartSpan( nostd::string_view name, const opentelemetry::common::KeyValueIterable &attributes, - const trace_api::SpanContextKeyValueIterable &links, - const trace_api::StartSpanOptions &options = {}) noexcept override; + const opentelemetry::trace::SpanContextKeyValueIterable &links, + const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; void ForceFlushWithMicroseconds(uint64_t timeout) noexcept override; @@ -70,7 +76,7 @@ class Tracer final : public trace_api::Tracer, public std::enable_shared_from_th // order of declaration is important here - instrumentation scope should destroy after // tracer-context. std::shared_ptr instrumentation_scope_; - std::shared_ptr context_; + std::shared_ptr context_; }; } // namespace trace } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_context.h b/sdk/include/opentelemetry/sdk/trace/tracer_context.h index 6dcdda8e01..9475c8c0b9 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_context.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_context.h @@ -3,7 +3,10 @@ #pragma once -#include "opentelemetry/sdk/common/atomic_unique_ptr.h" +#include +#include +#include + #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/random_id_generator.h" diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_context_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_context_factory.h index b03ae297fc..1911db8f93 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_context_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_context_factory.h @@ -3,16 +3,25 @@ #pragma once -#include "opentelemetry/sdk/resource/resource.h" -#include "opentelemetry/sdk/trace/processor.h" -#include "opentelemetry/sdk/trace/tracer_context.h" +#include +#include + #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + namespace trace { +class IdGenerator; +class Sampler; +class SpanProcessor; +class TracerContext; /** * Factory class for TracerContext. diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index 06088738c2..e15f686898 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -10,18 +10,22 @@ #include #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/resource/resource.h" -#include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/sdk/trace/random_id_generator.h" #include "opentelemetry/sdk/trace/samplers/always_on.h" -#include "opentelemetry/sdk/trace/tracer.h" -#include "opentelemetry/sdk/trace/tracer_context.h" #include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace { +class SpanProcessor; +class Tracer; +class TracerContext; + class TracerProvider final : public opentelemetry::trace::TracerProvider { public: @@ -40,24 +44,22 @@ class TracerProvider final : public opentelemetry::trace::TracerProvider opentelemetry::sdk::resource::Resource resource = opentelemetry::sdk::resource::Resource::Create({}), std::unique_ptr sampler = std::unique_ptr(new AlwaysOnSampler), - std::unique_ptr id_generator = - std::unique_ptr( - new RandomIdGenerator())) noexcept; + std::unique_ptr id_generator = + std::unique_ptr(new RandomIdGenerator())) noexcept; explicit TracerProvider( std::vector> &&processors, opentelemetry::sdk::resource::Resource resource = opentelemetry::sdk::resource::Resource::Create({}), std::unique_ptr sampler = std::unique_ptr(new AlwaysOnSampler), - std::unique_ptr id_generator = - std::unique_ptr( - new RandomIdGenerator())) noexcept; + std::unique_ptr id_generator = + std::unique_ptr(new RandomIdGenerator())) noexcept; /** * Initialize a new tracer provider with a specified context * @param context The shared tracer configuration/pipeline for this provider. */ - explicit TracerProvider(std::shared_ptr context) noexcept; + explicit TracerProvider(std::shared_ptr context) noexcept; ~TracerProvider() override; @@ -94,8 +96,8 @@ class TracerProvider final : public opentelemetry::trace::TracerProvider private: // order of declaration is important here - tracers should destroy only after context. - std::vector> tracers_; - std::shared_ptr context_; + std::vector> tracers_; + std::shared_ptr context_; std::mutex lock_; }; } // namespace trace diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider_factory.h index 14458b2409..93bd1085ac 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider_factory.h @@ -4,16 +4,29 @@ #pragma once #include +#include -#include "opentelemetry/sdk/trace/processor.h" -#include "opentelemetry/sdk/trace/tracer_context.h" -#include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE +namespace trace +{ +class TracerProvider; +} // namespace trace + namespace sdk { +namespace resource +{ +class Resource; +} // namespace resource + namespace trace { +class IdGenerator; +class Sampler; +class SpanProcessor; +class TracerContext; /** * Factory class for TracerProvider. @@ -65,7 +78,7 @@ class OPENTELEMETRY_EXPORT TracerProviderFactory /* Create with a tracer context. */ static std::unique_ptr Create( - std::shared_ptr context); + std::shared_ptr context); }; } // namespace trace diff --git a/sdk/include/opentelemetry/sdk/version/version.h b/sdk/include/opentelemetry/sdk/version/version.h index 570d575c81..1c9c285f90 100644 --- a/sdk/include/opentelemetry/sdk/version/version.h +++ b/sdk/include/opentelemetry/sdk/version/version.h @@ -5,7 +5,7 @@ #include "opentelemetry/detail/preprocessor.h" -#define OPENTELEMETRY_SDK_VERSION "1.9.0" +#define OPENTELEMETRY_SDK_VERSION "1.9.1" #include "opentelemetry/version.h" @@ -19,9 +19,6 @@ extern const int minor_version; extern const int patch_version; extern const char *pre_release; extern const char *build_metadata; -extern const int count_new_commits; -extern const char *branch; -extern const char *commit_hash; extern const char *short_version; extern const char *full_version; extern const char *build_date; diff --git a/sdk/src/common/global_log_handler.cc b/sdk/src/common/global_log_handler.cc index 040e3e2154..bd1b56a9cd 100644 --- a/sdk/src/common/global_log_handler.cc +++ b/sdk/src/common/global_log_handler.cc @@ -3,8 +3,7 @@ #include "opentelemetry/sdk/common/global_log_handler.h" -#include -#include +#include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/src/logs/batch_log_record_processor.cc b/sdk/src/logs/batch_log_record_processor.cc index 6b1db1c666..5487d70e80 100644 --- a/sdk/src/logs/batch_log_record_processor.cc +++ b/sdk/src/logs/batch_log_record_processor.cc @@ -2,10 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 #ifdef ENABLE_LOGS_PREVIEW + # include "opentelemetry/sdk/logs/batch_log_record_processor.h" # include "opentelemetry/common/spin_lock_mutex.h" +# include "opentelemetry/common/timestamp.h" +# include "opentelemetry/sdk/logs/recordable.h" # include + using opentelemetry::sdk::common::AtomicUniquePtr; using opentelemetry::sdk::common::CircularBufferRange; diff --git a/sdk/src/logs/logger.cc b/sdk/src/logs/logger.cc index 190bfe6f5a..e9ebb8bdc4 100644 --- a/sdk/src/logs/logger.cc +++ b/sdk/src/logs/logger.cc @@ -2,8 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 #ifdef ENABLE_LOGS_PREVIEW + # include "opentelemetry/sdk/logs/logger.h" # include "opentelemetry/context/runtime_context.h" +# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/sdk/logs/recordable.h" # include "opentelemetry/sdk_config.h" # include "opentelemetry/trace/provider.h" @@ -16,14 +19,13 @@ namespace trace_api = opentelemetry::trace; namespace nostd = opentelemetry::nostd; namespace common = opentelemetry::common; -Logger::Logger(nostd::string_view name, - std::shared_ptr context, - std::unique_ptr instrumentation_scope, - bool include_trace_context) noexcept +Logger::Logger( + nostd::string_view name, + std::shared_ptr context, + std::unique_ptr instrumentation_scope) noexcept : logger_name_(std::string(name)), instrumentation_scope_(std::move(instrumentation_scope)), - context_(context), - include_trace_context_(include_trace_context) + context_(context) {} const nostd::string_view Logger::GetName() noexcept @@ -43,16 +45,15 @@ nostd::unique_ptr Logger::CreateLogRecord() noex recordable->SetObservedTimestamp(std::chrono::system_clock::now()); - if (include_trace_context_ && - opentelemetry::context::RuntimeContext::GetCurrent().HasKey(opentelemetry::trace::kSpanKey)) + if (opentelemetry::context::RuntimeContext::GetCurrent().HasKey(opentelemetry::trace::kSpanKey)) { opentelemetry::context::ContextValue context_value = opentelemetry::context::RuntimeContext::GetCurrent().GetValue( opentelemetry::trace::kSpanKey); - if (nostd::holds_alternative>(context_value)) + if (nostd::holds_alternative>(context_value)) { - nostd::shared_ptr &data = - nostd::get>(context_value); + nostd::shared_ptr &data = + nostd::get>(context_value); if (data) { recordable->SetTraceId(data->GetContext().trace_id()); diff --git a/sdk/src/logs/logger_context_factory.cc b/sdk/src/logs/logger_context_factory.cc index 985743fd67..1fc07f53e5 100644 --- a/sdk/src/logs/logger_context_factory.cc +++ b/sdk/src/logs/logger_context_factory.cc @@ -4,6 +4,9 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/sdk/logs/logger_context_factory.h" +# include "opentelemetry/sdk/logs/logger_context.h" +# include "opentelemetry/sdk/logs/processor.h" +# include "opentelemetry/sdk/resource/resource.h" # include # include diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 2f75a09247..1e1b83c7de 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -5,12 +5,10 @@ # include "opentelemetry/sdk/logs/logger_provider.h" # include "opentelemetry/sdk/common/global_log_handler.h" - -# include -# include -# include -# include -# include +# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +# include "opentelemetry/sdk/logs/logger.h" +# include "opentelemetry/sdk/logs/logger_context.h" +# include "opentelemetry/sdk/logs/processor.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -61,7 +59,6 @@ nostd::shared_ptr LoggerProvider::GetLogger( nostd::string_view library_name, nostd::string_view library_version, nostd::string_view schema_url, - bool include_trace_context, const opentelemetry::common::KeyValueIterable &attributes) noexcept { // Ensure only one thread can read/write from the map of loggers @@ -105,7 +102,7 @@ nostd::shared_ptr LoggerProvider::GetLogger( } loggers_.push_back(std::shared_ptr( - new Logger(logger_name, context_, std::move(lib), include_trace_context))); + new Logger(logger_name, context_, std::move(lib)))); return nostd::shared_ptr{loggers_.back()}; } diff --git a/sdk/src/logs/multi_log_record_processor.cc b/sdk/src/logs/multi_log_record_processor.cc index 2859126f80..f6e6c2e176 100644 --- a/sdk/src/logs/multi_log_record_processor.cc +++ b/sdk/src/logs/multi_log_record_processor.cc @@ -4,10 +4,8 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/sdk/logs/multi_log_record_processor.h" - -# include -# include -# include +# include "opentelemetry/sdk/logs/multi_recordable.h" +# include "opentelemetry/sdk/logs/recordable.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/src/logs/multi_recordable.cc b/sdk/src/logs/multi_recordable.cc index 17e2c29777..c1e335ead2 100644 --- a/sdk/src/logs/multi_recordable.cc +++ b/sdk/src/logs/multi_recordable.cc @@ -101,6 +101,17 @@ void MultiRecordable::SetBody(const opentelemetry::common::AttributeValue &messa } } +void MultiRecordable::SetEventId(int64_t id, nostd::string_view name) noexcept +{ + for (auto &recordable : recordables_) + { + if (recordable.second) + { + recordable.second->SetEventId(id, name); + } + } +} + void MultiRecordable::SetTraceId(const opentelemetry::trace::TraceId &trace_id) noexcept { for (auto &recordable : recordables_) diff --git a/sdk/src/logs/read_write_log_record.cc b/sdk/src/logs/read_write_log_record.cc index e452fa20e9..f45c20adff 100644 --- a/sdk/src/logs/read_write_log_record.cc +++ b/sdk/src/logs/read_write_log_record.cc @@ -19,7 +19,9 @@ ReadWriteLogRecord::ReadWriteLogRecord() resource_(nullptr), instrumentation_scope_(nullptr), body_(nostd::string_view()), - observed_timestamp_(std::chrono::system_clock::now()) + observed_timestamp_(std::chrono::system_clock::now()), + event_id_(0), + event_name_("") {} ReadWriteLogRecord::~ReadWriteLogRecord() {} @@ -65,6 +67,22 @@ const opentelemetry::common::AttributeValue &ReadWriteLogRecord::GetBody() const return body_; } +void ReadWriteLogRecord::SetEventId(int64_t id, nostd::string_view name) noexcept +{ + event_id_ = id; + event_name_ = std::string{name}; +} + +int64_t ReadWriteLogRecord::GetEventId() const noexcept +{ + return event_id_; +} + +nostd::string_view ReadWriteLogRecord::GetEventName() const noexcept +{ + return nostd::string_view{event_name_}; +} + void ReadWriteLogRecord::SetTraceId(const opentelemetry::trace::TraceId &trace_id) noexcept { if (!trace_state_) diff --git a/sdk/src/logs/readable_log_record.cc b/sdk/src/logs/readable_log_record.cc index 9ed5ca7ae7..f02d475d47 100644 --- a/sdk/src/logs/readable_log_record.cc +++ b/sdk/src/logs/readable_log_record.cc @@ -3,11 +3,14 @@ #ifdef ENABLE_LOGS_PREVIEW +# include "opentelemetry/sdk/logs/readable_log_record.h" +# include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +# include "opentelemetry/sdk/resource/resource.h" +# include "opentelemetry/sdk/version/version.h" + # include # include -# include "opentelemetry/sdk/logs/readable_log_record.h" - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/src/logs/simple_log_record_processor.cc b/sdk/src/logs/simple_log_record_processor.cc index 50d4c20fdd..6514c7acff 100644 --- a/sdk/src/logs/simple_log_record_processor.cc +++ b/sdk/src/logs/simple_log_record_processor.cc @@ -2,10 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 #ifdef ENABLE_LOGS_PREVIEW + # include "opentelemetry/sdk/logs/simple_log_record_processor.h" +# include "opentelemetry/nostd/span.h" +# include "opentelemetry/sdk/logs/exporter.h" +# include "opentelemetry/sdk/logs/recordable.h" -# include -# include +# include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/src/metrics/CMakeLists.txt b/sdk/src/metrics/CMakeLists.txt index 7ee82c9cd5..cd831eaac8 100644 --- a/sdk/src/metrics/CMakeLists.txt +++ b/sdk/src/metrics/CMakeLists.txt @@ -14,9 +14,11 @@ add_library( state/observable_registry.cc state/sync_metric_storage.cc state/temporal_metric_storage.cc + aggregation/base2_exponential_histogram_indexer.cc aggregation/histogram_aggregation.cc aggregation/lastvalue_aggregation.cc aggregation/sum_aggregation.cc + data/circular_buffer.cc exemplar/filter.cc exemplar/reservoir.cc sync_instruments.cc) @@ -24,7 +26,8 @@ add_library( set_target_properties(opentelemetry_metrics PROPERTIES EXPORT_NAME metrics) set_target_version(opentelemetry_metrics) -target_link_libraries(opentelemetry_metrics PUBLIC opentelemetry_common) +target_link_libraries(opentelemetry_metrics PUBLIC opentelemetry_common + opentelemetry_resources) target_include_directories( opentelemetry_metrics diff --git a/sdk/src/metrics/aggregation/base2_exponential_histogram_indexer.cc b/sdk/src/metrics/aggregation/base2_exponential_histogram_indexer.cc new file mode 100644 index 0000000000..a46a2775e5 --- /dev/null +++ b/sdk/src/metrics/aggregation/base2_exponential_histogram_indexer.cc @@ -0,0 +1,71 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h" + +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ + +namespace +{ + +const double kLogBase2E = 1.0 / std::log(2.0); + +double ComputeScaleFactor(int32_t scale) +{ + return std::scalbn(kLogBase2E, scale); +} + +// Compute the bucket index using a logarithm based approach. +int32_t GetIndexByLogarithm(double value, double scale_factor) +{ + return static_cast(std::ceil(std::log(value) * scale_factor)) - 1; +} + +// Compute the bucket index at scale 0. +int32_t MapToIndexScaleZero(double value) +{ + // Note: std::frexp() rounds submnormal values to the smallest normal value and returns an + // exponent corresponding to fractions in the range [0.5, 1), whereas an exponent for the range + // [1, 2), so subtract 1 from the exponent immediately. + int exp; + double frac = std::frexp(value, &exp); + exp--; + + if (frac == 0.5) + { + // Special case for powers of two: they fall into the bucket numbered one less. + exp--; + } + return exp; +} + +} // namespace + +Base2ExponentialHistogramIndexer::Base2ExponentialHistogramIndexer(int32_t scale) + : scale_(scale), scale_factor_(scale > 0 ? ComputeScaleFactor(scale) : 0) +{} + +int32_t Base2ExponentialHistogramIndexer::ComputeIndex(double value) const +{ + const double abs_value = std::fabs(value); + // For positive scales, compute the index by logarithm, which is simpler but may be + // inaccurate near bucket boundaries + if (scale_ > 0) + { + return GetIndexByLogarithm(abs_value, scale_factor_); + } + // For scale zero, compute the exact index by extracting the exponent. + // For negative scales, compute the exact index by extracting the exponent and shifting it to + // the right by -scale + return MapToIndexScaleZero(abs_value) >> -scale_; +} + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/metrics/aggregation/histogram_aggregation.cc b/sdk/src/metrics/aggregation/histogram_aggregation.cc index fe01030f13..3213c27f16 100644 --- a/sdk/src/metrics/aggregation/histogram_aggregation.cc +++ b/sdk/src/metrics/aggregation/histogram_aggregation.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h" +#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #include "opentelemetry/version.h" #include diff --git a/sdk/src/metrics/async_instruments.cc b/sdk/src/metrics/async_instruments.cc index 1d2b1a9552..082d6713b4 100644 --- a/sdk/src/metrics/async_instruments.cc +++ b/sdk/src/metrics/async_instruments.cc @@ -3,10 +3,9 @@ #include "opentelemetry/sdk/metrics/async_instruments.h" #include "opentelemetry/sdk/metrics/state/metric_storage.h" +#include "opentelemetry/sdk/metrics/state/observable_registry.h" #include "opentelemetry/sdk_config.h" -#include - OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/src/metrics/data/circular_buffer.cc b/sdk/src/metrics/data/circular_buffer.cc new file mode 100644 index 0000000000..9117e67ae5 --- /dev/null +++ b/sdk/src/metrics/data/circular_buffer.cc @@ -0,0 +1,182 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/metrics/data/circular_buffer.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ + +namespace +{ + +struct AdaptingIntegerArrayIncrement +{ + size_t index; + uint64_t count; + + template + uint64_t operator()(std::vector &backing) + { + const uint64_t result = backing[index] + count; + OPENTELEMETRY_LIKELY_IF(result <= uint64_t(std::numeric_limits::max())) + { + backing[index] = static_cast(result); + return 0; + } + return result; + } +}; + +struct AdaptingIntegerArrayGet +{ + size_t index; + + template + uint64_t operator()(const std::vector &backing) + { + return backing[index]; + } +}; + +struct AdaptingIntegerArraySize +{ + template + size_t operator()(const std::vector &backing) + { + return backing.size(); + } +}; + +struct AdaptingIntegerArrayClear +{ + template + void operator()(std::vector &backing) + { + std::fill(backing.begin(), backing.end(), static_cast(0)); + } +}; + +struct AdaptingIntegerArrayCopy +{ + template + void operator()(const std::vector &from, std::vector &to) + { + for (size_t i = 0; i < from.size(); i++) + { + to[i] = static_cast(from[i]); + } + } +}; + +} // namespace + +void AdaptingIntegerArray::Increment(size_t index, uint64_t count) +{ + const uint64_t result = nostd::visit(AdaptingIntegerArrayIncrement{index, count}, backing_); + OPENTELEMETRY_LIKELY_IF(result == 0) { return; } + EnlargeToFit(result); + Increment(index, count); +} + +uint64_t AdaptingIntegerArray::Get(size_t index) const +{ + return nostd::visit(AdaptingIntegerArrayGet{index}, backing_); +} + +size_t AdaptingIntegerArray::Size() const +{ + return nostd::visit(AdaptingIntegerArraySize{}, backing_); +} + +void AdaptingIntegerArray::Clear() +{ + nostd::visit(AdaptingIntegerArrayClear{}, backing_); +} + +void AdaptingIntegerArray::EnlargeToFit(uint64_t value) +{ + const size_t backing_size = Size(); + decltype(backing_) backing; + if (value <= std::numeric_limits::max()) + { + backing = std::vector(backing_size, 0); + } + else if (value <= std::numeric_limits::max()) + { + backing = std::vector(backing_size, 0); + } + else + { + backing = std::vector(backing_size, 0); + } + std::swap(backing_, backing); + nostd::visit(AdaptingIntegerArrayCopy{}, backing, backing_); +} + +void AdaptingCircularBufferCounter::Clear() +{ + start_index_ = kNullIndex; + end_index_ = kNullIndex; + base_index_ = kNullIndex; + backing_.Clear(); +} + +bool AdaptingCircularBufferCounter::Increment(int32_t index, uint64_t delta) +{ + if (Empty()) + { + start_index_ = index; + end_index_ = index; + base_index_ = index; + backing_.Increment(0, delta); + return true; + } + + if (index > end_index_) + { + // Move end, check max size. + if (index + 1 > static_cast(backing_.Size()) + start_index_) + { + return false; + } + end_index_ = index; + } + else if (index < start_index_) + { + // Move end, check max size. + if (end_index_ + 1 > static_cast(backing_.Size()) + index) + { + return false; + } + start_index_ = index; + } + backing_.Increment(ToBufferIndex(index), delta); + return true; +} + +uint64_t AdaptingCircularBufferCounter::Get(int32_t index) +{ + if (index < start_index_ || index > end_index_) + { + return 0; + } + return backing_.Get(ToBufferIndex(index)); +} + +size_t AdaptingCircularBufferCounter::ToBufferIndex(int32_t index) const +{ + // Figure out the index relative to the start of the circular buffer. + if (index < base_index_) + { + // If index is before the base one, wrap around. + return static_cast(index + backing_.Size() - base_index_); + } + return static_cast(index - base_index_); +} + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index de25153e1d..eaf82232d6 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -4,8 +4,10 @@ #include "opentelemetry/sdk/metrics/meter_context.h" #include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/sdk/metrics/state/metric_collector.h" #include "opentelemetry/sdk_config.h" -#include "opentelemetry/version.h" + +#include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/src/metrics/meter_provider.cc b/sdk/src/metrics/meter_provider.cc index 051ee7269e..1e9dc5f434 100644 --- a/sdk/src/metrics/meter_provider.cc +++ b/sdk/src/metrics/meter_provider.cc @@ -3,6 +3,8 @@ #include "opentelemetry/sdk/metrics/meter_provider.h" #include "opentelemetry/metrics/meter.h" +#include "opentelemetry/sdk/metrics/meter.h" +#include "opentelemetry/sdk/metrics/meter_context.h" #include "opentelemetry/sdk/metrics/metric_reader.h" #include "opentelemetry/sdk/common/global_log_handler.h" diff --git a/sdk/src/metrics/metric_reader.cc b/sdk/src/metrics/metric_reader.cc index a778f0c41c..8b1998fbd3 100644 --- a/sdk/src/metrics/metric_reader.cc +++ b/sdk/src/metrics/metric_reader.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/metrics/metric_reader.h" +#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/metrics/export/metric_producer.h" #include diff --git a/sdk/src/metrics/state/temporal_metric_storage.cc b/sdk/src/metrics/state/temporal_metric_storage.cc index 148588ad54..f988551108 100644 --- a/sdk/src/metrics/state/temporal_metric_storage.cc +++ b/sdk/src/metrics/state/temporal_metric_storage.cc @@ -1,14 +1,16 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include -#include -#include -#include "opentelemetry/nostd/shared_ptr.h" - +#include "opentelemetry/sdk/metrics/state/temporal_metric_storage.h" +#include "opentelemetry/common/spin_lock_mutex.h" #include "opentelemetry/metrics/meter.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" -#include "opentelemetry/sdk/metrics/state/temporal_metric_storage.h" +#include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" +#include "opentelemetry/sdk/metrics/state/metric_collector.h" + +#include +#include +#include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/src/resource/resource.cc b/sdk/src/resource/resource.cc index f71e17a8a7..12f8e16d43 100644 --- a/sdk/src/resource/resource.cc +++ b/sdk/src/resource/resource.cc @@ -5,6 +5,7 @@ #include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/resource/resource_detector.h" #include "opentelemetry/sdk/resource/semantic_conventions.h" +#include "opentelemetry/sdk/version/version.h" #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/src/resource/resource_detector.cc b/sdk/src/resource/resource_detector.cc index f5c856f088..82e47a71ad 100644 --- a/sdk/src/resource/resource_detector.cc +++ b/sdk/src/resource/resource_detector.cc @@ -5,6 +5,9 @@ #include "opentelemetry/sdk/common/env_variables.h" #include "opentelemetry/sdk/resource/resource.h" +#include +#include + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { diff --git a/sdk/src/trace/batch_span_processor.cc b/sdk/src/trace/batch_span_processor.cc index da9f39f054..dd69eaa68f 100644 --- a/sdk/src/trace/batch_span_processor.cc +++ b/sdk/src/trace/batch_span_processor.cc @@ -3,9 +3,14 @@ #include "opentelemetry/sdk/trace/batch_span_processor.h" #include "opentelemetry/common/spin_lock_mutex.h" +#include "opentelemetry/common/timestamp.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/trace/batch_span_processor_options.h" +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/recordable.h" #include + using opentelemetry::sdk::common::AtomicUniquePtr; using opentelemetry::sdk::common::CircularBuffer; using opentelemetry::sdk::common::CircularBufferRange; diff --git a/sdk/src/trace/samplers/parent.cc b/sdk/src/trace/samplers/parent.cc index 3aa6b4a455..990e1a954a 100644 --- a/sdk/src/trace/samplers/parent.cc +++ b/sdk/src/trace/samplers/parent.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/trace/samplers/parent.h" +#include "opentelemetry/trace/span_context.h" namespace trace_api = opentelemetry::trace; diff --git a/sdk/src/trace/span.cc b/sdk/src/trace/span.cc index 138c966af3..c7524d43aa 100644 --- a/sdk/src/trace/span.cc +++ b/sdk/src/trace/span.cc @@ -5,6 +5,8 @@ #include "src/common/random.h" #include "opentelemetry/context/runtime_context.h" +#include "opentelemetry/sdk/trace/recordable.h" +#include "opentelemetry/trace/span_metadata.h" #include "opentelemetry/trace/trace_flags.h" #include "opentelemetry/version.h" @@ -48,10 +50,10 @@ SteadyTimestamp NowOr(const SteadyTimestamp &steady) Span::Span(std::shared_ptr &&tracer, nostd::string_view name, const common::KeyValueIterable &attributes, - const trace_api::SpanContextKeyValueIterable &links, - const trace_api::StartSpanOptions &options, - const trace_api::SpanContext &parent_span_context, - std::unique_ptr span_context) noexcept + const opentelemetry::trace::SpanContextKeyValueIterable &links, + const opentelemetry::trace::StartSpanOptions &options, + const opentelemetry::trace::SpanContext &parent_span_context, + std::unique_ptr span_context) noexcept : tracer_{std::move(tracer)}, recordable_{tracer_->GetProcessor().MakeRecordable()}, start_steady_time{options.start_steady_time}, @@ -66,7 +68,7 @@ Span::Span(std::shared_ptr &&tracer, recordable_->SetInstrumentationScope(tracer_->GetInstrumentationScope()); recordable_->SetIdentity(*span_context_, parent_span_context.IsValid() ? parent_span_context.span_id() - : trace_api::SpanId()); + : opentelemetry::trace::SpanId()); attributes.ForEachKeyValue([&](nostd::string_view key, common::AttributeValue value) noexcept { recordable_->SetAttribute(key, value); @@ -164,7 +166,7 @@ void Span::UpdateName(nostd::string_view name) noexcept recordable_->SetName(name); } -void Span::End(const trace_api::EndSpanOptions &options) noexcept +void Span::End(const opentelemetry::trace::EndSpanOptions &options) noexcept { std::lock_guard lock_guard{mu_}; diff --git a/sdk/src/trace/tracer.cc b/sdk/src/trace/tracer.cc index 07fd36d5b7..6ca7b37df5 100644 --- a/sdk/src/trace/tracer.cc +++ b/sdk/src/trace/tracer.cc @@ -3,13 +3,10 @@ #include "opentelemetry/sdk/trace/tracer.h" #include "opentelemetry/context/runtime_context.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/atomic_shared_ptr.h" #include "opentelemetry/trace/context.h" -#include "opentelemetry/version.h" -#include "src/trace/span.h" +#include "opentelemetry/trace/noop.h" -#include +#include "src/trace/span.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -17,21 +14,21 @@ namespace sdk namespace trace { -Tracer::Tracer(std::shared_ptr context, +Tracer::Tracer(std::shared_ptr context, std::unique_ptr instrumentation_scope) noexcept : instrumentation_scope_{std::move(instrumentation_scope)}, context_{context} {} -nostd::shared_ptr Tracer::StartSpan( +nostd::shared_ptr Tracer::StartSpan( nostd::string_view name, const opentelemetry::common::KeyValueIterable &attributes, - const trace_api::SpanContextKeyValueIterable &links, - const trace_api::StartSpanOptions &options) noexcept + const opentelemetry::trace::SpanContextKeyValueIterable &links, + const opentelemetry::trace::StartSpanOptions &options) noexcept { - trace_api::SpanContext parent_context = GetCurrentSpan()->GetContext(); - if (nostd::holds_alternative(options.parent)) + opentelemetry::trace::SpanContext parent_context = GetCurrentSpan()->GetContext(); + if (nostd::holds_alternative(options.parent)) { - auto span_context = nostd::get(options.parent); + auto span_context = nostd::get(options.parent); if (span_context.IsValid()) { parent_context = span_context; @@ -48,9 +45,9 @@ nostd::shared_ptr Tracer::StartSpan( } } - trace_api::TraceId trace_id; - trace_api::SpanId span_id = GetIdGenerator().GenerateSpanId(); - bool is_parent_span_valid = false; + opentelemetry::trace::TraceId trace_id; + opentelemetry::trace::SpanId span_id = GetIdGenerator().GenerateSpanId(); + bool is_parent_span_valid = false; if (parent_context.IsValid()) { @@ -64,28 +61,32 @@ nostd::shared_ptr Tracer::StartSpan( auto sampling_result = context_->GetSampler().ShouldSample(parent_context, trace_id, name, options.kind, attributes, links); - auto trace_flags = sampling_result.IsSampled() - ? trace_api::TraceFlags{trace_api::TraceFlags::kIsSampled} - : trace_api::TraceFlags{}; - - auto span_context = std::unique_ptr(new trace_api::SpanContext( - trace_id, span_id, trace_flags, false, - sampling_result.trace_state ? sampling_result.trace_state - : is_parent_span_valid ? parent_context.trace_state() - : trace_api::TraceState::GetDefault())); + auto trace_flags = + sampling_result.IsSampled() + ? opentelemetry::trace::TraceFlags{opentelemetry::trace::TraceFlags::kIsSampled} + : opentelemetry::trace::TraceFlags{}; + + auto span_context = + std::unique_ptr(new opentelemetry::trace::SpanContext( + trace_id, span_id, trace_flags, false, + sampling_result.trace_state + ? sampling_result.trace_state + : is_parent_span_valid ? parent_context.trace_state() + : opentelemetry::trace::TraceState::GetDefault())); if (!sampling_result.IsRecording()) { // create no-op span with valid span-context. - auto noop_span = nostd::shared_ptr{ - new (std::nothrow) trace_api::NoopSpan(this->shared_from_this(), std::move(span_context))}; + auto noop_span = nostd::shared_ptr{ + new (std::nothrow) + opentelemetry::trace::NoopSpan(this->shared_from_this(), std::move(span_context))}; return noop_span; } else { - auto span = nostd::shared_ptr{ + auto span = nostd::shared_ptr{ new (std::nothrow) Span{this->shared_from_this(), name, attributes, links, options, parent_context, std::move(span_context)}}; diff --git a/sdk/src/trace/tracer_provider.cc b/sdk/src/trace/tracer_provider.cc index b5eed6312f..7ac66ed6db 100644 --- a/sdk/src/trace/tracer_provider.cc +++ b/sdk/src/trace/tracer_provider.cc @@ -3,6 +3,9 @@ #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/trace/processor.h" +#include "opentelemetry/sdk/trace/tracer.h" +#include "opentelemetry/sdk/trace/tracer_context.h" #include "opentelemetry/sdk_config.h" OPENTELEMETRY_BEGIN_NAMESPACE diff --git a/sdk/src/trace/tracer_provider_factory.cc b/sdk/src/trace/tracer_provider_factory.cc index df25694781..158ae949ea 100644 --- a/sdk/src/trace/tracer_provider_factory.cc +++ b/sdk/src/trace/tracer_provider_factory.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/trace/tracer_provider_factory.h" +#include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/random_id_generator_factory.h" #include "opentelemetry/sdk/trace/samplers/always_on_factory.h" #include "opentelemetry/sdk/trace/tracer_provider.h" diff --git a/sdk/src/version/version.cc b/sdk/src/version/version.cc index cd28813491..a658331f27 100644 --- a/sdk/src/version/version.cc +++ b/sdk/src/version/version.cc @@ -11,18 +11,14 @@ namespace sdk { namespace version { -const int major_version = 1; -const int minor_version = 9; -const int patch_version = 0; -const char *pre_release = "NONE"; -const char *build_metadata = "NONE"; -const int count_new_commits = 26; -const char *branch = "pre_release_1.9.0"; -const char *commit_hash = "a9876353337d5de74323b8935479618c9b422d09"; -const char *short_version = "1.9.0"; -const char *full_version = - "1.9.0-NONE-NONE-26-pre_release_1.9.0-a9876353337d5de74323b8935479618c9b422d09"; -const char *build_date = "Wed 12 Apr 2023 03:32:28 PM UTC"; +const int major_version = 1; +const int minor_version = 9; +const int patch_version = 1; +const char *pre_release = "NONE"; +const char *build_metadata = "NONE"; +const char *short_version = "1.9.1"; +const char *full_version = "1.9.1-NONE-NONE"; +const char *build_date = "Fri 26 May 2023 07:14:07 AM UTC"; } // namespace version } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/test/logs/batch_log_record_processor_test.cc b/sdk/test/logs/batch_log_record_processor_test.cc index 462e9b8397..41ae2c5123 100644 --- a/sdk/test/logs/batch_log_record_processor_test.cc +++ b/sdk/test/logs/batch_log_record_processor_test.cc @@ -42,6 +42,8 @@ class MockLogRecordable final : public opentelemetry::sdk::logs::Recordable void SetBody(const std::string &message) noexcept { body_ = message; } + void SetEventId(int64_t, nostd::string_view) noexcept override {} + void SetTraceId(const opentelemetry::trace::TraceId &) noexcept override {} void SetSpanId(const opentelemetry::trace::SpanId &) noexcept override {} diff --git a/sdk/test/logs/log_record_test.cc b/sdk/test/logs/log_record_test.cc index 3ad3acaca5..0e5de03050 100644 --- a/sdk/test/logs/log_record_test.cc +++ b/sdk/test/logs/log_record_test.cc @@ -3,8 +3,16 @@ #ifdef ENABLE_LOGS_PREVIEW +# include +# include +# include +# include + +# include "opentelemetry/logs/logger.h" +# include "opentelemetry/logs/provider.h" # include "opentelemetry/nostd/variant.h" # include "opentelemetry/sdk/logs/read_write_log_record.h" +# include "opentelemetry/sdk/resource/resource.h" # include "opentelemetry/trace/span_id.h" # include "opentelemetry/trace/trace_id.h" @@ -69,4 +77,250 @@ TEST(ReadWriteLogRecord, SetAndGet) ASSERT_EQ(record.GetTraceFlags(), trace_flags); ASSERT_EQ(record.GetTimestamp().time_since_epoch(), now.time_since_epoch()); } + +// Define a basic Logger class +class TestBodyLogger : public opentelemetry::logs::Logger +{ +public: + const nostd::string_view GetName() noexcept override { return "test body logger"; } + + nostd::unique_ptr CreateLogRecord() noexcept override + { + return nostd::unique_ptr(new ReadWriteLogRecord()); + } + + using opentelemetry::logs::Logger::EmitLogRecord; + + void EmitLogRecord(nostd::unique_ptr &&record) noexcept override + { + if (record) + { + last_body_ = static_cast(record.get())->GetBody(); + } + } + + const opentelemetry::v1::common::AttributeValue &GetLastLogRecord() const noexcept + { + return last_body_; + } + +private: + opentelemetry::v1::common::AttributeValue last_body_; +}; + +// Define a basic LoggerProvider class that returns an instance of the logger class defined above +class TestBodyProvider : public opentelemetry::logs::LoggerProvider +{ +public: + using opentelemetry::logs::LoggerProvider::GetLogger; + + nostd::shared_ptr GetLogger( + nostd::string_view /* logger_name */, + nostd::string_view /* library_name */, + nostd::string_view /* library_version */, + nostd::string_view /* schema_url */, + const opentelemetry::common::KeyValueIterable & /* attributes */) override + { + return nostd::shared_ptr(new TestBodyLogger()); + } +}; + +TEST(LogBody, BodyConversation) +{ + // Push the new loggerprovider class into the global singleton + TestBodyProvider lp; + + // Check that the implementation was pushed by calling TestLogger's GetName() + nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.11.0"}; + auto logger = lp.GetLogger("TestBodyProvider", "opentelelemtry_library", "", schema_url, {}); + + auto real_logger = static_cast(logger.get()); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, true); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + ASSERT_TRUE(opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, static_cast(123)); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + ASSERT_EQ(123, opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, static_cast(124)); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + ASSERT_EQ(124, opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, static_cast(125)); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + ASSERT_EQ(125, opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, static_cast(126)); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + ASSERT_EQ(126, opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, static_cast(127.0)); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + ASSERT_TRUE(std::abs(127.0 - opentelemetry::nostd::get(real_logger->GetLastLogRecord())) < + 0.0001); + + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, "128"); + ASSERT_TRUE( + opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord()) || + opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())); + if (opentelemetry::nostd::holds_alternative(real_logger->GetLastLogRecord())) + { + ASSERT_EQ(nostd::string_view{"128"}, + opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + } + else + { + ASSERT_EQ(nostd::string_view{"128"}, + opentelemetry::nostd::get(real_logger->GetLastLogRecord())); + } + + { + bool data[] = {true, false, true}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } + + { + int32_t data[] = {221, 222, 223}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } + + { + uint32_t data[] = {231, 232, 233}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } + + { + int64_t data[] = {241, 242, 243}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } + + { + uint64_t data[] = {251, 252, 253}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } + + { + uint8_t data[] = {161, 162, 163}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } + + { + double data[] = {271.0, 272.0, 273.0}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>(real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_TRUE(std::abs(data_span[i] - output[i]) < 0.0001); + } + } + + { + std::string data_origin[] = {"281", "282", "283"}; + nostd::string_view data[] = {data_origin[0], data_origin[1], data_origin[2]}; + nostd::span data_span = data; + real_logger->EmitLogRecord(opentelemetry::logs::Severity::kInfo, data_span); + ASSERT_TRUE(opentelemetry::nostd::holds_alternative>( + real_logger->GetLastLogRecord())); + + nostd::span output = + opentelemetry::nostd::get>( + real_logger->GetLastLogRecord()); + + ASSERT_EQ(data_span.size(), output.size()); + + for (size_t i = 0; i < data_span.size(); ++i) + { + ASSERT_EQ(data_span[i], output[i]); + } + } +} + #endif diff --git a/sdk/test/logs/logger_provider_sdk_test.cc b/sdk/test/logs/logger_provider_sdk_test.cc index cf993dc44c..e9bc897745 100644 --- a/sdk/test/logs/logger_provider_sdk_test.cc +++ b/sdk/test/logs/logger_provider_sdk_test.cc @@ -10,6 +10,7 @@ # include "opentelemetry/nostd/shared_ptr.h" # include "opentelemetry/nostd/string_view.h" # include "opentelemetry/sdk/logs/event_logger_provider_factory.h" +# include "opentelemetry/sdk/logs/exporter.h" # include "opentelemetry/sdk/logs/logger.h" # include "opentelemetry/sdk/logs/logger_provider.h" # include "opentelemetry/sdk/logs/recordable.h" @@ -75,7 +76,7 @@ TEST(LoggerProviderSDK, LoggerProviderLoggerArguments) auto sdk_logger2 = static_cast(logger2.get()); ASSERT_EQ(sdk_logger2->GetInstrumentationScope(), sdk_logger1->GetInstrumentationScope()); - auto logger3 = lp->GetLogger("logger3", "opentelelemtry_library", "", schema_url, true, + auto logger3 = lp->GetLogger("logger3", "opentelelemtry_library", "", schema_url, {{"scope_key1", "scope_value"}, {"scope_key2", 2}}); auto sdk_logger3 = static_cast(logger3.get()); @@ -89,7 +90,7 @@ TEST(LoggerProviderSDK, LoggerProviderLoggerArguments) std::unordered_map scope_attributes = {{"scope_key", "scope_value"}}; auto logger4 = - lp->GetLogger("logger4", "opentelelemtry_library", "", schema_url, true, scope_attributes); + lp->GetLogger("logger4", "opentelelemtry_library", "", schema_url, scope_attributes); auto sdk_logger4 = static_cast(logger4.get()); EXPECT_EQ(sdk_logger4->GetInstrumentationScope().GetAttributes().size(), 1); @@ -123,6 +124,8 @@ class DummyLogRecordable final : public opentelemetry::sdk::logs::Recordable void SetBody(const opentelemetry::common::AttributeValue &) noexcept override {} + void SetEventId(int64_t, nostd::string_view) noexcept override {} + void SetTraceId(const opentelemetry::trace::TraceId &) noexcept override {} void SetSpanId(const opentelemetry::trace::SpanId &) noexcept override {} diff --git a/sdk/test/logs/logger_sdk_test.cc b/sdk/test/logs/logger_sdk_test.cc index 5f6467cd91..66f9edb8c5 100644 --- a/sdk/test/logs/logger_sdk_test.cc +++ b/sdk/test/logs/logger_sdk_test.cc @@ -6,14 +6,19 @@ # include # include +# include "opentelemetry/logs/logger_provider.h" # include "opentelemetry/nostd/string_view.h" -# include "opentelemetry/nostd/variant.h" # include "opentelemetry/sdk/logs/event_logger.h" # include "opentelemetry/sdk/logs/event_logger_provider.h" # include "opentelemetry/sdk/logs/logger.h" +# include "opentelemetry/sdk/logs/logger_provider.h" +# include "opentelemetry/sdk/logs/processor.h" # include "opentelemetry/sdk/logs/recordable.h" +# include "opentelemetry/sdk/trace/processor.h" +# include "opentelemetry/sdk/trace/tracer_provider.h" # include "opentelemetry/sdk/trace/tracer_provider_factory.h" # include "opentelemetry/trace/scope.h" +# include "opentelemetry/trace/tracer.h" # include @@ -78,6 +83,12 @@ class MockLogRecordable final : public opentelemetry::sdk::logs::Recordable void SetBody(const std::string &message) noexcept { body_ = message; } + void SetEventId(int64_t id, nostd::string_view name) noexcept override + { + event_id_ = id; + log_record_event_name_ = static_cast(name); + } + void SetTraceId(const opentelemetry::trace::TraceId &trace_id) noexcept override { trace_id_ = trace_id; @@ -144,6 +155,8 @@ class MockLogRecordable final : public opentelemetry::sdk::logs::Recordable private: opentelemetry::logs::Severity severity_ = opentelemetry::logs::Severity::kInvalid; std::string body_; + int64_t event_id_; + std::string log_record_event_name_; opentelemetry::trace::TraceId trace_id_; opentelemetry::trace::SpanId span_id_; opentelemetry::trace::TraceFlags trace_flags_; @@ -191,13 +204,13 @@ TEST(LoggerSDK, LogToAProcessor) // Create an API LoggerProvider and logger auto api_lp = std::shared_ptr(new LoggerProvider()); const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"}; - auto logger = api_lp->GetLogger("logger", "opentelelemtry_library", "", schema_url, true); + auto logger = api_lp->GetLogger("logger", "opentelelemtry_library", "", schema_url); // Cast the API LoggerProvider to an SDK Logger Provider and assert that it is still the same // LoggerProvider by checking that getting a logger with the same name as the previously defined // logger is the same instance auto lp = static_cast(api_lp.get()); - auto logger2 = lp->GetLogger("logger", "opentelelemtry_library", "", schema_url, true); + auto logger2 = lp->GetLogger("logger", "opentelelemtry_library", "", schema_url); ASSERT_EQ(logger, logger2); nostd::shared_ptr include_span; @@ -252,7 +265,7 @@ TEST(LoggerSDK, EventLog) // Create an API LoggerProvider and logger auto api_lp = std::shared_ptr(new LoggerProvider()); const std::string schema_url{"https://opentelemetry.io/schemas/1.11.0"}; - auto logger = api_lp->GetLogger("logger", "opentelelemtry_library", "", schema_url, false); + auto logger = api_lp->GetLogger("logger", "opentelelemtry_library", "", schema_url); auto api_elp = std::shared_ptr(new EventLoggerProvider()); auto event_logger = api_elp->CreateEventLogger(logger, "otel-cpp.event_domain"); diff --git a/sdk/test/logs/simple_log_record_processor_test.cc b/sdk/test/logs/simple_log_record_processor_test.cc index 2d377cd924..7d45cc85c2 100644 --- a/sdk/test/logs/simple_log_record_processor_test.cc +++ b/sdk/test/logs/simple_log_record_processor_test.cc @@ -42,6 +42,8 @@ class TestLogRecordable final : public opentelemetry::sdk::logs::Recordable void SetBody(const char *message) noexcept { body_ = message; } + void SetEventId(int64_t, nostd::string_view) noexcept override {} + void SetTraceId(const opentelemetry::trace::TraceId &) noexcept override {} void SetSpanId(const opentelemetry::trace::SpanId &) noexcept override {} diff --git a/sdk/test/metrics/BUILD b/sdk/test/metrics/BUILD index d7ed9e5fb6..3cf379494d 100644 --- a/sdk/test/metrics/BUILD +++ b/sdk/test/metrics/BUILD @@ -270,6 +270,36 @@ cc_test( ], ) +cc_test( + name = "circular_buffer_counter_test", + srcs = [ + "circular_buffer_counter_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "//sdk/src/metrics", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "base2_exponential_histogram_indexer_test", + srcs = [ + "base2_exponential_histogram_indexer_test.cc", + ], + tags = [ + "metrics", + "test", + ], + deps = [ + "metrics_common_test_utils", + "@com_google_googletest//:gtest_main", + ], +) + cc_test( name = "histogram_aggregation_test", srcs = [ @@ -330,6 +360,21 @@ otel_cc_benchmark( ], ) +otel_cc_benchmark( + name = "base2_exponential_histogram_indexer_benchmark", + srcs = [ + "base2_exponential_histogram_indexer_benchmark.cc", + ], + tags = [ + "benchmark", + "metrics", + "test", + ], + deps = [ + "metrics_common_test_utils", + ], +) + otel_cc_benchmark( name = "histogram_aggregation_benchmark", srcs = [ diff --git a/sdk/test/metrics/CMakeLists.txt b/sdk/test/metrics/CMakeLists.txt index c167a27dd5..b30d71ae22 100644 --- a/sdk/test/metrics/CMakeLists.txt +++ b/sdk/test/metrics/CMakeLists.txt @@ -14,6 +14,8 @@ foreach( histogram_aggregation_test attributes_processor_test attributes_hashmap_test + base2_exponential_histogram_indexer_test + circular_buffer_counter_test histogram_test sync_metric_storage_counter_test sync_metric_storage_histogram_test @@ -47,6 +49,12 @@ if(WITH_BENCHMARK) target_link_libraries(attributes_hashmap_benchmark benchmark::benchmark ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common) + add_executable(base2_exponential_histogram_indexer_benchmark + base2_exponential_histogram_indexer_benchmark.cc) + target_link_libraries( + base2_exponential_histogram_indexer_benchmark benchmark::benchmark + opentelemetry_metrics ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common) + add_executable(histogram_aggregation_benchmark histogram_aggregation_benchmark.cc) target_link_libraries( diff --git a/sdk/test/metrics/aggregation_test.cc b/sdk/test/metrics/aggregation_test.cc index 9f307cb015..94e5f4c1fa 100644 --- a/sdk/test/metrics/aggregation_test.cc +++ b/sdk/test/metrics/aggregation_test.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/lastvalue_aggregation.h" #include "opentelemetry/sdk/metrics/aggregation/sum_aggregation.h" diff --git a/sdk/test/metrics/async_instruments_test.cc b/sdk/test/metrics/async_instruments_test.cc index 87d0a441d5..10c0335559 100644 --- a/sdk/test/metrics/async_instruments_test.cc +++ b/sdk/test/metrics/async_instruments_test.cc @@ -3,6 +3,7 @@ #include "opentelemetry/sdk/metrics/async_instruments.h" #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" +#include "opentelemetry/sdk/metrics/state/observable_registry.h" #include diff --git a/sdk/test/metrics/attributes_hashmap_benchmark.cc b/sdk/test/metrics/attributes_hashmap_benchmark.cc index f0286ec09e..0568080a6d 100644 --- a/sdk/test/metrics/attributes_hashmap_benchmark.cc +++ b/sdk/test/metrics/attributes_hashmap_benchmark.cc @@ -9,6 +9,8 @@ #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include +#include +#include #include using namespace opentelemetry::sdk::metrics; diff --git a/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc b/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc new file mode 100644 index 0000000000..9f1d0d864d --- /dev/null +++ b/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc @@ -0,0 +1,65 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h" + +#include +#include +#include + +using namespace opentelemetry::sdk::metrics; +namespace +{ + +void BM_NewIndexer(benchmark::State &state) +{ + std::array batch; + std::default_random_engine generator; + std::uniform_int_distribution distribution(1, 32); + + while (state.KeepRunningBatch(static_cast(batch.size()))) + { + state.PauseTiming(); + for (auto &value : batch) + { + value = distribution(generator); + } + state.ResumeTiming(); + + for (const auto value : batch) + { + benchmark::DoNotOptimize(Base2ExponentialHistogramIndexer(value)); + } + } +} + +BENCHMARK(BM_NewIndexer); + +void BM_ComputeIndex(benchmark::State &state) +{ + std::array batch; + std::default_random_engine generator; + std::uniform_real_distribution distribution(0, 1000); + Base2ExponentialHistogramIndexer indexer(static_cast(state.range(0))); + + while (state.KeepRunningBatch(static_cast(batch.size()))) + { + state.PauseTiming(); + for (auto &value : batch) + { + value = distribution(generator); + } + state.ResumeTiming(); + + for (const auto value : batch) + { + benchmark::DoNotOptimize(indexer.ComputeIndex(value)); + } + } +} + +BENCHMARK(BM_ComputeIndex)->Arg(-1)->Arg(0)->Arg(1)->Arg(20); + +} // namespace + +BENCHMARK_MAIN(); diff --git a/sdk/test/metrics/base2_exponential_histogram_indexer_test.cc b/sdk/test/metrics/base2_exponential_histogram_indexer_test.cc new file mode 100644 index 0000000000..85f6fe72e9 --- /dev/null +++ b/sdk/test/metrics/base2_exponential_histogram_indexer_test.cc @@ -0,0 +1,178 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/metrics/aggregation/base2_exponential_histogram_indexer.h" + +#include + +using namespace opentelemetry::sdk::metrics; + +TEST(Base2ExponentialHistogramIndexerTest, ScaleOne) +{ + const Base2ExponentialHistogramIndexer indexer{1}; + auto compute_index = [indexer](double value) { return indexer.ComputeIndex(value); }; + + EXPECT_EQ(compute_index(std::numeric_limits::max()), 2047); + EXPECT_EQ(compute_index(strtod("0x1p1023", nullptr)), 2045); + EXPECT_EQ(compute_index(strtod("0x1.1p1023", nullptr)), 2046); + EXPECT_EQ(compute_index(strtod("0x1p1022", nullptr)), 2043); + EXPECT_EQ(compute_index(strtod("0x1.1p1022", nullptr)), 2044); + EXPECT_EQ(compute_index(strtod("0x1p-1022", nullptr)), -2045); + EXPECT_EQ(compute_index(strtod("0x1.1p-1022", nullptr)), -2044); + EXPECT_EQ(compute_index(strtod("0x1p-1021", nullptr)), -2043); + EXPECT_EQ(compute_index(strtod("0x1.1p-1021", nullptr)), -2042); + EXPECT_EQ(compute_index(std::numeric_limits::min()), -2045); + EXPECT_EQ(compute_index(std::numeric_limits::denorm_min()), -2149); + EXPECT_EQ(compute_index(15.0), 7); + EXPECT_EQ(compute_index(9.0), 6); + EXPECT_EQ(compute_index(7.0), 5); + EXPECT_EQ(compute_index(5.0), 4); + EXPECT_EQ(compute_index(3.0), 3); + EXPECT_EQ(compute_index(2.5), 2); + EXPECT_EQ(compute_index(1.5), 1); + EXPECT_EQ(compute_index(1.2), 0); + EXPECT_EQ(compute_index(1.0), -1); + EXPECT_EQ(compute_index(0.75), -1); + EXPECT_EQ(compute_index(0.55), -2); + EXPECT_EQ(compute_index(0.45), -3); +} + +TEST(Base2ExponentialHistogramIndexerTest, ScaleZero) +{ + const Base2ExponentialHistogramIndexer indexer{0}; + auto compute_index = [indexer](double value) { return indexer.ComputeIndex(value); }; + + // Near +Inf. + // Use constant for exp, as max_exponent constant includes bias. + EXPECT_EQ(compute_index(std::numeric_limits::max()), 1023); + EXPECT_EQ(compute_index(strtod("0x1p1023", nullptr)), 1022); + EXPECT_EQ(compute_index(strtod("0x1.1p1023", nullptr)), 1023); + EXPECT_EQ(compute_index(strtod("0x1p1022", nullptr)), 1021); + EXPECT_EQ(compute_index(strtod("0x1.1p1022", nullptr)), 1022); + // Near 0. + EXPECT_EQ(compute_index(strtod("0x1p-1022", nullptr)), -1023); + EXPECT_EQ(compute_index(strtod("0x1.1p-1022", nullptr)), -1022); + EXPECT_EQ(compute_index(strtod("0x1p-1021", nullptr)), -1022); + EXPECT_EQ(compute_index(strtod("0x1.1p-1021", nullptr)), -1021); + EXPECT_EQ(compute_index(std::numeric_limits::min()), -1023); + EXPECT_EQ(compute_index(std::numeric_limits::denorm_min()), -1075); + // Near 1. + EXPECT_EQ(compute_index(4.0), 1); + EXPECT_EQ(compute_index(3.0), 1); + EXPECT_EQ(compute_index(2.0), 0); + EXPECT_EQ(compute_index(1.5), 0); + EXPECT_EQ(compute_index(1.0), -1); + EXPECT_EQ(compute_index(0.75), -1); + EXPECT_EQ(compute_index(0.51), -1); + EXPECT_EQ(compute_index(0.5), -2); + EXPECT_EQ(compute_index(0.26), -2); + EXPECT_EQ(compute_index(0.25), -3); + EXPECT_EQ(compute_index(0.126), -3); + EXPECT_EQ(compute_index(0.125), -4); +} + +TEST(Base2ExponentialHistogramIndexerTest, ScaleNegativeOne) +{ + const Base2ExponentialHistogramIndexer indexer{-1}; + auto compute_index = [indexer](double value) { return indexer.ComputeIndex(value); }; + + EXPECT_EQ(compute_index(17.0), 2); + EXPECT_EQ(compute_index(16.0), 1); + EXPECT_EQ(compute_index(15.0), 1); + EXPECT_EQ(compute_index(9.0), 1); + EXPECT_EQ(compute_index(8.0), 1); + EXPECT_EQ(compute_index(5.0), 1); + EXPECT_EQ(compute_index(4.0), 0); + EXPECT_EQ(compute_index(3.0), 0); + EXPECT_EQ(compute_index(2.0), 0); + EXPECT_EQ(compute_index(1.5), 0); + EXPECT_EQ(compute_index(1.0), -1); + EXPECT_EQ(compute_index(0.75), -1); + EXPECT_EQ(compute_index(0.5), -1); + EXPECT_EQ(compute_index(0.25), -2); + EXPECT_EQ(compute_index(0.20), -2); + EXPECT_EQ(compute_index(0.13), -2); + EXPECT_EQ(compute_index(0.125), -2); + EXPECT_EQ(compute_index(0.10), -2); + EXPECT_EQ(compute_index(0.0625), -3); + EXPECT_EQ(compute_index(0.06), -3); +} + +TEST(Base2ExponentialHistogramIndexerTest, ScaleNegativeFour) +{ + const Base2ExponentialHistogramIndexer indexer{-4}; + auto compute_index = [indexer](double value) { return indexer.ComputeIndex(value); }; + + EXPECT_EQ(compute_index(strtod("0x1p0", nullptr)), -1); + EXPECT_EQ(compute_index(strtod("0x10p0", nullptr)), 0); + EXPECT_EQ(compute_index(strtod("0x100p0", nullptr)), 0); + EXPECT_EQ(compute_index(strtod("0x1000p0", nullptr)), 0); + EXPECT_EQ(compute_index(strtod("0x10000p0", nullptr)), 0); // Base == 2**16 + EXPECT_EQ(compute_index(strtod("0x100000p0", nullptr)), 1); + EXPECT_EQ(compute_index(strtod("0x1000000p0", nullptr)), 1); + EXPECT_EQ(compute_index(strtod("0x10000000p0", nullptr)), 1); + EXPECT_EQ(compute_index(strtod("0x100000000p0", nullptr)), 1); // == 2**32 + EXPECT_EQ(compute_index(strtod("0x1000000000p0", nullptr)), 2); + EXPECT_EQ(compute_index(strtod("0x10000000000p0", nullptr)), 2); + EXPECT_EQ(compute_index(strtod("0x100000000000p0", nullptr)), 2); + EXPECT_EQ(compute_index(strtod("0x1000000000000p0", nullptr)), 2); // 2**48 + EXPECT_EQ(compute_index(strtod("0x10000000000000p0", nullptr)), 3); + EXPECT_EQ(compute_index(strtod("0x100000000000000p0", nullptr)), 3); + EXPECT_EQ(compute_index(strtod("0x1000000000000000p0", nullptr)), 3); + EXPECT_EQ(compute_index(strtod("0x10000000000000000p0", nullptr)), 3); // 2**64 + EXPECT_EQ(compute_index(strtod("0x100000000000000000p0", nullptr)), 4); + EXPECT_EQ(compute_index(strtod("0x1000000000000000000p0", nullptr)), 4); + EXPECT_EQ(compute_index(strtod("0x10000000000000000000p0", nullptr)), 4); + EXPECT_EQ(compute_index(strtod("0x100000000000000000000p0", nullptr)), 4); + EXPECT_EQ(compute_index(strtod("0x1000000000000000000000p0", nullptr)), 5); + EXPECT_EQ(compute_index(1 / strtod("0x1p0", nullptr)), -1); + EXPECT_EQ(compute_index(1 / strtod("0x10p0", nullptr)), -1); + EXPECT_EQ(compute_index(1 / strtod("0x100p0", nullptr)), -1); + EXPECT_EQ(compute_index(1 / strtod("0x1000p0", nullptr)), -1); + EXPECT_EQ(compute_index(1 / strtod("0x10000p0", nullptr)), -2); // 2**-16 + EXPECT_EQ(compute_index(1 / strtod("0x100000p0", nullptr)), -2); + EXPECT_EQ(compute_index(1 / strtod("0x1000000p0", nullptr)), -2); + EXPECT_EQ(compute_index(1 / strtod("0x10000000p0", nullptr)), -2); + EXPECT_EQ(compute_index(1 / strtod("0x100000000p0", nullptr)), -3); // 2**-32 + EXPECT_EQ(compute_index(1 / strtod("0x1000000000p0", nullptr)), -3); + EXPECT_EQ(compute_index(1 / strtod("0x10000000000p0", nullptr)), -3); + EXPECT_EQ(compute_index(1 / strtod("0x100000000000p0", nullptr)), -3); + EXPECT_EQ(compute_index(1 / strtod("0x1000000000000p0", nullptr)), -4); // 2**-48 + EXPECT_EQ(compute_index(1 / strtod("0x10000000000000p0", nullptr)), -4); + EXPECT_EQ(compute_index(1 / strtod("0x100000000000000p0", nullptr)), -4); + EXPECT_EQ(compute_index(1 / strtod("0x1000000000000000p0", nullptr)), -4); + EXPECT_EQ(compute_index(1 / strtod("0x10000000000000000p0", nullptr)), -5); // 2**-64 + EXPECT_EQ(compute_index(1 / strtod("0x100000000000000000p0", nullptr)), -5); + // Max values. + EXPECT_EQ(compute_index(0x1.FFFFFFFFFFFFFp1023), 63); + EXPECT_EQ(compute_index(strtod("0x1p1023", nullptr)), 63); + EXPECT_EQ(compute_index(strtod("0x1p1019", nullptr)), 63); + EXPECT_EQ(compute_index(strtod("0x1p1009", nullptr)), 63); + EXPECT_EQ(compute_index(strtod("0x1p1008", nullptr)), 62); + EXPECT_EQ(compute_index(strtod("0x1p1007", nullptr)), 62); + EXPECT_EQ(compute_index(strtod("0x1p1000", nullptr)), 62); + EXPECT_EQ(compute_index(strtod("0x1p0993", nullptr)), 62); + EXPECT_EQ(compute_index(strtod("0x1p0992", nullptr)), 61); + EXPECT_EQ(compute_index(strtod("0x1p0991", nullptr)), 61); + // Min and subnormal values. + EXPECT_EQ(compute_index(strtod("0x1p-1074", nullptr)), -68); + EXPECT_EQ(compute_index(strtod("0x1p-1073", nullptr)), -68); + EXPECT_EQ(compute_index(strtod("0x1p-1072", nullptr)), -68); + EXPECT_EQ(compute_index(strtod("0x1p-1057", nullptr)), -67); + EXPECT_EQ(compute_index(strtod("0x1p-1056", nullptr)), -67); + EXPECT_EQ(compute_index(strtod("0x1p-1041", nullptr)), -66); + EXPECT_EQ(compute_index(strtod("0x1p-1040", nullptr)), -66); + EXPECT_EQ(compute_index(strtod("0x1p-1025", nullptr)), -65); + EXPECT_EQ(compute_index(strtod("0x1p-1024", nullptr)), -65); + EXPECT_EQ(compute_index(strtod("0x1p-1023", nullptr)), -64); + EXPECT_EQ(compute_index(strtod("0x1p-1022", nullptr)), -64); + EXPECT_EQ(compute_index(strtod("0x1p-1009", nullptr)), -64); + EXPECT_EQ(compute_index(strtod("0x1p-1008", nullptr)), -64); + EXPECT_EQ(compute_index(strtod("0x1p-1007", nullptr)), -63); + EXPECT_EQ(compute_index(strtod("0x1p-0993", nullptr)), -63); + EXPECT_EQ(compute_index(strtod("0x1p-0992", nullptr)), -63); + EXPECT_EQ(compute_index(strtod("0x1p-0991", nullptr)), -62); + EXPECT_EQ(compute_index(strtod("0x1p-0977", nullptr)), -62); + EXPECT_EQ(compute_index(strtod("0x1p-0976", nullptr)), -62); + EXPECT_EQ(compute_index(strtod("0x1p-0975", nullptr)), -61); +} diff --git a/sdk/test/metrics/circular_buffer_counter_test.cc b/sdk/test/metrics/circular_buffer_counter_test.cc new file mode 100644 index 0000000000..a8218d9e6b --- /dev/null +++ b/sdk/test/metrics/circular_buffer_counter_test.cc @@ -0,0 +1,149 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/sdk/metrics/data/circular_buffer.h" + +#include +#include + +using namespace opentelemetry::sdk::metrics; + +class AdaptingIntegerArrayTest : public testing::TestWithParam +{}; + +INSTANTIATE_TEST_SUITE_P(InterestingValues, + AdaptingIntegerArrayTest, + testing::Values(1, + std::numeric_limits::max() + 1ull, + std::numeric_limits::max() + 1ull, + std::numeric_limits::max() + 1ull)); + +TEST_P(AdaptingIntegerArrayTest, PreservesSizeOnEnlargement) +{ + AdaptingIntegerArray counter(10); + EXPECT_EQ(counter.Size(), 10); + counter.Increment(0, GetParam()); + EXPECT_EQ(counter.Size(), 10); +} + +TEST_P(AdaptingIntegerArrayTest, IncrementAndGet) +{ + AdaptingIntegerArray counter(10); + for (int idx = 0; idx < 10; idx += 1) + { + EXPECT_EQ(counter.Get(idx), 0); + counter.Increment(idx, 1); + EXPECT_EQ(counter.Get(idx), 1); + counter.Increment(idx, GetParam()); + EXPECT_EQ(counter.Get(idx), GetParam() + 1); + } +} + +TEST_P(AdaptingIntegerArrayTest, Copy) +{ + AdaptingIntegerArray counter(10); + counter.Increment(0, GetParam()); + EXPECT_EQ(counter.Get(0), GetParam()); + + AdaptingIntegerArray copy = counter; + EXPECT_EQ(copy.Get(0), GetParam()); + + counter.Increment(0, 1); + EXPECT_EQ(counter.Get(0), GetParam() + 1); + EXPECT_EQ(copy.Get(0), GetParam()); +} + +TEST_P(AdaptingIntegerArrayTest, Clear) +{ + AdaptingIntegerArray counter(10); + counter.Increment(0, GetParam()); + EXPECT_EQ(counter.Get(0), GetParam()); + + counter.Clear(); + counter.Increment(0, 1); + EXPECT_EQ(counter.Get(0), 1); +} + +TEST(AdaptingCircularBufferCounterTest, ReturnsZeroOutsidePopulatedRange) +{ + AdaptingCircularBufferCounter counter{10}; + EXPECT_EQ(counter.Get(0), 0); + EXPECT_EQ(counter.Get(100), 0); + counter.Increment(2, 1); + counter.Increment(99, 1); + EXPECT_EQ(counter.Get(0), 0); + EXPECT_EQ(counter.Get(100), 0); +} + +TEST(AdaptingCircularBufferCounterTest, ExpandLower) +{ + AdaptingCircularBufferCounter counter{160}; + EXPECT_TRUE(counter.Increment(10, 1)); + // Add BEFORE the initial see (array index 0) and make sure we wrap around the datastructure. + EXPECT_TRUE(counter.Increment(0, 1)); + EXPECT_EQ(counter.Get(10), 1); + EXPECT_EQ(counter.Get(0), 1); + EXPECT_EQ(counter.StartIndex(), 0); + EXPECT_EQ(counter.EndIndex(), 10); + // Add AFTER initial entry and just push back end. + EXPECT_TRUE(counter.Increment(20, 1)); + EXPECT_EQ(counter.Get(20), 1); + EXPECT_EQ(counter.Get(10), 1); + EXPECT_EQ(counter.Get(0), 1); + EXPECT_EQ(counter.StartIndex(), 0); + EXPECT_EQ(counter.EndIndex(), 20); +} + +TEST(AdaptingCircularBufferCounterTest, ShouldFailAtLimit) +{ + AdaptingCircularBufferCounter counter{10}; + EXPECT_TRUE(counter.Increment(10, 1)); + EXPECT_TRUE(counter.Increment(15, 2)); + EXPECT_TRUE(counter.Increment(6, 3)); + // Check state + EXPECT_EQ(counter.StartIndex(), 6); + EXPECT_EQ(counter.EndIndex(), 15); + EXPECT_EQ(counter.Get(6), 3); + EXPECT_EQ(counter.Get(10), 1); + EXPECT_EQ(counter.Get(15), 2); + // Adding over the maximum # of buckets + EXPECT_FALSE(counter.Increment(5, 1)); + EXPECT_FALSE(counter.Increment(16, 1)); +} + +TEST(AdaptingCircularBufferCounterTest, ShouldCopyCounters) +{ + AdaptingCircularBufferCounter counter{2}; + EXPECT_TRUE(counter.Increment(2, 1)); + EXPECT_TRUE(counter.Increment(1, 1)); + EXPECT_FALSE(counter.Increment(3, 1)); + + AdaptingCircularBufferCounter copy{counter}; + EXPECT_EQ(counter.Get(2), 1); + EXPECT_EQ(copy.Get(2), 1); + EXPECT_EQ(copy.MaxSize(), counter.MaxSize()); + EXPECT_EQ(copy.StartIndex(), counter.StartIndex()); + EXPECT_EQ(copy.EndIndex(), counter.EndIndex()); + // Mutate copy and make sure original is unchanged. + EXPECT_TRUE(copy.Increment(2, 1)); + EXPECT_EQ(copy.Get(2), 2); + EXPECT_EQ(counter.Get(2), 1); +} + +TEST(AdaptingCircularBufferCounterTest, Clear) +{ + AdaptingCircularBufferCounter counter{10}; + EXPECT_TRUE(counter.Empty()); + EXPECT_TRUE(counter.Increment(2, 1)); + EXPECT_FALSE(counter.Empty()); + EXPECT_TRUE(counter.Increment(8, 1)); + // Check state. + EXPECT_EQ(counter.StartIndex(), 2); + EXPECT_EQ(counter.EndIndex(), 8); + EXPECT_EQ(counter.Get(2), 1); + EXPECT_EQ(counter.Get(8), 1); + // Clear and verify. + EXPECT_FALSE(counter.Empty()); + counter.Clear(); + EXPECT_TRUE(counter.Empty()); +} diff --git a/sdk/test/metrics/exemplar/always_sample_filter_test.cc b/sdk/test/metrics/exemplar/always_sample_filter_test.cc index cd9e58f284..30c86fd37f 100644 --- a/sdk/test/metrics/exemplar/always_sample_filter_test.cc +++ b/sdk/test/metrics/exemplar/always_sample_filter_test.cc @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 #include + +#include "opentelemetry/context/context.h" #include "opentelemetry/sdk/metrics/exemplar/filter.h" using namespace opentelemetry::sdk::metrics; diff --git a/sdk/test/metrics/multi_metric_storage_test.cc b/sdk/test/metrics/multi_metric_storage_test.cc index 1c230bafcf..e7e4151f09 100644 --- a/sdk/test/metrics/multi_metric_storage_test.cc +++ b/sdk/test/metrics/multi_metric_storage_test.cc @@ -9,7 +9,6 @@ #include using namespace opentelemetry; -using namespace opentelemetry::sdk::instrumentationscope; using namespace opentelemetry::sdk::metrics; class TestMetricStorage : public SyncWritableMetricStorage diff --git a/sdk/test/resource/resource_test.cc b/sdk/test/resource/resource_test.cc index 803d5666d9..96de75c04a 100644 --- a/sdk/test/resource/resource_test.cc +++ b/sdk/test/resource/resource_test.cc @@ -2,15 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/resource/resource.h" -#include "opentelemetry/common/key_value_iterable_view.h" -#include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/attribute_utils.h" #include "opentelemetry/sdk/resource/resource_detector.h" #include "opentelemetry/sdk/resource/semantic_conventions.h" +#include "opentelemetry/sdk/version/version.h" #include +#include #include -#include #include diff --git a/sdk/test/trace/batch_span_processor_test.cc b/sdk/test/trace/batch_span_processor_test.cc index b7a6558538..411b4dacfe 100644 --- a/sdk/test/trace/batch_span_processor_test.cc +++ b/sdk/test/trace/batch_span_processor_test.cc @@ -2,11 +2,15 @@ // SPDX-License-Identifier: Apache-2.0 #include "opentelemetry/sdk/trace/batch_span_processor.h" +#include "opentelemetry/sdk/common/exporter_utils.h" #include "opentelemetry/sdk/common/global_log_handler.h" +#include "opentelemetry/sdk/trace/batch_span_processor_options.h" +#include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/span_data.h" #include "opentelemetry/sdk/trace/tracer.h" #include + #include #include #include diff --git a/sdk/test/trace/sampler_benchmark.cc b/sdk/test/trace/sampler_benchmark.cc index 17999dcf26..42de190980 100644 --- a/sdk/test/trace/sampler_benchmark.cc +++ b/sdk/test/trace/sampler_benchmark.cc @@ -69,11 +69,13 @@ void BenchmarkShouldSampler(Sampler &sampler, benchmark::State &state) using M = std::map; M m1 = {{}}; - using L = std::vector>>; - L l1 = {{trace_api::SpanContext(false, false), {}}, {trace_api::SpanContext(false, false), {}}}; + using L = + std::vector>>; + L l1 = {{opentelemetry::trace::SpanContext(false, false), {}}, + {opentelemetry::trace::SpanContext(false, false), {}}}; opentelemetry::common::KeyValueIterableView view{m1}; - trace_api::SpanContextKeyValueIterableView links{l1}; + opentelemetry::trace::SpanContextKeyValueIterableView links{l1}; while (state.KeepRunning()) { diff --git a/sdk/test/trace/tracer_test.cc b/sdk/test/trace/tracer_test.cc index f92c0f6e93..45b5fc010f 100644 --- a/sdk/test/trace/tracer_test.cc +++ b/sdk/test/trace/tracer_test.cc @@ -17,8 +17,9 @@ using namespace opentelemetry::sdk::trace; using namespace opentelemetry::sdk::resource; using opentelemetry::common::SteadyTimestamp; using opentelemetry::common::SystemTimestamp; -namespace nostd = opentelemetry::nostd; -namespace common = opentelemetry::common; +namespace nostd = opentelemetry::nostd; +namespace common = opentelemetry::common; +namespace trace_api = opentelemetry::trace; using opentelemetry::common::KeyValueIterableView; using opentelemetry::exporter::memory::InMemorySpanData; using opentelemetry::exporter::memory::InMemorySpanExporter; diff --git a/test_common/src/http/client/nosend/CMakeLists.txt b/test_common/src/http/client/nosend/CMakeLists.txt index 071e109fe5..1f32861b41 100644 --- a/test_common/src/http/client/nosend/CMakeLists.txt +++ b/test_common/src/http/client/nosend/CMakeLists.txt @@ -28,7 +28,7 @@ if(${BUILD_TESTING}) endif() target_link_libraries( - opentelemetry_http_client_nosend ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIB} - opentelemetry_ext opentelemetry_test_common) + opentelemetry_http_client_nosend ${GTEST_BOTH_LIBRARIES} opentelemetry_ext + opentelemetry_test_common) endif() diff --git a/third_party/opentelemetry-proto b/third_party/opentelemetry-proto index 6459e1aae1..1608f92cf0 160000 --- a/third_party/opentelemetry-proto +++ b/third_party/opentelemetry-proto @@ -1 +1 @@ -Subproject commit 6459e1aae1c22e273ac92be86016f0ae55a2430a +Subproject commit 1608f92cf08119f9aec237c910b200d1317ec696 diff --git a/third_party_release b/third_party_release index c8af81b0c4..53ef723721 100644 --- a/third_party_release +++ b/third_party_release @@ -20,7 +20,7 @@ benchmark=v1.7.1 googletest=release-1.12.1 ms-gsl=v3.1.0-67-g6f45293 nlohmann-json=v3.11.2 -opentelemetry-proto=v0.19.0 +opentelemetry-proto=v0.20.0 opentracing-cpp=v1.6.0 prometheus-cpp=v1.1.0 vcpkg=2022.08.15 diff --git a/tools/setup-buildtools.cmd b/tools/setup-buildtools.cmd index 43be03a267..c9a9d9ca2b 100644 --- a/tools/setup-buildtools.cmd +++ b/tools/setup-buildtools.cmd @@ -9,6 +9,7 @@ if defined VCPKG_ROOT ( set "PATH=%VCPKG_ROOT%;%PATH%" ) else ( set "PATH=%~dp0vcpkg;%PATH%" + set "VCPKG_ROOT=%~dp0vcpkg" ) pushd %~dp0 @@ -53,9 +54,6 @@ where /Q vcpkg.exe if %ERRORLEVEL% == 1 ( REM Build our own vcpkg from source REM Prefer building in VCPKG_ROOT - if not defined VCPKG_ROOT ( - set "VCPKG_ROOT=%~dp0\vcpkg" - ) pushd "!VCPKG_ROOT!" call bootstrap-vcpkg.bat popd