diff --git a/.github/.codecov.yaml b/.github/.codecov.yaml index c4bd839179..1b9921ac4c 100644 --- a/.github/.codecov.yaml +++ b/.github/.codecov.yaml @@ -42,6 +42,7 @@ ignore: - "cmake/**/*" - "buildscripts/**/*" - "third_party/**/*" + - "test_common/**/*" - "tools/**/*" - ".vscode/**/*" - ".github/**/*" diff --git a/CHANGELOG.md b/CHANGELOG.md index 9531149ef5..92fab27bfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,22 @@ Increment the: ## [Unreleased] +## [1.8.1] 2022-12-04 + +* [ETW Exporter] Tail based sampling support [#1780](https://github.com/open-telemetry/opentelemetry-cpp/pull/1780) +* [EXPORTERS] fix typo [affecting otlp exported histogram metrics max uint] [#1827](https://github.com/open-telemetry/opentelemetry-cpp/pull/1827) +* [EXPORTERS] fix enum-compare-switch warning [#1833](https://github.com/open-telemetry/opentelemetry-cpp/pull/1833) +* [METRICS] Change default temporality as "Cumulative" for OTLP metrics +exporters [#1828](https://github.com/open-telemetry/opentelemetry-cpp/pull/1828) +* [BUILD] Moved otlp_grpc_utils.cc to opentelemetry_exporter_otlp_grpc_client. +[#1829](https://github.com/open-telemetry/opentelemetry-cpp/pull/1829) +* Fix type mismatch when move nostd::shared_ptr [#1815](https://github.com/open-telemetry/opentelemetry-cpp/pull/1815) +* [BUILD] Fix Prometheus target name [#1820](https://github.com/open-telemetry/opentelemetry-cpp/pull/1820) +* Clean unused docker files [#1817](https://github.com/open-telemetry/opentelemetry-cpp/pull/1817) +* [BUILD] Fix default bazel build [#1816](https://github.com/open-telemetry/opentelemetry-cpp/pull/1816) +* [BUILD] move client::nosend under test_common [#1811](https://github.com/open-telemetry/opentelemetry-cpp/pull/1811) +* [BUILD] Fix opentelemetry-proto file exists check [#1824](https://github.com/open-telemetry/opentelemetry-cpp/pull/1824) + ## [1.8.0] 2022-11-27 * [DOC] Update Metrics status in README.md [#1722](https://github.com/open-telemetry/opentelemetry-cpp/pull/1722) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b9710d9bc..f1a6d1cd17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -501,6 +501,9 @@ if(NOT WITH_API_ONLY) add_subdirectory(sdk) add_subdirectory(ext) add_subdirectory(exporters) + if(BUILD_TESTING) + add_subdirectory(test_common) + endif() if(WITH_EXAMPLES) add_subdirectory(examples) endif() diff --git a/api/include/opentelemetry/nostd/shared_ptr.h b/api/include/opentelemetry/nostd/shared_ptr.h index e1eac61561..7afc30f9be 100644 --- a/api/include/opentelemetry/nostd/shared_ptr.h +++ b/api/include/opentelemetry/nostd/shared_ptr.h @@ -56,7 +56,8 @@ class shared_ptr typename std::enable_if::value>::type * = nullptr> void MoveTo(typename shared_ptr::PlacementBuffer &buffer) noexcept { - new (buffer.data) shared_ptr_wrapper{std::move(this->ptr_)}; + using other_shared_ptr_wrapper = typename shared_ptr::shared_ptr_wrapper; + new (buffer.data) other_shared_ptr_wrapper{std::move(this->ptr_)}; } virtual pointer Get() const noexcept { return ptr_.get(); } diff --git a/api/include/opentelemetry/version.h b/api/include/opentelemetry/version.h index b2fb5c6e07..35a0a2baff 100644 --- a/api/include/opentelemetry/version.h +++ b/api/include/opentelemetry/version.h @@ -6,7 +6,7 @@ #include "opentelemetry/detail/preprocessor.h" #define OPENTELEMETRY_ABI_VERSION_NO 1 -#define OPENTELEMETRY_VERSION "1.8.0" +#define OPENTELEMETRY_VERSION "1.8.1" #define OPENTELEMETRY_ABI_VERSION OPENTELEMETRY_STRINGIFY(OPENTELEMETRY_ABI_VERSION_NO) // clang-format off diff --git a/cmake/opentelemetry-proto.cmake b/cmake/opentelemetry-proto.cmake index 47f57a65ba..a21c0f16cf 100644 --- a/cmake/opentelemetry-proto.cmake +++ b/cmake/opentelemetry-proto.cmake @@ -26,7 +26,7 @@ # if(OTELCPP_PROTO_PATH) - if(NOT EXISTS(${OTELCPP_PROTO_PATH}/opentelemetry/proto/common/v1/common.proto)) + if(NOT EXISTS "${OTELCPP_PROTO_PATH}/opentelemetry/proto/common/v1/common.proto") message(FATAL_ERROR "OTELCPP_PROTO_PATH does not point to a opentelemetry-proto repository") endif() message(STATUS "opentelemetry-proto dependency satisfied by: external path") diff --git a/docker/ubuntu14.04/Dockerfile b/docker/ubuntu14.04/Dockerfile deleted file mode 100644 index f4e8a04104..0000000000 --- a/docker/ubuntu14.04/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -FROM ubuntu:14.04 -ENV DEBIAN_FRONTEND noninteractive - -## Update cache and upgrade image -RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade - -## Build environment packages -RUN apt-get install -qq -y --ignore-missing \ - apt-utils \ - automake \ - bc \ - build-essential \ - bzip2 \ - cmake \ - curl \ - git \ - libcurl4-openssl-dev \ - libssl-dev \ - make \ - pkg-config \ - python \ - sudo \ - tar \ - zip \ - unzip \ - wget \ - zlib1g-dev - -RUN mkdir -p /usr/local/bin - -## Install cmake since it's an expensive operation and best be done once -COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh -RUN chmod +x /usr/local/bin/setup-cmake.sh -RUN /usr/local/bin/setup-cmake.sh - -## Install protobuf3 since Ubuntu 14.04 does not have protobuf3 -COPY ./setup-protobuf.sh /usr/local/bin/setup-protobuf.sh -RUN chmod +x /usr/local/bin/setup-protobuf.sh -RUN /usr/local/bin/setup-protobuf.sh - -# ENTRYPOINT bash -CMD /bin/bash diff --git a/docker/ubuntu16.04/Dockerfile b/docker/ubuntu16.04/Dockerfile deleted file mode 100644 index 328600f1cb..0000000000 --- a/docker/ubuntu16.04/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -FROM ubuntu:16.04 -ENV DEBIAN_FRONTEND noninteractive - -## Update cache and upgrade image -RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade - -## Build environment packages -RUN apt-get install -qq -y --ignore-missing \ - apt-utils \ - automake \ - build-essential \ - bc \ - bzip2 \ - cmake \ - curl \ - git \ - libcurl4-openssl-dev \ - libsqlite3-dev \ - libssl-dev \ - libtool-bin \ - make \ - pkg-config \ - python \ - sudo \ - tar \ - zip \ - unzip \ - wget \ - zlib1g-dev - -## Install cmake since it's an expensive operation and best be done once -RUN mkdir -p /usr/local/bin -COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh -RUN chmod +x /usr/local/bin/setup-cmake.sh -RUN /usr/local/bin/setup-cmake.sh - -# ENTRYPOINT bash -CMD /bin/bash diff --git a/docker/ubuntu18.04/Dockerfile b/docker/ubuntu18.04/Dockerfile deleted file mode 100644 index 9e41506b4f..0000000000 --- a/docker/ubuntu18.04/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:18.04 -ENV DEBIAN_FRONTEND noninteractive - -## Update cache and upgrade image -RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade - -## Build environment packages -RUN apt-get install -qq -y --ignore-missing \ - apt-utils \ - automake \ - bc \ - build-essential \ - bzip2 \ - cmake \ - curl \ - git \ - libcurl4-openssl-dev \ - libssl-dev \ - libtool-bin \ - make \ - pkg-config \ - protobuf-compiler \ - libprotobuf-dev \ - python \ - sudo \ - tar \ - zip \ - unzip \ - wget \ - zlib1g-dev - -## Install cmake since it's an expensive operation and best be done once -RUN mkdir -p /usr/local/bin -COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh -RUN chmod +x /usr/local/bin/setup-cmake.sh -RUN /usr/local/bin/setup-cmake.sh - -# ENTRYPOINT bash -CMD /bin/bash diff --git a/docker/ubuntu20.04/Dockerfile b/docker/ubuntu20.04/Dockerfile deleted file mode 100644 index 17dba84799..0000000000 --- a/docker/ubuntu20.04/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:20.04 -ENV DEBIAN_FRONTEND noninteractive - -## Update cache and upgrade image -RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade - -## Build environment packages -RUN apt-get install -qq -y --ignore-missing \ - apt-utils \ - automake \ - bc \ - build-essential \ - bzip2 \ - cmake \ - curl \ - git \ - libcurl4-openssl-dev \ - libssl-dev \ - libtool-bin \ - make \ - pkg-config \ - protobuf-compiler \ - libprotobuf-dev \ - python \ - sudo \ - tar \ - zip \ - unzip \ - wget \ - zlib1g-dev - -## Install cmake since it's an expensive operation and best be done once -RUN mkdir -p /usr/local/bin -COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh -RUN chmod +x /usr/local/bin/setup-cmake.sh -RUN /usr/local/bin/setup-cmake.sh - -# ENTRYPOINT bash -CMD /bin/bash diff --git a/docs/public/conf.py b/docs/public/conf.py index 1e5bbb94f6..26a407f73c 100644 --- a/docs/public/conf.py +++ b/docs/public/conf.py @@ -21,7 +21,7 @@ author = 'OpenTelemetry authors' # The full version, including alpha/beta/rc tags -release = "1.8.0" +release = "1.8.1" # Run sphinx on subprojects and copy output # ----------------------------------------- diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_config.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_config.h index d5b69aeabb..1bf47ded54 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_config.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_config.h @@ -12,6 +12,7 @@ #include "opentelemetry//sdk/trace/sampler.h" #include "opentelemetry/exporters/etw/etw_provider.h" +#include "opentelemetry/exporters/etw/etw_tail_sampler.h" #include "opentelemetry/sdk/trace/id_generator.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -166,6 +167,15 @@ sdk::trace::Sampler &GetSampler(T &t) return *t.sampler_; } +/** + * @brief Utility function to obtain etw::TracerProvider.tail_sampler_ + */ +template +TailSampler &GetTailSampler(T &t) +{ + return *t.tail_sampler_; +} + /** * @brief Utility template to convert SpanId or TraceId to hex. * @param id - value of SpanId or TraceId diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_tail_sampler.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_tail_sampler.h new file mode 100644 index 0000000000..c4d0a2edd7 --- /dev/null +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_tail_sampler.h @@ -0,0 +1,38 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +#include "opentelemetry/sdk/trace/sampler.h" +#include "opentelemetry/trace/span.h" + +#pragma once +OPENTELEMETRY_BEGIN_NAMESPACE +namespace exporter +{ +namespace etw +{ + +class TailSampler +{ +public: + // convert to etw span if required for getters on span. + // auto etw_span = static_cast(&span); + // Decision based on + // Span::GetStatus() + // Span::GetProperties() + // Span::GetContext() + virtual opentelemetry::sdk::trace::SamplingResult ShouldSample( + const opentelemetry::trace::Span &span) noexcept = 0; +}; + +class AlwaysOnTailSampler : public TailSampler +{ +public: + opentelemetry::sdk::trace::SamplingResult ShouldSample( + const opentelemetry::trace::Span &span) noexcept override + { + return {opentelemetry::sdk::trace::Decision::RECORD_AND_SAMPLE}; + } +}; + +} // namespace etw +} // namespace exporter +OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h index 0c26b0a998..3bb5264c92 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h @@ -40,6 +40,7 @@ #include "opentelemetry/exporters/etw/etw_properties.h" #include "opentelemetry/exporters/etw/etw_provider.h" #include "opentelemetry/exporters/etw/etw_random_id_generator.h" +#include "opentelemetry/exporters/etw/etw_tail_sampler.h" #include "opentelemetry/exporters/etw/utils.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -235,9 +236,17 @@ class Tracer : public opentelemetry::trace::Tracer, const opentelemetry::trace::Span *parentSpan = nullptr, const opentelemetry::trace::EndSpanOptions & = {}) { - const auto &cfg = GetConfiguration(tracerProvider_); + const auto &cfg = GetConfiguration(tracerProvider_); + const auto &tail_sampler = GetTailSampler(tracerProvider_); const opentelemetry::trace::Span &spanBase = reinterpret_cast(span); + + // Sample span based on the decision of tail based sampler + auto sampling_result = const_cast(&tail_sampler)->ShouldSample(spanBase); + if (!sampling_result.IsRecording() || !sampling_result.IsSampled()) + { + return; + } auto spanContext = spanBase.GetContext(); // Populate Span with presaved attributes @@ -375,7 +384,13 @@ class Tracer : public opentelemetry::trace::Tracer, const opentelemetry::trace::SpanContextKeyValueIterable &links, const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override { -#ifdef OPENTELEMETRY_RTTI_ENABLED + // If RTTI is enabled by compiler, the below code modifies the attributes object passed as arg, + // which is sometime not desirable, set OPENTELEMETRY_NOT_USE_RTTI in application + // to avoid using RTTI in that case in below set of code. +#if !defined OPENTELEMETRY_RTTI_ENABLED || defined OPENTELEMETRY_NOT_USE_RTTI + Properties evtCopy = attributes; + return StartSpan(name, evtCopy, links, options); +#else // OPENTELEMETRY_RTTI_ENABLED is defined common::KeyValueIterable &attribs = const_cast(attributes); Properties *evt = dynamic_cast(&attribs); if (evt != nullptr) @@ -383,9 +398,9 @@ class Tracer : public opentelemetry::trace::Tracer, // Pass as a reference to original modifyable collection without creating a copy return StartSpan(name, *evt, links, options); } -#endif Properties evtCopy = attributes; return StartSpan(name, evtCopy, links, options); +#endif } /** @@ -557,7 +572,14 @@ class Tracer : public opentelemetry::trace::Tracer, common::SystemTimestamp timestamp, const common::KeyValueIterable &attributes) noexcept { -#ifdef OPENTELEMETRY_RTTI_ENABLED + // If RTTI is enabled by compiler, the below code modifies the attributes object passed as arg, + // which is sometime not desirable, set OPENTELEMETRY_NOT_USE_RTTI in application + // to avoid using RTTI in that case in below set of code. +#if !defined OPENTELEMETRY_RTTI_ENABLED || defined OPENTELEMETRY_NOT_USE_RTTI + // Pass a copy converted to Properties object on stack + Properties evtCopy = attributes; + return AddEvent(span, name, timestamp, evtCopy); +#else // OPENTELEMETRY_RTTI_ENABLED is defined common::KeyValueIterable &attribs = const_cast(attributes); Properties *evt = dynamic_cast(&attribs); if (evt != nullptr) @@ -565,10 +587,9 @@ class Tracer : public opentelemetry::trace::Tracer, // Pass as a reference to original modifyable collection without creating a copy return AddEvent(span, name, timestamp, *evt); } -#endif - // Pass a copy converted to Properties object on stack Properties evtCopy = attributes; return AddEvent(span, name, timestamp, evtCopy); +#endif } /** @@ -826,6 +847,8 @@ class Span : public opentelemetry::trace::Span status_description_ = description.data(); } + opentelemetry::trace::StatusCode GetStatus() { return status_code_; } + void SetAttributes(Properties attributes) { attributes_ = attributes; } /** @@ -932,6 +955,12 @@ class TracerProvider : public opentelemetry::trace::TracerProvider */ std::unique_ptr sampler_; + /** + * @brief Sampler configured + * + */ + std::unique_ptr tail_sampler_; + /** * @brief IdGenerator for trace_id and span_id * @@ -942,15 +971,19 @@ class TracerProvider : public opentelemetry::trace::TracerProvider * @brief Construct instance of TracerProvider with given options * @param options Configuration options */ - TracerProvider(TelemetryProviderOptions options, - std::unique_ptr sampler = - std::unique_ptr(new sdk::trace::AlwaysOnSampler), - std::unique_ptr id_generator = - std::unique_ptr( - new sdk::trace::ETWRandomIdGenerator())) + TracerProvider( + TelemetryProviderOptions options, + std::unique_ptr sampler = + std::unique_ptr(new sdk::trace::AlwaysOnSampler), + std::unique_ptr id_generator = + std::unique_ptr( + new sdk::trace::ETWRandomIdGenerator()), + std::unique_ptr tail_sampler = + std::unique_ptr(new AlwaysOnTailSampler())) : opentelemetry::trace::TracerProvider(), sampler_{std::move(sampler)}, - id_generator_{std::move(id_generator)} + id_generator_{std::move(id_generator)}, + tail_sampler_{std::move(tail_sampler)} { // By default we ensure that all events carry their with TraceId and SpanId GetOption(options, "enableTraceId", config_.enableTraceId, true); @@ -985,7 +1018,9 @@ class TracerProvider : public opentelemetry::trace::TracerProvider : opentelemetry::trace::TracerProvider(), sampler_{std::unique_ptr(new sdk::trace::AlwaysOnSampler)}, id_generator_{std::unique_ptr( - new sdk::trace::ETWRandomIdGenerator())} + new sdk::trace::ETWRandomIdGenerator())}, + tail_sampler_{ + std::unique_ptr(new AlwaysOnTailSampler())} { config_.enableTraceId = true; config_.enableSpanId = true; diff --git a/exporters/etw/test/etw_tracer_test.cc b/exporters/etw/test/etw_tracer_test.cc index a23345ddd9..da2505c4b7 100644 --- a/exporters/etw/test/etw_tracer_test.cc +++ b/exporters/etw/test/etw_tracer_test.cc @@ -6,7 +6,6 @@ # include # include # include - # include "opentelemetry//sdk/trace/sampler.h" # include "opentelemetry/exporters/etw/etw_tracer_exporter.h" # include "opentelemetry/sdk/trace/samplers/always_off.h" @@ -78,6 +77,16 @@ class MockSampler : public sdk::trace::Sampler std::shared_ptr delegate_sampler_; }; +class AlwaysOffTailSampler : public TailSampler +{ +public: + opentelemetry::sdk::trace::SamplingResult ShouldSample( + const opentelemetry::trace::Span &span) noexcept override + { + return {opentelemetry::sdk::trace::Decision::DROP}; + } +}; + /* clang-format off */ TEST(ETWTracer, TracerCheck) { @@ -459,6 +468,26 @@ TEST(ETWTracer, AlwayOffSampler) EXPECT_EQ(span->GetContext().IsSampled(), false); } +TEST(ETWTracer, AlwayOffTailSampler) +{ + std::string providerName = kGlobalProviderName; // supply unique instrumentation name here + std::unique_ptr always_on{new sdk::trace::AlwaysOnSampler()}; + sdk::trace::IdGenerator *id_generator = new MockIdGenerator(); + std::unique_ptr always_off_tail{new AlwaysOffTailSampler()}; + exporter::etw::TracerProvider tp + ({ + {"enableTraceId", true}, + {"enableSpanId", true}, + {"enableActivityId", true}, + {"enableRelatedActivityId", true}, + {"enableAutoParent", true} + }, + std::move(always_on), + std::unique_ptr(id_generator), + std::move(always_off_tail)); + auto tracer = tp.GetTracer(providerName); +} + TEST(ETWTracer, CustomIdGenerator) { std::string providerName = kGlobalProviderName; // supply unique instrumentation name here diff --git a/exporters/otlp/BUILD b/exporters/otlp/BUILD index 2aab339e8d..a75188e673 100644 --- a/exporters/otlp/BUILD +++ b/exporters/otlp/BUILD @@ -46,32 +46,17 @@ cc_library( ], ) -cc_library( - name = "otlp_grpc_utils", - srcs = [ - "src/otlp_grpc_utils.cc", - ], - hdrs = [ - "include/opentelemetry/exporters/otlp/otlp_grpc_utils.h", - ], - strip_include_prefix = "include", - tags = ["otlp"], - deps = [ - "//api", - "//sdk:headers", - "@com_github_grpc_grpc//:grpc++", - ], -) - cc_library( name = "otlp_grpc_client", srcs = [ "src/otlp_grpc_client.cc", + "src/otlp_grpc_utils.cc", ], hdrs = [ "include/opentelemetry/exporters/otlp/otlp_environment.h", "include/opentelemetry/exporters/otlp/otlp_grpc_client.h", "include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h", + "include/opentelemetry/exporters/otlp/otlp_grpc_utils.h", "include/opentelemetry/exporters/otlp/protobuf_include_prefix.h", "include/opentelemetry/exporters/otlp/protobuf_include_suffix.h", ], @@ -111,7 +96,6 @@ cc_library( deps = [ ":otlp_recordable", ":otlp_grpc_client", - ":otlp_grpc_utils", "//ext:headers", "//sdk/src/trace", @@ -370,7 +354,7 @@ cc_test( deps = [ ":otlp_http_exporter", "//api", - "//ext/src/http/client/nosend:http_client_nosend", + "//test_common/src/http/client/nosend:http_client_nosend", "@com_google_googletest//:gtest_main", ], ) @@ -386,7 +370,7 @@ cc_test( deps = [ ":otlp_http_exporter", "//api", - "//ext/src/http/client/nosend:http_client_nosend", + "//test_common/src/http/client/nosend:http_client_nosend", "@com_google_googletest//:gtest_main", ], ) @@ -402,7 +386,7 @@ cc_test( deps = [ ":otlp_http_log_record_exporter", "//api", - "//ext/src/http/client/nosend:http_client_nosend", + "//test_common/src/http/client/nosend:http_client_nosend", "@com_google_googletest//:gtest_main", ], ) @@ -418,7 +402,7 @@ cc_test( deps = [ ":otlp_http_log_record_exporter", "//api", - "//ext/src/http/client/nosend:http_client_nosend", + "//test_common/src/http/client/nosend:http_client_nosend", "@com_google_googletest//:gtest_main", ], ) @@ -481,7 +465,7 @@ cc_test( deps = [ ":otlp_http_metric_exporter", "//api", - "//ext/src/http/client/nosend:http_client_nosend", + "//test_common/src/http/client/nosend:http_client_nosend", "@com_google_googletest//:gtest_main", ], ) @@ -497,7 +481,7 @@ cc_test( deps = [ ":otlp_http_metric_exporter", "//api", - "//ext/src/http/client/nosend:http_client_nosend", + "//test_common/src/http/client/nosend:http_client_nosend", "@com_google_googletest//:gtest_main", ], ) diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt index 1ab0c7cb33..7cecab0eca 100644 --- a/exporters/otlp/CMakeLists.txt +++ b/exporters/otlp/CMakeLists.txt @@ -2,7 +2,7 @@ add_library( opentelemetry_otlp_recordable src/otlp_log_recordable.cc src/otlp_recordable.cc src/otlp_populate_attribute_utils.cc src/otlp_recordable_utils.cc - src/otlp_metric_utils.cc src/otlp_grpc_utils.cc) + src/otlp_metric_utils.cc) set_target_properties(opentelemetry_otlp_recordable PROPERTIES EXPORT_NAME otlp_recordable) @@ -24,7 +24,8 @@ target_link_libraries(opentelemetry_otlp_recordable if(WITH_OTLP_GRPC) find_package(gRPC REQUIRED) - add_library(opentelemetry_exporter_otlp_grpc_client src/otlp_grpc_client.cc) + add_library(opentelemetry_exporter_otlp_grpc_client src/otlp_grpc_client.cc + src/otlp_grpc_utils.cc) set_target_properties(opentelemetry_exporter_otlp_grpc_client PROPERTIES EXPORT_NAME otlp_grpc_client) target_link_libraries( @@ -280,7 +281,8 @@ if(BUILD_TESTING) 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 http_client_nosend) + ${GMOCK_LIB} opentelemetry_exporter_otlp_http + opentelemetry_http_client_nosend) gtest_add_tests( TARGET otlp_http_exporter_test TEST_PREFIX exporter.otlp. @@ -306,7 +308,7 @@ if(BUILD_TESTING) ${GMOCK_LIB} opentelemetry_exporter_otlp_http_log opentelemetry_logs - http_client_nosend) + opentelemetry_http_client_nosend) gtest_add_tests( TARGET otlp_http_log_record_exporter_test TEST_PREFIX exporter.otlp. @@ -333,7 +335,7 @@ if(BUILD_TESTING) ${GMOCK_LIB} opentelemetry_exporter_otlp_http_metric opentelemetry_metrics - http_client_nosend) + opentelemetry_http_client_nosend) 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_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h index 3d677c1a08..61828fd49e 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h @@ -22,7 +22,7 @@ struct OtlpGrpcMetricExporterOptions : public OtlpGrpcExporterOptions // Preferred Aggregation Temporality sdk::metrics::AggregationTemporality aggregation_temporality = - sdk::metrics::AggregationTemporality::kDelta; + sdk::metrics::AggregationTemporality::kCumulative; }; } // namespace otlp diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h index 7fbb000a34..140b5b886b 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h @@ -51,7 +51,7 @@ struct OtlpHttpMetricExporterOptions // Preferred Aggregation Temporality sdk::metrics::AggregationTemporality aggregation_temporality = - sdk::metrics::AggregationTemporality::kDelta; + sdk::metrics::AggregationTemporality::kCumulative; #ifdef ENABLE_ASYNC_EXPORT // Concurrent requests diff --git a/exporters/otlp/src/otlp_grpc_utils.cc b/exporters/otlp/src/otlp_grpc_utils.cc index 02094fb3f9..20bd8bd740 100644 --- a/exporters/otlp/src/otlp_grpc_utils.cc +++ b/exporters/otlp/src/otlp_grpc_utils.cc @@ -16,39 +16,39 @@ const char *grpc_status_code_to_string(::grpc::StatusCode status_code) { switch (status_code) { - case GRPC_STATUS_OK: + case ::grpc::StatusCode::OK: return "OK"; - case GRPC_STATUS_CANCELLED: + case ::grpc::StatusCode::CANCELLED: return "CANCELLED"; - case GRPC_STATUS_UNKNOWN: + case ::grpc::StatusCode::UNKNOWN: return "UNKNOWN"; - case GRPC_STATUS_INVALID_ARGUMENT: + case ::grpc::StatusCode::INVALID_ARGUMENT: return "INVALID_ARGUMENT"; - case GRPC_STATUS_DEADLINE_EXCEEDED: + case ::grpc::StatusCode::DEADLINE_EXCEEDED: return "DEADLINE_EXCEEDED"; - case GRPC_STATUS_NOT_FOUND: + case ::grpc::StatusCode::NOT_FOUND: return "NOT_FOUND"; - case GRPC_STATUS_ALREADY_EXISTS: + case ::grpc::StatusCode::ALREADY_EXISTS: return "ALREADY_EXISTS"; - case GRPC_STATUS_PERMISSION_DENIED: + case ::grpc::StatusCode::PERMISSION_DENIED: return "PERMISSION_DENIED"; - case GRPC_STATUS_UNAUTHENTICATED: + case ::grpc::StatusCode::UNAUTHENTICATED: return "UNAUTHENTICATED"; - case GRPC_STATUS_RESOURCE_EXHAUSTED: + case ::grpc::StatusCode::RESOURCE_EXHAUSTED: return "RESOURCE_EXHAUSTED"; - case GRPC_STATUS_FAILED_PRECONDITION: + case ::grpc::StatusCode::FAILED_PRECONDITION: return "FAILED_PRECONDITION"; - case GRPC_STATUS_ABORTED: + case ::grpc::StatusCode::ABORTED: return "ABORTED"; - case GRPC_STATUS_OUT_OF_RANGE: + case ::grpc::StatusCode::OUT_OF_RANGE: return "OUT_OF_RANGE"; - case GRPC_STATUS_UNIMPLEMENTED: + case ::grpc::StatusCode::UNIMPLEMENTED: return "UNIMPLEMENTED"; - case GRPC_STATUS_INTERNAL: + case ::grpc::StatusCode::INTERNAL: return "INTERNAL"; - case GRPC_STATUS_UNAVAILABLE: + case ::grpc::StatusCode::UNAVAILABLE: return "UNAVAILABLE"; - case GRPC_STATUS_DATA_LOSS: + case ::grpc::StatusCode::DATA_LOSS: return "DATA_LOSS"; default: return "UNKNOWN"; diff --git a/exporters/otlp/src/otlp_metric_utils.cc b/exporters/otlp/src/otlp_metric_utils.cc index 9cf34dc550..f3ee79e283 100644 --- a/exporters/otlp/src/otlp_metric_utils.cc +++ b/exporters/otlp/src/otlp_metric_utils.cc @@ -116,7 +116,7 @@ void OtlpMetricUtils::ConvertHistogramMetric( } if (nostd::holds_alternative(histogram_data.max_)) { - proto_histogram_point_data->set_min(nostd::get(histogram_data.max_)); + proto_histogram_point_data->set_max(nostd::get(histogram_data.max_)); } else { diff --git a/exporters/otlp/test/otlp_http_exporter_test.cc b/exporters/otlp/test/otlp_http_exporter_test.cc index fe2dd37e07..d7d53d5839 100644 --- a/exporters/otlp/test/otlp_http_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_exporter_test.cc @@ -15,10 +15,10 @@ # include "opentelemetry/exporters/otlp/protobuf_include_suffix.h" # include "opentelemetry/ext/http/client/http_client_factory.h" -# include "opentelemetry/ext/http/client/nosend/http_client_nosend.h" # include "opentelemetry/ext/http/server/http_server.h" # include "opentelemetry/sdk/trace/batch_span_processor.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" # include 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 e1ab896083..6dc8ef8960 100644 --- a/exporters/otlp/test/otlp_http_log_record_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_log_record_exporter_test.cc @@ -17,7 +17,6 @@ # include "opentelemetry/common/key_value_iterable_view.h" # include "opentelemetry/ext/http/client/http_client_factory.h" -# include "opentelemetry/ext/http/client/nosend/http_client_nosend.h" # include "opentelemetry/ext/http/server/http_server.h" # include "opentelemetry/logs/provider.h" # include "opentelemetry/sdk/logs/batch_log_record_processor.h" @@ -25,6 +24,7 @@ # include "opentelemetry/sdk/logs/log_record.h" # include "opentelemetry/sdk/logs/logger_provider.h" # include "opentelemetry/sdk/resource/resource.h" +# include "opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h" # include # include diff --git a/exporters/otlp/test/otlp_http_metric_exporter_test.cc b/exporters/otlp/test/otlp_http_metric_exporter_test.cc index 7d4f2a1ebd..54abb88511 100644 --- a/exporters/otlp/test/otlp_http_metric_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_metric_exporter_test.cc @@ -15,13 +15,13 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/ext/http/client/http_client_factory.h" -#include "opentelemetry/ext/http/client/nosend/http_client_nosend.h" #include "opentelemetry/ext/http/server/http_server.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/test_common/ext/http/client/nosend/http_client_nosend.h" #include #include @@ -936,6 +936,28 @@ TEST_F(OtlpHttpMetricExporterTestPeer, DefaultEndpoint) EXPECT_EQ("http://localhost:4318/v1/metrics", GetOtlpDefaultMetricsEndpoint()); } +TEST_F(OtlpHttpMetricExporterTestPeer, CheckDefaultTemporality) +{ + std::unique_ptr exporter(new OtlpHttpMetricExporter()); + EXPECT_EQ( + opentelemetry::sdk::metrics::AggregationTemporality::kCumulative, + exporter->GetAggregationTemporality(opentelemetry::sdk::metrics::InstrumentType::kCounter)); + EXPECT_EQ( + opentelemetry::sdk::metrics::AggregationTemporality::kCumulative, + exporter->GetAggregationTemporality(opentelemetry::sdk::metrics::InstrumentType::kHistogram)); + EXPECT_EQ(opentelemetry::sdk::metrics::AggregationTemporality::kCumulative, + exporter->GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType::kUpDownCounter)); + EXPECT_EQ(opentelemetry::sdk::metrics::AggregationTemporality::kCumulative, + exporter->GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType::kObservableCounter)); + EXPECT_EQ(opentelemetry::sdk::metrics::AggregationTemporality::kCumulative, + exporter->GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType::kObservableGauge)); + EXPECT_EQ(opentelemetry::sdk::metrics::AggregationTemporality::kCumulative, + exporter->GetAggregationTemporality( + opentelemetry::sdk::metrics::InstrumentType::kObservableUpDownCounter)); +} #endif } // namespace otlp diff --git a/exporters/prometheus/CMakeLists.txt b/exporters/prometheus/CMakeLists.txt index bdafeb1588..13fb7c9de0 100644 --- a/exporters/prometheus/CMakeLists.txt +++ b/exporters/prometheus/CMakeLists.txt @@ -19,6 +19,9 @@ endif() add_library(opentelemetry_exporter_prometheus src/exporter.cc src/collector.cc src/exporter_utils.cc) + +set_target_properties(opentelemetry_exporter_prometheus + PROPERTIES EXPORT_NAME prometheus_exporter) target_include_directories( opentelemetry_exporter_prometheus PUBLIC "$" diff --git a/ext/include/opentelemetry/ext/http/client/http_client_factory.h b/ext/include/opentelemetry/ext/http/client/http_client_factory.h index f03c1a0b64..8df1e578d2 100644 --- a/ext/include/opentelemetry/ext/http/client/http_client_factory.h +++ b/ext/include/opentelemetry/ext/http/client/http_client_factory.h @@ -18,7 +18,9 @@ class HttpClientFactory static std::shared_ptr Create(); +#ifdef ENABLE_TEST static std::shared_ptr CreateNoSend(); +#endif }; } // namespace client } // namespace http diff --git a/ext/src/CMakeLists.txt b/ext/src/CMakeLists.txt index a976882ff0..6d7a14be41 100644 --- a/ext/src/CMakeLists.txt +++ b/ext/src/CMakeLists.txt @@ -3,6 +3,3 @@ if(WITH_ZPAGES) endif() add_subdirectory(http/client/curl) -if(BUILD_TESTING) - add_subdirectory(http/client/nosend) -endif() diff --git a/sdk/include/opentelemetry/sdk/version/version.h b/sdk/include/opentelemetry/sdk/version/version.h index 747c8c734e..2933dd7463 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.8.0" +#define OPENTELEMETRY_SDK_VERSION "1.8.1" #include "opentelemetry/version.h" diff --git a/sdk/src/version/version.cc b/sdk/src/version/version.cc index 14c379b3d6..829781222b 100644 --- a/sdk/src/version/version.cc +++ b/sdk/src/version/version.cc @@ -10,16 +10,16 @@ namespace version { const int MAJOR_VERSION = 1; const int MINOR_VERSION = 8; -const int PATCH_VERSION = 0; +const int PATCH_VERSION = 1; const char *PRE_RELEASE = "NONE"; const char *BUILD_METADATA = "NONE"; -const int COUNT_NEW_COMMITS = 31; -const char *BRANCH = "pre_release_1.8.0"; -const char *COMMIT_HASH = "06b4795ba2cf898efda4ee34d7b40fb6a2968b95"; -const char *SHORT_VERSION = "1.8.0"; +const int COUNT_NEW_COMMITS = 11; +const char *BRANCH = "pre_release_1.8.1"; +const char *COMMIT_HASH = "36ddf46ddea46a00d93aa647c821d7b6045ee42a"; +const char *SHORT_VERSION = "1.8.1"; const char *FULL_VERSION = - "1.8.0-NONE-NONE-31-pre_release_1.8.0-06b4795ba2cf898efda4ee34d7b40fb6a2968b95"; -const char *BUILD_DATE = "Sun 27 Nov 2022 02:32:48 PM UTC"; + "1.8.1-NONE-NONE-11-pre_release_1.8.1-36ddf46ddea46a00d93aa647c821d7b6045ee42a"; +const char *BUILD_DATE = "Sun 04 Dec 2022 10:11:53 AM UTC"; } // namespace version } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/test_common/BUILD b/test_common/BUILD new file mode 100644 index 0000000000..cc62431b53 --- /dev/null +++ b/test_common/BUILD @@ -0,0 +1,7 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "headers", + hdrs = glob(["include/**/*.h"]), + strip_include_prefix = "include", +) diff --git a/test_common/CMakeLists.txt b/test_common/CMakeLists.txt new file mode 100644 index 0000000000..0ef4b9dab0 --- /dev/null +++ b/test_common/CMakeLists.txt @@ -0,0 +1,13 @@ +if(BUILD_TESTING) + add_library(opentelemetry_test_common INTERFACE) + target_include_directories( + opentelemetry_test_common + INTERFACE "$" + "$") + + set_target_properties(opentelemetry_test_common PROPERTIES EXPORT_NAME + "teset_common") + target_link_libraries(opentelemetry_test_common INTERFACE opentelemetry_api) + + add_subdirectory(src) +endif() diff --git a/ext/include/opentelemetry/ext/http/client/nosend/http_client_nosend.h b/test_common/include/opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h similarity index 100% rename from ext/include/opentelemetry/ext/http/client/nosend/http_client_nosend.h rename to test_common/include/opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h diff --git a/test_common/src/CMakeLists.txt b/test_common/src/CMakeLists.txt new file mode 100644 index 0000000000..4b1ee36afa --- /dev/null +++ b/test_common/src/CMakeLists.txt @@ -0,0 +1,3 @@ +if(BUILD_TESTING) + add_subdirectory(http/client/nosend) +endif() diff --git a/ext/src/http/client/nosend/BUILD b/test_common/src/http/client/nosend/BUILD similarity index 92% rename from ext/src/http/client/nosend/BUILD rename to test_common/src/http/client/nosend/BUILD index b27106a164..6053c967f4 100644 --- a/ext/src/http/client/nosend/BUILD +++ b/test_common/src/http/client/nosend/BUILD @@ -14,6 +14,7 @@ cc_library( "//api", "//ext:headers", "//sdk:headers", + "//test_common:headers", "@com_google_googletest//:gtest_main", ], ) diff --git a/ext/src/http/client/nosend/CMakeLists.txt b/test_common/src/http/client/nosend/CMakeLists.txt similarity index 56% rename from ext/src/http/client/nosend/CMakeLists.txt rename to test_common/src/http/client/nosend/CMakeLists.txt index 497daeb342..648944abfc 100644 --- a/ext/src/http/client/nosend/CMakeLists.txt +++ b/test_common/src/http/client/nosend/CMakeLists.txt @@ -1,9 +1,9 @@ if(${BUILD_TESTING}) - add_library(http_client_nosend http_client_factory_nosend.cc - http_client_nosend.cc) + add_library(opentelemetry_http_client_nosend http_client_factory_nosend.cc + http_client_nosend.cc) - set_target_properties(http_client_nosend PROPERTIES EXPORT_NAME - http_client_nosend) + set_target_properties(opentelemetry_http_client_nosend + PROPERTIES EXPORT_NAME opentelemetry_http_client_nosend) if(MSVC) # Explicitly specify that we consume GTest from shared library. The rest of @@ -24,13 +24,8 @@ if(${BUILD_TESTING}) find_library(GMOCK_LIB gmock PATH_SUFFIXES lib) endif() - target_link_libraries(http_client_nosend ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIB} - opentelemetry_ext) + target_link_libraries( + opentelemetry_http_client_nosend ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIB} + opentelemetry_ext opentelemetry_test_common) - install( - TARGETS http_client_nosend - EXPORT "${PROJECT_NAME}-target" - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() diff --git a/ext/src/http/client/nosend/http_client_factory_nosend.cc b/test_common/src/http/client/nosend/http_client_factory_nosend.cc similarity index 55% rename from ext/src/http/client/nosend/http_client_factory_nosend.cc rename to test_common/src/http/client/nosend/http_client_factory_nosend.cc index 841dd2d8eb..c70d1b9578 100644 --- a/ext/src/http/client/nosend/http_client_factory_nosend.cc +++ b/test_common/src/http/client/nosend/http_client_factory_nosend.cc @@ -1,9 +1,10 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/ext/http/client/http_client.h" -#include "opentelemetry/ext/http/client/http_client_factory.h" -#include "opentelemetry/ext/http/client/nosend/http_client_nosend.h" +#ifdef ENABLE_TEST +# include "opentelemetry/ext/http/client/http_client.h" +# include "opentelemetry/ext/http/client/http_client_factory.h" +# include "opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h" namespace http_client = opentelemetry::ext::http::client; @@ -11,3 +12,4 @@ std::shared_ptr http_client::HttpClientFactory::CreateN { return std::make_shared(); } +#endif diff --git a/ext/src/http/client/nosend/http_client_nosend.cc b/test_common/src/http/client/nosend/http_client_nosend.cc similarity index 96% rename from ext/src/http/client/nosend/http_client_nosend.cc rename to test_common/src/http/client/nosend/http_client_nosend.cc index 1c085e3fd4..dd14e4404a 100644 --- a/ext/src/http/client/nosend/http_client_nosend.cc +++ b/test_common/src/http/client/nosend/http_client_nosend.cc @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #ifdef ENABLE_TEST -# include "opentelemetry/ext/http/client/nosend/http_client_nosend.h" +# include "opentelemetry/test_common/ext/http/client/nosend/http_client_nosend.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace ext