Skip to content

Commit f4b6b37

Browse files
authored
Merge branch 'main' into multi-callback-approach
2 parents a2c9ceb + d299348 commit f4b6b37

36 files changed

+894
-110
lines changed

.vscode/launch.json

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Debug on Windows",
6+
"type": "cppvsdbg",
7+
"request": "launch",
8+
"program": "${workspaceFolder}/build/<path-to-bin-file>",
9+
"args": [],
10+
"stopAtEntry": false,
11+
"cwd": "${workspaceFolder}",
12+
"environment": [],
13+
"externalConsole": false
14+
},
15+
{
16+
"name": "Debug on Linux",
17+
"type": "gdb",
18+
"request": "launch",
19+
"target": "${workspaceFolder}/bazel-bin/<path to the bin file>",
20+
"cwd": "${workspaceRoot}",
21+
"valuesFormatting": "parseText"
22+
}
23+
]
24+
}

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Increment the:
1515

1616
## [Unreleased]
1717

18+
* [LOG SDK] Add log sdk builders (#1486) [#1524](https://github.com/open-telemetry/opentelemetry-cpp/pull/1524)
19+
1820
## [1.5.0] 2022-07-29
1921

2022
* [EXPORTER BUILD] Add resources to dep list of prometheus exporter test [#1527](https://github.com/open-telemetry/opentelemetry-cpp/pull/1527)

examples/otlp/grpc_log_main.cc

+8-13
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
#ifdef ENABLE_LOGS_PREVIEW
5-
// Make sure to include GRPC exporter first because otherwise Abseil may create
6-
// ambiguity with `nostd::variant`. See issue:
7-
// https://github.com/open-telemetry/opentelemetry-cpp/issues/880
8-
# include "opentelemetry/exporters/otlp/otlp_grpc_log_exporter.h"
9-
105
# include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h"
6+
# include "opentelemetry/exporters/otlp/otlp_grpc_log_exporter_factory.h"
117
# include "opentelemetry/logs/provider.h"
12-
# include "opentelemetry/sdk/logs/logger_provider.h"
13-
# include "opentelemetry/sdk/logs/simple_log_processor.h"
8+
# include "opentelemetry/sdk/logs/logger_provider_factory.h"
9+
# include "opentelemetry/sdk/logs/simple_log_processor_factory.h"
1410
# include "opentelemetry/sdk/trace/simple_processor_factory.h"
1511
# include "opentelemetry/sdk/trace/tracer_provider_factory.h"
1612
# include "opentelemetry/trace/provider.h"
@@ -47,12 +43,11 @@ void InitTracer()
4743
void InitLogger()
4844
{
4945
// Create OTLP exporter instance
50-
auto exporter = std::unique_ptr<logs_sdk::LogExporter>(new otlp::OtlpGrpcLogExporter(opts));
51-
auto sdkProvider = std::shared_ptr<logs_sdk::LoggerProvider>(
52-
new logs_sdk::LoggerProvider(std::unique_ptr<logs_sdk::LogProcessor>(
53-
new logs_sdk::SimpleLogProcessor(std::move(exporter)))));
54-
auto apiProvider = nostd::shared_ptr<logs::LoggerProvider>(sdkProvider);
55-
auto provider = nostd::shared_ptr<logs::LoggerProvider>(apiProvider);
46+
auto exporter = otlp::OtlpGrpcLogExporterFactory::Create(opts);
47+
auto processor = logs_sdk::SimpleLogProcessorFactory::Create(std::move(exporter));
48+
nostd::shared_ptr<logs::LoggerProvider> provider(
49+
logs_sdk::LoggerProviderFactory::Create(std::move(processor)));
50+
5651
opentelemetry::logs::Provider::SetLoggerProvider(provider);
5752
}
5853
} // namespace

examples/otlp/http_log_main.cc

+9-10
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33

44
#ifdef ENABLE_LOGS_PREVIEW
55
# include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
6-
# include "opentelemetry/exporters/otlp/otlp_http_log_exporter.h"
6+
# include "opentelemetry/exporters/otlp/otlp_http_log_exporter_factory.h"
7+
# include "opentelemetry/exporters/otlp/otlp_http_log_exporter_options.h"
78
# include "opentelemetry/logs/provider.h"
8-
# include "opentelemetry/sdk/logs/logger_provider.h"
9-
# include "opentelemetry/sdk/logs/simple_log_processor.h"
9+
# include "opentelemetry/sdk/logs/logger_provider_factory.h"
10+
# include "opentelemetry/sdk/logs/simple_log_processor_factory.h"
1011
# include "opentelemetry/sdk/trace/simple_processor_factory.h"
1112
# include "opentelemetry/sdk/trace/tracer_provider_factory.h"
1213
# include "opentelemetry/trace/provider.h"
@@ -46,13 +47,11 @@ void InitLogger()
4647
{
4748
logger_opts.console_debug = true;
4849
// Create OTLP exporter instance
49-
auto exporter =
50-
std::unique_ptr<logs_sdk::LogExporter>(new otlp::OtlpHttpLogExporter(logger_opts));
51-
auto sdkProvider = std::shared_ptr<logs_sdk::LoggerProvider>(
52-
new logs_sdk::LoggerProvider(std::unique_ptr<logs_sdk::LogProcessor>(
53-
new logs_sdk::SimpleLogProcessor(std::move(exporter)))));
54-
auto apiProvider = nostd::shared_ptr<logs::LoggerProvider>(sdkProvider);
55-
auto provider = nostd::shared_ptr<logs::LoggerProvider>(apiProvider);
50+
auto exporter = otlp::OtlpHttpLogExporterFactory::Create(logger_opts);
51+
auto processor = logs_sdk::SimpleLogProcessorFactory::Create(std::move(exporter));
52+
std::shared_ptr<logs::LoggerProvider> provider =
53+
logs_sdk::LoggerProviderFactory::Create(std::move(processor));
54+
5655
opentelemetry::logs::Provider::SetLoggerProvider(provider);
5756
}
5857
} // namespace

exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_exporter.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
# include "nlohmann/json.hpp"
88
# include "opentelemetry/common/spin_lock_mutex.h"
9-
# include "opentelemetry/ext/http/client/curl/http_client_curl.h"
9+
# include "opentelemetry/ext/http/client/http_client_factory.h"
1010
# include "opentelemetry/nostd/type_traits.h"
1111
# include "opentelemetry/sdk/logs/exporter.h"
1212
# include "opentelemetry/sdk/logs/log_record.h"
@@ -104,7 +104,7 @@ class ElasticsearchLogExporter final : public opentelemetry::sdk::logs::LogExpor
104104
ElasticsearchExporterOptions options_;
105105

106106
// Object that stores the HTTP sessions that have been created
107-
std::unique_ptr<ext::http::client::HttpClient> http_client_;
107+
std::shared_ptr<ext::http::client::HttpClient> http_client_;
108108
mutable opentelemetry::common::SpinLockMutex lock_;
109109
bool isShutdown() const noexcept;
110110
};

exporters/elasticsearch/src/es_log_exporter.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
# include <sstream> // std::stringstream
77

8+
# include <condition_variable>
89
# include <mutex>
910
# include "opentelemetry/exporters/elasticsearch/es_log_exporter.h"
1011
# include "opentelemetry/exporters/elasticsearch/es_log_recordable.h"
@@ -225,11 +226,11 @@ class AsyncResponseHandler : public http_client::EventHandler
225226

226227
ElasticsearchLogExporter::ElasticsearchLogExporter()
227228
: options_{ElasticsearchExporterOptions()},
228-
http_client_{new ext::http::client::curl::HttpClient()}
229+
http_client_{ext::http::client::HttpClientFactory::Create()}
229230
{}
230231

231232
ElasticsearchLogExporter::ElasticsearchLogExporter(const ElasticsearchExporterOptions &options)
232-
: options_{options}, http_client_{new ext::http::client::curl::HttpClient()}
233+
: options_{options}, http_client_{ext::http::client::HttpClientFactory::Create()}
233234
{}
234235

235236
std::unique_ptr<sdklogs::Recordable> ElasticsearchLogExporter::MakeRecordable() noexcept

exporters/otlp/BUILD

