Skip to content

Commit f2dec95

Browse files
committed
Make Otlp Http exporter optional
1 parent 866ff79 commit f2dec95

File tree

7 files changed

+66
-19
lines changed

7 files changed

+66
-19
lines changed

CMakeLists.txt

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ project(${CLIENT_PROJECT_NAME} VERSION 0.1.0)
1010
# Options
1111
# ######################################
1212

13+
option(WITH_OTLP_HTTP "Whether to include the OTLP HTTP exporter" ON)
1314
option(WITH_OTLP_GRPC "Whether to include the OTLP gRPC exporter" OFF)
15+
if(NOT WITH_OTLP_HTTP AND NOT WITH_OTLP_GRPC)
16+
message(FATAL_ERROR "At least one of WITH_OTLP_HTTP and WITH_OTLP_GRPC must be ON")
17+
endif()
1418

1519
# ######################################
1620
# libmexclass FetchContent Configuration
@@ -44,12 +48,16 @@ set(OPENTELEMETRY_PROXY_LIBRARY_NAME "OtelMatlabProxy")
4448

4549
# Specify location for find_package to locate opentelemetry-cpp-config.cmake
4650
find_package(opentelemetry-cpp CONFIG REQUIRED)
47-
find_package(CURL REQUIRED)
4851
find_package(Protobuf REQUIRED)
4952
find_package(nlohmann_json REQUIRED)
5053
if(WIN32)
5154
find_package(zlib REQUIRED)
5255
endif()
56+
57+
if(WITH_OTLP_HTTP)
58+
find_package(CURL REQUIRED)
59+
endif()
60+
5361
if(WITH_OTLP_GRPC)
5462
find_package(gRPC REQUIRED)
5563
find_package(absl REQUIRED)
@@ -91,9 +99,11 @@ set(OPENTELEMETRY_PROXY_SOURCES
9199
${TRACE_SDK_SOURCE_DIR}/TracerProviderProxy.cpp
92100
${TRACE_SDK_SOURCE_DIR}/SimpleSpanProcessorProxy.cpp
93101
${TRACE_SDK_SOURCE_DIR}/BatchSpanProcessorProxy.cpp
94-
${TRACE_SDK_SOURCE_DIR}/ParentBasedSamplerProxy.cpp
95-
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpSpanExporterProxy.cpp
96-
)
102+
${TRACE_SDK_SOURCE_DIR}/ParentBasedSamplerProxy.cpp)
103+
if(WITH_OTLP_HTTP)
104+
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
105+
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpSpanExporterProxy.cpp)
106+
endif()
97107
if(WITH_OTLP_GRPC)
98108
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
99109
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcSpanExporterProxy.cpp)
@@ -105,16 +115,24 @@ libmexclass_client_add_proxy_library(
105115
INCLUDE_DIRS ${OPENTELEMETRY_PROXY_INCLUDE_DIRS}
106116
)
107117

108-
# Additional compiler flags for gRPC exporter
109-
if(WITH_OTLP_GRPC)
118+
# Additional compiler flags for HTTP/gRPC exporters
119+
if(WITH_OTLP_HTTP)
110120
if(WIN32)
111-
set(OTLP_GRPC_MACRO /DWITH_OTLP_GRPC)
121+
set(OTLP_MACROS /DWITH_OTLP_HTTP)
112122
else()
113-
set(OTLP_GRPC_MACRO "-D WITH_OTLP_GRPC")
123+
set(OTLP_MACROS -D WITH_OTLP_HTTP)
114124
endif()
125+
endif()
115126

116-
target_compile_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_GRPC_MACRO})
127+
if(WITH_OTLP_GRPC)
128+
if(WIN32)
129+
set(OTLP_MACROS ${OTLP_MACROS} /DWITH_OTLP_GRPC)
130+
else()
131+
set(OTLP_MACROS ${OTLP_MACROS} -D WITH_OTLP_GRPC)
132+
endif()
117133
endif()
134+
135+
target_compile_options(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OTLP_MACROS})
118136

