Skip to content

Commit adb6cd3

Browse files
committed
enable Cleanup class to work for SDK objects
1 parent af1a71c commit adb6cd3

File tree

8 files changed

+182
-131
lines changed

8 files changed

+182
-131
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ set(BAGGAGE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/+opentele
397397
set(COMMON_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/common/+opentelemetry)
398398
set(TRACE_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/+opentelemetry)
399399
set(METRICS_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/+opentelemetry)
400+
set(COMMON_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/+opentelemetry)
400401
set(DEFAULT_EXPORTER_MATLAB_SOURCES
401402
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m
402403
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultMetricExporter.m)
@@ -417,6 +418,7 @@ install(DIRECTORY ${BAGGAGE_API_MATLAB_SOURCES} DESTINATION .)
417418
install(DIRECTORY ${COMMON_API_MATLAB_SOURCES} DESTINATION .)
418419
install(DIRECTORY ${TRACE_SDK_MATLAB_SOURCES} DESTINATION .)
419420
install(DIRECTORY ${METRICS_SDK_MATLAB_SOURCES} DESTINATION .)
421+
install(DIRECTORY ${COMMON_SDK_MATLAB_SOURCES} DESTINATION .)
420422
install(FILES ${DEFAULT_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
421423
if(WITH_OTLP_HTTP)
422424
install(FILES ${OTLP_HTTP_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})

api/metrics/+opentelemetry/+metrics/MeterProvider.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
% Copyright 2023 The MathWorks, Inc.
66

7-
properties (Access={?opentelemetry.sdk.metrics.MeterProvider, ?opentelemetry.sdk.metrics.Cleanup})
7+
properties (Access={?opentelemetry.sdk.metrics.MeterProvider, ?opentelemetry.sdk.common.Cleanup})
88
Proxy % Proxy object to interface C++ code
99
end
1010

@@ -60,7 +60,7 @@ function setMeterProvider(obj)
6060
end
6161
end
6262

63-
methods(Access=?opentelemetry.sdk.metrics.Cleanup)
63+
methods(Access=?opentelemetry.sdk.common.Cleanup)
6464
function postShutdown(obj)
6565
% POSTSHUTDOWN Handle post-shutdown tasks
6666
obj.Proxy.postShutdown();

api/trace/+opentelemetry/+trace/TracerProvider.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
% Copyright 2023 The MathWorks, Inc.
66

77
properties (Access={?opentelemetry.sdk.trace.TracerProvider, ...
8-
?opentelemetry.sdk.trace.Cleanup})
8+
?opentelemetry.sdk.common.Cleanup})
99
Proxy % Proxy object to interface C++ code
1010
end
1111

@@ -61,7 +61,7 @@ function setTracerProvider(obj)
6161
end
6262
end
6363

64-
methods(Access=?opentelemetry.sdk.trace.Cleanup)
64+
methods(Access=?opentelemetry.sdk.common.Cleanup)
6565
function postShutdown(obj)
6666
% POSTSHUTDOWN Handle post-shutdown tasks
6767
obj.Proxy.postShutdown();
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
classdef Cleanup
2+
% Clean up methods for TracerProvider and MeterProvider
3+
4+
% Copyright 2023 The MathWorks, Inc.
5+
6+
methods (Static)
7+
function success = shutdown(p)
8+
% SHUTDOWN Shutdown
9+
% SUCCESS = SHUTDOWN(P) shuts down all processors/readers
10+
% associated with P. P may be a tracer provider or a meter
11+
% provider. Returns a logical that indicates whether
12+
% shutdown was successful.
13+
%
14+
% See also FORCEFLUSH
15+
16+
success = true;
17+
% return false if input is not the right type
18+
issdk = isa(p, "opentelemetry.sdk.trace.TracerProvider") || ...
19+
isa(p, "opentelemetry.sdk.metrics.MeterProvider");
20+
if issdk
21+
psdk = p;
22+
elseif isa(p, "opentelemetry.trace.TracerProvider")
23+
% convert to TracerProvider class in sdk
24+
try
25+
psdk = opentelemetry.sdk.trace.TracerProvider(p.Proxy);
26+
catch
27+
success = false;
28+
end
29+
elseif isa(p, "opentelemetry.metrics.MeterProvider")
30+
% convert to MeterProvider class in sdk
31+
try
32+
psdk = opentelemetry.sdk.metrics.MeterProvider(p.Proxy);
33+
catch
34+
success = false;
35+
end
36+
else
37+
success = false;
38+
end
39+
40+
if success % still not yet set to false, proceed to shutdown
41+
success = psdk.shutdown;
42+
if ~issdk
43+
% API classes need extra work to swap to a no-op object
44+
postShutdown(p);
45+
end
46+
end
47+
end
48+
49+
function success = forceFlush(p, timeout)
50+
% FORCEFLUSH Force flush
51+
% SUCCESS = FORCEFLUSH(P) immediately exports all spans
52+
% or metrics that have not yet been exported. Returns a
53+
% logical that indicates whether force flush was successful.
54+
%
55+
% SUCCESS = FORCEFLUSH(P, TIMEOUT) specifies a TIMEOUT
56+
% duration. Force flush must be completed within this time,
57+
% or else it will fail.
58+
%
59+
% See also SHUTDOWN
60+
61+
success = true;
62+
63+
% return false if input is not the right type
64+
if isa(p, "opentelemetry.sdk.trace.TracerProvider") || ...
65+
isa(p, "opentelemetry.sdk.metrics.MeterProvider")
66+
psdk = p;
67+
elseif isa(p, "opentelemetry.trace.TracerProvider")
68+
% convert to TracerProvider class in sdk
69+
try
70+
psdk = opentelemetry.sdk.trace.TracerProvider(p.Proxy);
71+
catch
72+
success = false;
73+
end
74+
elseif isa(p, "opentelemetry.metrics.MeterProvider")
75+
% convert to MeterProvider class in sdk
76+
try
77+
psdk = opentelemetry.sdk.metrics.MeterProvider(p.Proxy);
78+
catch
79+
success = false;
80+
end
81+
else
82+
success = false;
83+
end
84+
85+
if success % still not yet set to false, proceed to force flush
86+
if nargin < 2 || ~isa(timeout, "duration")
87+
success = psdk.forceFlush;
88+
else
89+
success = psdk.forceFlush(timeout);
90+
end
91+
end
92+
end
93+
end
94+
95+
end

sdk/metrics/+opentelemetry/+sdk/+metrics/Cleanup.m

Lines changed: 0 additions & 63 deletions
This file was deleted.

sdk/trace/+opentelemetry/+sdk/+trace/Cleanup.m

Lines changed: 0 additions & 63 deletions
This file was deleted.

test/performance/traceTest.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ function setup(testCase)
3737
function teardown(testCase)
3838
% Flush all spans that have not yet been exported
3939
tp = opentelemetry.trace.Provider.getTracerProvider();
40-
opentelemetry.sdk.trace.Cleanup.forceFlush(tp);
40+
opentelemetry.sdk.common.Cleanup.forceFlush(tp);
4141

4242
commonTeardown(testCase);
4343
end

test/tmetrics_sdk.m

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,85 @@ function testCustomResource(testCase)
6767
end
6868
end
6969

70+
function testShutdown(testCase)
71+
% testShutdown: shutdown method should stop exporting
72+
% of metrics
73+
commonSetup(testCase)
74+
75+
exporter = opentelemetry.exporters.otlp.OtlpHttpMetricExporter();
76+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(exporter, ...
77+
"Interval", seconds(2), "Timeout", seconds(1));
78+
mp = opentelemetry.sdk.metrics.MeterProvider(reader);
79+
80+
% shutdown the meter provider
81+
verifyTrue(testCase, shutdown(mp));
82+
83+
% create an instrument and add some values
84+
m = getMeter(mp, "foo");
85+
c = createCounter(m, "bar");
86+
c.add(5);
87+
88+
% wait a little and then gather results, verify no metrics are
89+
% generated
90+
pause(2.5);
91+
clear mp;
92+
results = readJsonResults(testCase);
93+
verifyEmpty(testCase, results);
94+
end
95+
96+
function testCleanupSdk(testCase)
97+
% testCleanupSdk: shutdown an SDK meter provider through the Cleanup class
98+
commonSetup(testCase)
99+
100+
% Shut down an SDK meter provider instance
101+
exporter = opentelemetry.exporters.otlp.OtlpHttpMetricExporter();
102+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(exporter, ...
103+
"Interval", seconds(2), "Timeout", seconds(1));
104+
mp = opentelemetry.sdk.metrics.MeterProvider(reader);
105+
106+
% shutdown the meter provider through the Cleanup class
107+
verifyTrue(testCase, opentelemetry.sdk.common.Cleanup.shutdown(mp));
108+
109+
% create an instrument and add some values
110+
m = getMeter(mp, "foo");
111+
c = createCounter(m, "bar");
112+
c.add(5);
113+
114+
% wait a little and then gather results, verify no metrics are
115+
% generated
116+
pause(2.5);
117+
clear mp;
118+
results = readJsonResults(testCase);
119+
verifyEmpty(testCase, results);
120+
end
121+
122+
function testCleanupApi(testCase)
123+
% testCleanupApi: shutdown an API meter provider through the Cleanup class
124+
commonSetup(testCase)
125+
126+
% Shut down an API meter provider instance
127+
exporter = opentelemetry.exporters.otlp.OtlpHttpMetricExporter();
128+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(exporter, ...
129+
"Interval", seconds(2), "Timeout", seconds(1));
130+
mp = opentelemetry.sdk.metrics.MeterProvider(reader);
131+
setMeterProvider(mp);
132+
clear("mp");
133+
mp_api = opentelemetry.metrics.Provider.getMeterProvider();
134+
135+
% shutdown the API meter provider through the Cleanup class
136+
verifyTrue(testCase, opentelemetry.sdk.common.Cleanup.shutdown(mp_api));
137+
138+
% create an instrument and add some values
139+
m = getMeter(mp_api, "foo");
140+
c = createCounter(m, "bar");
141+
c.add(5);
142+
143+
% wait a little and then gather results, verify no metrics are
144+
% generated
145+
pause(2.5);
146+
clear("mp_api");
147+
results = readJsonResults(testCase);
148+
verifyEmpty(testCase, results);
149+
end
70150
end
71151
end

0 commit comments

Comments
 (0)