+37
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,13 @@ cc_library(
144144
name = "otlp_http_log_exporter",
145145
srcs = [
146146
"src/otlp_http_log_exporter.cc",
147+
"src/otlp_http_log_exporter_factory.cc",
147148
],
148149
hdrs = [
149150
"include/opentelemetry/exporters/otlp/otlp_environment.h",
150151
"include/opentelemetry/exporters/otlp/otlp_http_log_exporter.h",
152+
"include/opentelemetry/exporters/otlp/otlp_http_log_exporter_factory.h",
153+
"include/opentelemetry/exporters/otlp/otlp_http_log_exporter_options.h",
151154
"include/opentelemetry/exporters/otlp/protobuf_include_prefix.h",
152155
"include/opentelemetry/exporters/otlp/protobuf_include_suffix.h",
153156
],
@@ -192,11 +195,13 @@ cc_library(
192195
name = "otlp_grpc_log_exporter",
193196
srcs = [
194197
"src/otlp_grpc_log_exporter.cc",
198+
"src/otlp_grpc_log_exporter_factory.cc",
195199
],
196200
hdrs = [
197201
"include/opentelemetry/exporters/otlp/otlp_environment.h",
198202
"include/opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h",
199203
"include/opentelemetry/exporters/otlp/otlp_grpc_log_exporter.h",
204+
"include/opentelemetry/exporters/otlp/otlp_grpc_log_exporter_factory.h",
200205
"include/opentelemetry/exporters/otlp/protobuf_include_prefix.h",
201206
"include/opentelemetry/exporters/otlp/protobuf_include_suffix.h",
202207
],
@@ -324,6 +329,22 @@ cc_test(
324329
],
325330
)
326331

332+
cc_test(
333+
name = "otlp_http_log_exporter_factory_test",
334+
srcs = ["test/otlp_http_log_exporter_factory_test.cc"],
335+
tags = [
336+
"otlp",
337+
"otlp_http_log",
338+
"test",
339+
],
340+
deps = [
341+
":otlp_http_log_exporter",
342+
"//api",
343+
"//ext/src/http/client/nosend:http_client_nosend",
344+
"@com_google_googletest//:gtest_main",
345+
],
346+
)
347+
327348
cc_test(
328349
name = "otlp_http_metric_exporter_test",
329350
srcs = ["test/otlp_http_metric_exporter_test.cc"],
@@ -356,6 +377,22 @@ cc_test(
356377
],
357378
)
358379

380+
cc_test(
381+
name = "otlp_grpc_log_exporter_factory_test",
382+
srcs = ["test/otlp_grpc_log_exporter_factory_test.cc"],
383+
tags = [
384+
"otlp",
385+
"otlp_grpc_log",
386+
"test",
387+
],
388+
deps = [
389+
":otlp_grpc_log_exporter",
390+
"//api",
391+
"//sdk/src/logs",
392+
"@com_google_googletest//:gtest_main",
393+
],
394+
)
395+
359396
otel_cc_benchmark(
360397
name = "otlp_grpc_exporter_benchmark",
361398
srcs = ["test/otlp_grpc_exporter_benchmark.cc"],

exporters/otlp/CMakeLists.txt

+28-4
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ if(WITH_OTLP_GRPC)
2929

3030
list(APPEND OPENTELEMETRY_OTLP_TARGETS opentelemetry_exporter_otlp_grpc)
3131

32-
add_library(opentelemetry_exporter_otlp_grpc_log
33-
src/otlp_grpc_log_exporter.cc)
32+
add_library(
33+
opentelemetry_exporter_otlp_grpc_log src/otlp_grpc_log_exporter.cc
34+
src/otlp_grpc_log_exporter_factory.cc)
3435

3536
set_target_properties(opentelemetry_exporter_otlp_grpc_log
3637
PROPERTIES EXPORT_NAME otlp_grpc_log_exporter)
@@ -90,8 +91,9 @@ if(WITH_OTLP_HTTP)
9091
list(APPEND OPENTELEMETRY_OTLP_TARGETS opentelemetry_exporter_otlp_http)
9192

9293
if(WITH_LOGS_PREVIEW)
93-
add_library(opentelemetry_exporter_otlp_http_log
94-
src/otlp_http_log_exporter.cc)
94+
add_library(
95+
opentelemetry_exporter_otlp_http_log
96+
src/otlp_http_log_exporter.cc src/otlp_http_log_exporter_factory.cc)
9597

9698
set_target_properties(opentelemetry_exporter_otlp_http_log
9799
PROPERTIES EXPORT_NAME otlp_http_log_exporter)
@@ -216,6 +218,17 @@ if(BUILD_TESTING)
216218
TARGET otlp_grpc_log_exporter_test
217219
TEST_PREFIX exporter.otlp.
218220
TEST_LIST otlp_grpc_log_exporter_test)
221+
222+
add_executable(otlp_grpc_log_exporter_factory_test
223+
test/otlp_grpc_log_exporter_factory_test.cc)
224+
target_link_libraries(
225+
otlp_grpc_log_exporter_factory_test ${GTEST_BOTH_LIBRARIES}
226+
${CMAKE_THREAD_LIBS_INIT} ${GMOCK_LIB}
227+
opentelemetry_exporter_otlp_grpc_log opentelemetry_logs)
228+
gtest_add_tests(
229+
TARGET otlp_grpc_log_exporter_factory_test
230+
TEST_PREFIX exporter.otlp.
231+
TEST_LIST otlp_grpc_log_exporter_factory_test)
219232
endif()
220233
endif()
221234

@@ -254,6 +267,17 @@ if(BUILD_TESTING)
254267
TARGET otlp_http_log_exporter_test
255268
TEST_PREFIX exporter.otlp.
256269
TEST_LIST otlp_http_log_exporter_test)
270+
271+
add_executable(otlp_http_log_exporter_factory_test
272+
test/otlp_http_log_exporter_factory_test.cc)
273+
target_link_libraries(
274+
otlp_http_log_exporter_factory_test ${GTEST_BOTH_LIBRARIES}
275+
${CMAKE_THREAD_LIBS_INIT} ${GMOCK_LIB}
276+
opentelemetry_exporter_otlp_http_log opentelemetry_logs)
277+
gtest_add_tests(
278+
TARGET otlp_http_log_exporter_factory_test
279+
TEST_PREFIX exporter.otlp.
280+
TEST_LIST otlp_http_log_exporter_factory_test)
257281
endif()
258282

