Skip to content

Commit 51e0964

Browse files
authored
Merge branch 'main' into allow_construct_grpc_exporters_with_existed_grpc_client
2 parents 8e9d300 + c6d3945 commit 51e0964

File tree

98 files changed

+1408
-306
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+1408
-306
lines changed

.iwyu.imp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@
77
# Work around for C++ STL
88
{ "include": ["<bits/chrono.h>", "private", "<chrono>", "public"] },
99

10-
# Local opentelemetry-cpp
10+
# Local opentelemetry-cpp style
1111

12+
# We prefer to include <gtest/gtest.h> for simplicity
1213
{ "include": ["<gtest/gtest-message.h>", "private", "<gtest/gtest.h>", "public"] },
1314
{ "include": ["<gtest/gtest-test-part.h>", "private", "<gtest/gtest.h>", "public"] },
15+
{ "include": ["<gtest/gtest-param-test.h>", "private", "<gtest/gtest.h>", "public"] },
1416
{ "include": ["<gtest/gtest_pred_impl.h>", "private", "<gtest/gtest.h>", "public"] },
17+
18+
# We prefer to include <gmock/gmock.h> for simplicity
19+
{ "include": ["<gmock/gmock-function-mocker.h>", "private", "<gmock/gmock.h>", "public"] },
20+
{ "include": ["<gmock/gmock-spec-builders.h>", "private", "<gmock/gmock.h>", "public"] },
1521
]
1622

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ Increment the:
2424
* [EXPORTER] Allow to share gRPC clients between OTLP exporters.
2525
[#3041](https://github.com/open-telemetry/opentelemetry-cpp/pull/3041)
2626

27+
* [EXPORTER] Add in-memory metric exporter
28+
[#3043](https://github.com/open-telemetry/opentelemetry-cpp/pull/3043)
29+
2730
Breaking changes:
2831

2932
* [REMOVAL] Remove build option `WITH_DEPRECATED_SDK_FACTORY`

exporters/memory/BUILD

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,90 @@
44
package(default_visibility = ["//visibility:public"])
55

66
cc_library(
7-
name = "in_memory_span_data",
7+
name = "in_memory_metric_data",
8+
srcs = [
9+
"src/in_memory_metric_data.cc",
10+
],
11+
hdrs = [
12+
"include/opentelemetry/exporters/memory/in_memory_metric_data.h",
13+
],
14+
strip_include_prefix = "include",
15+
tags = [
16+
"memory",
17+
"test",
18+
],
19+
deps = [
20+
":in_memory_data",
21+
"//sdk/src/metrics",
22+
],
23+
)
24+
25+
cc_test(
26+
name = "in_memory_metric_data_test",
27+
srcs = ["test/in_memory_metric_data_test.cc"],
28+
tags = [
29+
"memory",
30+
"test",
31+
],
32+
deps = [
33+
":in_memory_metric_data",
34+
"@com_google_googletest//:gtest_main",
35+
],
36+
)
37+
38+
cc_library(
39+
name = "in_memory_metric_exporter_factory",
40+
srcs = [
41+
"src/in_memory_metric_exporter_factory.cc",
42+
],
43+
hdrs = [
44+
"include/opentelemetry/exporters/memory/in_memory_metric_exporter_factory.h",
45+
],
46+
strip_include_prefix = "include",
47+
tags = [
48+
"memory",
49+
"test",
50+
],
51+
deps = [
52+
":in_memory_metric_data",
53+
"//sdk/src/metrics",
54+
],
55+
)
56+
57+
cc_test(
58+
name = "in_memory_metric_exporter_test",
59+
srcs = ["test/in_memory_metric_exporter_test.cc"],
60+
tags = [
61+
"memory",
62+
"test",
63+
],
64+
deps = [
65+
":in_memory_metric_exporter_factory",
66+
"@com_google_googletest//:gtest_main",
67+
],
68+
)
69+
70+
cc_library(
71+
name = "in_memory_data",
872
hdrs = [
973
"include/opentelemetry/exporters/memory/in_memory_data.h",
74+
],
75+
strip_include_prefix = "include",
76+
tags = ["memory"],
77+
deps = [
78+
"//sdk:headers",
79+
],
80+
)
81+
82+
cc_library(
83+
name = "in_memory_span_data",
84+
hdrs = [
1085
"include/opentelemetry/exporters/memory/in_memory_span_data.h",
1186
],
1287
strip_include_prefix = "include",
1388
tags = ["memory"],
1489
deps = [
90+
":in_memory_data",
1591
"//api",
1692
"//sdk/src/resource",
1793
"//sdk/src/trace",

exporters/memory/CMakeLists.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,26 @@ set_target_version(opentelemetry_exporter_in_memory)
1616
target_link_libraries(opentelemetry_exporter_in_memory
1717
PUBLIC opentelemetry_trace)
1818

19+
add_library(
20+
opentelemetry_exporter_in_memory_metric
21+
src/in_memory_metric_exporter_factory.cc src/in_memory_metric_data.cc)
22+
23+
target_include_directories(
24+
opentelemetry_exporter_in_memory_metric
25+
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
26+
"$<INSTALL_INTERFACE:include>")
27+
28+
set_target_properties(opentelemetry_exporter_in_memory_metric
29+
PROPERTIES EXPORT_NAME in_memory_metric_exporter)
30+
set_target_version(opentelemetry_exporter_in_memory_metric)
31+
32+
target_link_libraries(opentelemetry_exporter_in_memory_metric
33+
PUBLIC opentelemetry_metrics)
34+
1935
if(OPENTELEMETRY_INSTALL)
2036
install(
2137
TARGETS opentelemetry_exporter_in_memory
38+
opentelemetry_exporter_in_memory_metric
2239
EXPORT "${PROJECT_NAME}-target"
2340
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2441
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -35,16 +52,29 @@ if(BUILD_TESTING)
3552
add_executable(in_memory_span_data_test test/in_memory_span_data_test.cc)
3653
add_executable(in_memory_span_exporter_test
3754
test/in_memory_span_exporter_test.cc)
55+
add_executable(in_memory_metric_data_test test/in_memory_metric_data_test.cc)
56+
add_executable(in_memory_metric_exporter_test
57+
test/in_memory_metric_exporter_test.cc)
3858

3959
target_link_libraries(
4060
in_memory_span_data_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
4161
opentelemetry_exporter_in_memory opentelemetry_resources)
4262

63+
target_link_libraries(
64+
in_memory_metric_data_test ${GTEST_BOTH_LIBRARIES}
65+
${CMAKE_THREAD_LIBS_INIT} opentelemetry_exporter_in_memory_metric
66+
opentelemetry_resources)
67+
4368
target_link_libraries(
4469
in_memory_span_exporter_test ${GTEST_BOTH_LIBRARIES}
4570
${CMAKE_THREAD_LIBS_INIT} opentelemetry_exporter_in_memory
4671
opentelemetry_resources)
4772

73+
target_link_libraries(
74+
in_memory_metric_exporter_test ${GTEST_BOTH_LIBRARIES}
75+
${CMAKE_THREAD_LIBS_INIT} opentelemetry_exporter_in_memory_metric
76+
opentelemetry_resources)
77+
4878
gtest_add_tests(
4979
TARGET in_memory_span_data_test
5080
TEST_PREFIX exporter.
@@ -53,4 +83,12 @@ if(BUILD_TESTING)
5383
TARGET in_memory_span_exporter_test
5484
TEST_PREFIX exporter.
5585
TEST_LIST in_memory_span_exporter_test)
86+
gtest_add_tests(
87+
TARGET in_memory_metric_data_test
88+
TEST_PREFIX exporter.
89+
TEST_LIST in_memory_metric_data_test)
90+
gtest_add_tests(
91+
TARGET in_memory_metric_exporter_test
92+
TEST_PREFIX exporter.
93+
TEST_LIST in_memory_metric_exporter_test)
5694
endif()
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#include <map>
7+
#include <memory>
8+
#include <string>
9+
#include <tuple>
10+
11+
#include "opentelemetry/exporters/memory/in_memory_data.h"
12+
#include "opentelemetry/sdk/metrics/data/metric_data.h"
13+
14+
OPENTELEMETRY_BEGIN_NAMESPACE
15+
namespace sdk
16+
{
17+
namespace metrics
18+
{
19+
struct ResourceMetrics;
20+
}
21+
} // namespace sdk
22+
namespace exporter
23+
{
24+
namespace memory
25+
{
26+
27+
/// The abstract base class for types used to store in-memory data backing an
28+
/// InMemoryMetricExporter.
29+
class InMemoryMetricData
30+
{
31+
public:
32+
InMemoryMetricData() = default;
33+
virtual ~InMemoryMetricData() = default;
34+
35+
InMemoryMetricData(const InMemoryMetricData &) = delete;
36+
InMemoryMetricData(InMemoryMetricData &&) = delete;
37+
InMemoryMetricData &operator=(const InMemoryMetricData &) = delete;
38+
InMemoryMetricData &operator=(InMemoryMetricData &&) = delete;
39+
40+
virtual void Add(std::unique_ptr<sdk::metrics::ResourceMetrics> resource_metrics) = 0;
41+
};
42+
43+
/// An implementation of InMemoryMetricData that stores full-fidelity data points in a circular
44+
/// buffer. This allows tests to inspect every aspect of exported data, in exchange for a somewhat
45+
/// cumbersome API.
46+
class CircularBufferInMemoryMetricData final : public InMemoryMetricData,
47+
public InMemoryData<sdk::metrics::ResourceMetrics>
48+
{
49+
public:
50+
explicit CircularBufferInMemoryMetricData(size_t buffer_size);
51+
void Add(std::unique_ptr<sdk::metrics::ResourceMetrics> resource_metrics) override;
52+
};
53+
54+
/// An implementation of InMemoryMetricData that stores only the most recent data point in each time
55+
/// series, and allows convenient lookups of time series. This makes simple tests easier to write.
56+
class SimpleAggregateInMemoryMetricData final : public InMemoryMetricData
57+
{
58+
public:
59+
using AttributeToPoint = std::map<opentelemetry::sdk::metrics::PointAttributes,
60+
opentelemetry::sdk::metrics::PointType>;
61+
62+
void Add(std::unique_ptr<sdk::metrics::ResourceMetrics> resource_metrics) override;
63+
const AttributeToPoint &Get(const std::string &scope, const std::string &metric);
64+
void Clear();
65+
66+
private:
67+
std::map<std::tuple<std::string, std::string>, AttributeToPoint> data_;
68+
};
69+
70+
} // namespace memory
71+
} // namespace exporter
72+
OPENTELEMETRY_END_NAMESPACE
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#include <memory>
7+
8+
#include "opentelemetry/sdk/metrics/instruments.h"
9+
#include "opentelemetry/version.h"
10+
11+
OPENTELEMETRY_BEGIN_NAMESPACE
12+
namespace sdk
13+
{
14+
namespace metrics
15+
{
16+
class PushMetricExporter;
17+
} // namespace metrics
18+
} // namespace sdk
19+
namespace exporter
20+
{
21+
namespace memory
22+
{
23+
class InMemoryMetricData;
24+
25+
/// A factory for InMemoryMetricExporter
26+
class InMemoryMetricExporterFactory
27+
{
28+
public:
29+
/// Create a InMemoryMetricExporter with a default buffer size and aggregation
30+
/// temporality selector.
31+
/// @param [out] data the InMemoryMetricData the exporter will write to,
32+
/// for the caller to inspect
33+
/// @param [in] buffer_size number of entries to save in the circular buffer
34+
/// @param [in] temporality output temporality as a function of instrument kind
35+
static std::unique_ptr<opentelemetry::sdk::metrics::PushMetricExporter> Create(
36+
const std::shared_ptr<InMemoryMetricData> &data,
37+
const sdk::metrics::AggregationTemporalitySelector &temporality);
38+
39+
static std::unique_ptr<opentelemetry::sdk::metrics::PushMetricExporter> Create(
40+
const std::shared_ptr<InMemoryMetricData> &data);
41+
};
42+
} // namespace memory
43+
} // namespace exporter
44+
OPENTELEMETRY_END_NAMESPACE

exporters/memory/include/opentelemetry/exporters/memory/in_memory_span_data.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
#pragma once
55

6+
#include <stddef.h>
7+
#include <memory>
8+
#include <vector>
9+
610
#include "opentelemetry/exporters/memory/in_memory_data.h"
7-
#include "opentelemetry/sdk/trace/recordable.h"
811
#include "opentelemetry/sdk/trace/span_data.h"
9-
10-
#include <vector>
12+
#include "opentelemetry/version.h"
1113

1214
OPENTELEMETRY_BEGIN_NAMESPACE
1315
namespace exporter

exporters/memory/include/opentelemetry/exporters/memory/in_memory_span_exporter.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,20 @@
33

44
#pragma once
55

6+
#include <stddef.h>
67
#include <atomic>
7-
#include <mutex>
8+
#include <chrono>
9+
#include <memory>
10+
#include <ostream>
11+
#include <utility>
812

913
#include "opentelemetry/exporters/memory/in_memory_span_data.h"
14+
#include "opentelemetry/nostd/span.h"
15+
#include "opentelemetry/sdk/common/exporter_utils.h"
16+
#include "opentelemetry/sdk/common/global_log_handler.h"
1017
#include "opentelemetry/sdk/trace/exporter.h"
18+
#include "opentelemetry/sdk/trace/recordable.h"
1119
#include "opentelemetry/sdk/trace/span_data.h"
12-
#include "opentelemetry/sdk_config.h"
1320
#include "opentelemetry/version.h"
1421

1522
OPENTELEMETRY_BEGIN_NAMESPACE

0 commit comments

Comments
 (0)