119137
# link against OpenTelemetry-cpp libraries and their dependencies
120138
target_link_libraries(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE ${OPENTELEMETRY_CPP_LIBRARIES})
@@ -135,18 +153,23 @@ target_compile_features(${OPENTELEMETRY_PROXY_LIBRARY_NAME} PRIVATE cxx_std_17)
135153
if(WIN32)
136154
# runtime dependent libraries
137155
set(DEPENDS_BINDIR $<$<CONFIG:Debug>:debug/bin>$<$<CONFIG:Release>:bin>)
138-
FILE(GLOB CURL_RUNTIME ${CURL_INCLUDE_DIRS}/../bin/*.dll)
156+
FILE(GLOB PROTOBUF_RUNTIME ${PROTOBUF_INCLUDE_DIRS}/../bin/*.dll)
139157
FILE(GLOB ZLIB_RUNTIME ${ZLIB_INCLUDE_DIRS}/../bin/*.dll)
140158

141-
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${CURL_RUNTIME}
142-
${PROTOBUF_RUNTIME}
159+
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${PROTOBUF_RUNTIME}
143160
${ZLIB_RUNTIME})
161+
162+
if(WITH_OTLP_HTTP)
163+
FILE(GLOB CURL_RUNTIME ${CURL_INCLUDE_DIRS}/../bin/*.dll)
164+
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES}
165+
${CURL_RUNTIME})
166+
endif()
167+
144168
if(WITH_OTLP_GRPC)
145169
FILE(GLOB ABSEIL_RUNTIME ${ABSL_INCLUDE_DIRS}/../bin/*.dll)
146170
FILE(GLOB C_ARES_RUNTIME ${C-ARES_INCLUDE_DIR}/../bin/*.dll)
147171
FILE(GLOB OPENSSL_RUNTIME ${OPENSSL_INCLUDE_DIR}/../bin/*.dll)
148172
FILE(GLOB RE2_RUNTIME ${RE2_INCLUDE_DIR}/../bin/*.dll)
149-
FILE(GLOB PROTOBUF_RUNTIME ${PROTOBUF_INCLUDE_DIRS}/../bin/*.dll)
150173
set(OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES}
151174
${ABSEIL_RUNTIME}
152175
${C_ARES_RUNTIME}
@@ -188,6 +211,7 @@ set(TRACE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/+opentelemetr
188211
set(CONTEXT_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/context/+opentelemetry)
189212
set(BAGGAGE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/+opentelemetry)
190213
set(TRACE_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/+opentelemetry)
214+
set(DEFAULT_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m)
191215
set(OTLP_HTTP_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m)
192216
set(OTLP_GRPC_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcSpanExporter.m)
193217

@@ -197,7 +221,10 @@ install(DIRECTORY ${TRACE_API_MATLAB_SOURCES} DESTINATION .)
197221
install(DIRECTORY ${CONTEXT_API_MATLAB_SOURCES} DESTINATION .)
198222
install(DIRECTORY ${BAGGAGE_API_MATLAB_SOURCES} DESTINATION .)
199223
install(DIRECTORY ${TRACE_SDK_MATLAB_SOURCES} DESTINATION .)
200-
install(FILES ${OTLP_HTTP_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
224+
install(FILES ${DEFAULT_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
225+
if(WITH_OTLP_HTTP)
226+
install(FILES ${OTLP_HTTP_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
227+
endif()
201228
if(WITH_OTLP_GRPC)
202229
install(FILES ${OTLP_GRPC_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
203230
endif()

OtelMatlabProxyFactory.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
#include "opentelemetry-matlab/sdk/trace/AlwaysOffSamplerProxy.h"
2323
#include "opentelemetry-matlab/sdk/trace/TraceIdRatioBasedSamplerProxy.h"
2424
#include "opentelemetry-matlab/sdk/trace/ParentBasedSamplerProxy.h"
25-
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpSpanExporterProxy.h"
25+
#ifdef WITH_OTLP_HTTP
26+
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpSpanExporterProxy.h"
27+
#endif
2628
#ifdef WITH_OTLP_GRPC
2729
#include "opentelemetry-matlab/exporters/otlp/OtlpGrpcSpanExporterProxy.h"
2830
#endif
@@ -52,7 +54,9 @@ OtelMatlabProxyFactory::make_proxy(const libmexclass::proxy::ClassName& class_na
5254
REGISTER_PROXY(libmexclass.opentelemetry.sdk.AlwaysOffSamplerProxy, libmexclass::opentelemetry::sdk::AlwaysOffSamplerProxy);
5355
REGISTER_PROXY(libmexclass.opentelemetry.sdk.TraceIdRatioBasedSamplerProxy, libmexclass::opentelemetry::sdk::TraceIdRatioBasedSamplerProxy);
5456
REGISTER_PROXY(libmexclass.opentelemetry.sdk.ParentBasedSamplerProxy, libmexclass::opentelemetry::sdk::ParentBasedSamplerProxy);
55-
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpSpanExporterProxy);
57+
#ifdef WITH_OTLP_HTTP
58+
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpSpanExporterProxy);
59+
#endif
5660
#ifdef WITH_OTLP_GRPC
5761
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpGrpcSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpGrpcSpanExporterProxy);
5862
#endif
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function dexp = defaultSpanExporter
2+
% Get the default span exporter depending on installation
3+
% EXP = OPENTELEMETRY.EXPORTERS.OTLP.DEFAULTSPANEXPORTER returns the
4+
% default span exporter. OtlpHttpSpanExporter is the default if it is
5+
% installed. Otherwise, OtlpGrpcSpanExporter is the default.
6+
%
7+
% See also OPENTELEMETRY.EXPORTERS.OTLP.OTLPHTTPSPANEXPORTER,
8+
% OPENTELEMETRY.EXPORTERS.OTLP.OTLPGRPCSPANEXPORTER
9+
10+
% Copyright 2023 The MathWorks, Inc.
11+
12+
if exist("opentelemetry.exporters.otlp.OtlpHttpSpanExporter", "class")
13+
dexp = opentelemetry.exporters.otlp.OtlpHttpSpanExporter;
14+
else
15+
dexp = opentelemetry.exporters.otlp.OtlpGrpcSpanExporter;
16+
end

sdk/trace/+opentelemetry/+sdk/+trace/BatchSpanProcessor.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
% OPENTELEMETRY.SDK.TRACE.TRACERPROVIDER
3838
arguments
3939
spanexporter {mustBeA(spanexporter, "opentelemetry.sdk.trace.SpanExporter")} = ...
40-
opentelemetry.exporters.otlp.OtlpHttpSpanExporter()
40+
opentelemetry.exporters.otlp.defaultSpanExporter()
4141
end
4242
arguments (Repeating)
4343
optionnames (1,:) {mustBeTextScalar}

sdk/trace/+opentelemetry/+sdk/+trace/SimpleSpanProcessor.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
% OPENTELEMETRY.SDK.TRACE.TRACERPROVIDER
2121
arguments
2222
spanexporter {mustBeA(spanexporter, "opentelemetry.sdk.trace.SpanExporter")} = ...
23-
opentelemetry.exporters.otlp.OtlpHttpSpanExporter()
23+
opentelemetry.exporters.otlp.defaultSpanExporter()
2424
end
2525

2626
obj = obj@opentelemetry.sdk.trace.SpanProcessor(spanexporter, ...

test/readJsonResults.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
terminateCollector(testCase);
77

8-
pause(1);
98
assert(exist(testCase.TestData.jsonfile, "file"));
109

1110
fid = fopen(testCase.TestData.jsonfile);

test/terminateCollector.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ function terminateCollector(testCase)
1212
% Retry up to 3 times
1313
while ~isempty(pid) && retry < 4
1414
system(testCase.TestData.sigint(pid));
15+
pause(2); % give a little time for the collector to shut down
1516
system(testCase.TestData.list("otelcol") + " > " + testCase.TestData.pidfile);
1617
tbl = testCase.TestData.readlist(testCase.TestData.pidfile);
1718
pid = testCase.TestData.extractPid(tbl);

0 commit comments

Comments
 (0)