259283
if(NOT WITH_METRICS_PREVIEW)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#ifdef ENABLE_LOGS_PREVIEW
7+
8+
# include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h"
9+
# include "opentelemetry/sdk/logs/exporter.h"
10+
11+
OPENTELEMETRY_BEGIN_NAMESPACE
12+
namespace exporter
13+
{
14+
namespace otlp
15+
{
16+
17+
/**
18+
* Factory class for OtlpGrpcLogExporter.
19+
*/
20+
class OtlpGrpcLogExporterFactory
21+
{
22+
public:
23+
/**
24+
* Create a OtlpGrpcLogExporter.
25+
*/
26+
static std::unique_ptr<opentelemetry::sdk::logs::LogExporter> Create();
27+
28+
/**
29+
* Create a OtlpGrpcLogExporter.
30+
*/
31+
static std::unique_ptr<opentelemetry::sdk::logs::LogExporter> Create(
32+
const OtlpGrpcExporterOptions &options);
33+
};
34+
35+
} // namespace otlp
36+
} // namespace exporter
37+
OPENTELEMETRY_END_NAMESPACE
38+
39+
#endif /* ENABLE_LOGS_PREVIEW */

exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_client.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ class OtlpHttpClient
186186
event_handle.swap(input_handle);
187187
}
188188

189-
inline explicit HttpSessionData(HttpSessionData &&other)
189+
inline HttpSessionData(HttpSessionData &&other)
190190
{
191191
session.swap(other.session);
192192
event_handle.swap(other.event_handle);

exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_log_exporter.h

+1-41
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
# include "opentelemetry/exporters/otlp/otlp_http_client.h"
1010

1111
# include "opentelemetry/exporters/otlp/otlp_environment.h"
12+
# include "opentelemetry/exporters/otlp/otlp_http_log_exporter_options.h"
1213

1314
# include <chrono>
1415
# include <cstddef>
@@ -21,47 +22,6 @@ namespace exporter
2122
namespace otlp
2223
{
2324

24-
/**
25-
* Struct to hold OTLP exporter options.
26-
*/
27-
struct OtlpHttpLogExporterOptions
28-
{
29-
// The endpoint to export to. By default
30-
// @see
31-
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md
32-
// @see https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver
33-
std::string url = GetOtlpDefaultHttpLogEndpoint();
34-
35-
// By default, post json data
36-
HttpRequestContentType content_type = HttpRequestContentType::kJson;
37-
38-
// If convert bytes into hex. By default, we will convert all bytes but id into base64
39-
// This option is ignored if content_type is not kJson
40-
JsonBytesMappingKind json_bytes_mapping = JsonBytesMappingKind::kHexId;
41-
42-
// If using the json name of protobuf field to set the key of json. By default, we will use the
43-
// field name just like proto files.
44-
bool use_json_name = false;
45-
46-
// Whether to print the status of the exporter in the console
47-
bool console_debug = false;
48-
49-
// TODO: Enable/disable to verify SSL certificate
50-
std::chrono::system_clock::duration timeout = GetOtlpDefaultLogTimeout();
51-
52-
// Additional HTTP headers
53-
OtlpHeaders http_headers = GetOtlpDefaultLogHeaders();
54-
55-
# ifdef ENABLE_ASYNC_EXPORT
56-
// Concurrent requests
57-
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlpgrpc-concurrent-requests
58-
std::size_t max_concurrent_requests = 64;
59-
60-
// Requests per connections
61-
std::size_t max_requests_per_connection = 8;
62-
# endif
63-
};
64-
6525
/**
6626
* The OTLP exporter exports log data in OpenTelemetry Protocol (OTLP) format.
6727
*/

0 commit comments

Comments
 (0)