Skip to content

Commit f858104

Browse files
authored
Merge pull request #199 from mathworks/timestamps
Add unsetTracerProvider and friends
2 parents 7fcd34e + 2d1b82f commit f858104

File tree

23 files changed

+352
-73
lines changed

23 files changed

+352
-73
lines changed

OtelMatlabProxyFactory.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2023-2024 The MathWorks, Inc.
1+
// Copyright 2023-2025 The MathWorks, Inc.
22

33
#include "OtelMatlabProxyFactory.h"
44

@@ -8,7 +8,10 @@
88
//#include "opentelemetry-matlab/trace/ScopeProxy.h"
99
#include "opentelemetry-matlab/trace/SpanContextProxy.h"
1010
#include "opentelemetry-matlab/trace/TraceContextPropagatorProxy.h"
11+
#include "opentelemetry-matlab/trace/NoOpTracerProviderProxy.h"
12+
#include "opentelemetry-matlab/metrics/NoOpMeterProviderProxy.h"
1113
#include "opentelemetry-matlab/logs/LoggerProviderProxy.h"
14+
#include "opentelemetry-matlab/logs/NoOpLoggerProviderProxy.h"
1215
#include "opentelemetry-matlab/context/propagation/TextMapCarrierProxy.h"
1316
#include "opentelemetry-matlab/context/propagation/TextMapPropagatorProxy.h"
1417
#include "opentelemetry-matlab/context/propagation/CompositePropagatorProxy.h"
@@ -57,6 +60,9 @@ OtelMatlabProxyFactory::make_proxy(const libmexclass::proxy::ClassName& class_na
5760
REGISTER_PROXY(libmexclass.opentelemetry.SpanProxy, libmexclass::opentelemetry::SpanProxy);
5861
//REGISTER_PROXY(libmexclass.opentelemetry.ScopeProxy, libmexclass::opentelemetry::ScopeProxy);
5962
REGISTER_PROXY(libmexclass.opentelemetry.SpanContextProxy, libmexclass::opentelemetry::SpanContextProxy);
63+
REGISTER_PROXY(libmexclass.opentelemetry.NoOpTracerProviderProxy, libmexclass::opentelemetry::NoOpTracerProviderProxy);
64+
REGISTER_PROXY(libmexclass.opentelemetry.NoOpMeterProviderProxy, libmexclass::opentelemetry::NoOpMeterProviderProxy);
65+
REGISTER_PROXY(libmexclass.opentelemetry.NoOpLoggerProviderProxy, libmexclass::opentelemetry::NoOpLoggerProviderProxy);
6066
REGISTER_PROXY(libmexclass.opentelemetry.TextMapCarrierProxy, libmexclass::opentelemetry::TextMapCarrierProxy);
6167
REGISTER_PROXY(libmexclass.opentelemetry.ContextProxy, libmexclass::opentelemetry::ContextProxy);
6268
REGISTER_PROXY(libmexclass.opentelemetry.TokenProxy, libmexclass::opentelemetry::TokenProxy);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
classdef NoOpLoggerProvider < handle
2+
% A no-op logger provider does nothing and is used to disable logging.
3+
% For internal use only.
4+
5+
% Copyright 2025 The MathWorks, Inc.
6+
7+
properties (Access=private)
8+
Proxy % Proxy object to interface C++ code
9+
end
10+
11+
methods (Access=?opentelemetry.logs.Provider)
12+
function obj = NoOpLoggerProvider()
13+
% constructs a no-op LoggerProvider and sets it as the global
14+
% instance
15+
obj.Proxy = libmexclass.proxy.Proxy("Name", ...
16+
"libmexclass.opentelemetry.NoOpLoggerProviderProxy", ...
17+
"ConstructorArguments", {});
18+
end
19+
end
20+
end

api/logs/+opentelemetry/+logs/Provider.m

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
classdef Provider
22
% Get and set the global instance of logger provider
33

4-
% Copyright 2024 The MathWorks, Inc.
4+
% Copyright 2024-2025 The MathWorks, Inc.
55

66
methods (Static)
77
function p = getLoggerProvider()
@@ -19,10 +19,22 @@ function setLoggerProvider(p)
1919
% OPENTELEMETRY.LOGS.PROVIDER.SETLOGGERPROVIDER(LP) sets
2020
% LP as the global instance of logger provider.
2121
%
22-
% See also OPENTELEMETRY.LOGS.PROVIDER.GETTRACERPROVIDER
22+
% See also OPENTELEMETRY.LOGS.PROVIDER.GETLOGGERPROVIDER,
23+
% OPENTELEMETRY.LOGS.PROVIDER.UNSETLOGGERPROVIDER
2324

2425
p.setLoggerProvider();
2526
end
27+
28+
function unsetLoggerProvider()
29+
% Unset the global instance of logger provider, which disables
30+
% logging
31+
% OPENTELEMETRY.LOGS.PROVIDER.UNSETLOGGERPROVIDER() unsets
32+
% the global instance of logger provider.
33+
%
34+
% See also OPENTELEMETRY.LOGS.PROVIDER.SETLOGGERPROVIDER
35+
36+
opentelemetry.logs.internal.NoOpLoggerProvider;
37+
end
2638
end
2739

2840
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2025 The MathWorks, Inc.
2+
3+
#pragma once
4+
5+
#include "libmexclass/proxy/Proxy.h"
6+
7+
#include "opentelemetry/logs/logger_provider.h"
8+
#include "opentelemetry/logs/provider.h"
9+
#include "opentelemetry/logs/noop.h"
10+
11+
namespace logs_api = opentelemetry::logs;
12+
namespace nostd = opentelemetry::nostd;
13+
14+
namespace libmexclass::opentelemetry {
15+
class NoOpLoggerProviderProxy : public libmexclass::proxy::Proxy {
16+
public:
17+
NoOpLoggerProviderProxy(nostd::shared_ptr<logs_api::LoggerProvider> lp) : CppLoggerProvider(lp) {
18+
// set as global LoggerProvider instance
19+
logs_api::Provider::SetLoggerProvider(CppLoggerProvider);
20+
}
21+
22+
static libmexclass::proxy::MakeResult make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
23+
return std::make_shared<NoOpLoggerProviderProxy>(nostd::shared_ptr<logs_api::LoggerProvider>(new logs_api::NoopLoggerProvider()));
24+
}
25+
26+
protected:
27+
nostd::shared_ptr<logs_api::LoggerProvider> CppLoggerProvider;
28+
};
29+
} // namespace libmexclass::opentelemetry
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
classdef NoOpMeterProvider < handle
2+
% A no-op meter provider does nothing and is used to disable metrics.
3+
% For internal use only.
4+
5+
% Copyright 2025 The MathWorks, Inc.
6+
7+
properties (Access=private)
8+
Proxy % Proxy object to interface C++ code
9+
end
10+
11+
methods (Access=?opentelemetry.metrics.Provider)
12+
function obj = NoOpMeterProvider()
13+
% constructs a no-op MeterProvider and sets it as the global
14+
% instance
15+
obj.Proxy = libmexclass.proxy.Proxy("Name", ...
16+
"libmexclass.opentelemetry.NoOpMeterProviderProxy", ...
17+
"ConstructorArguments", {});
18+
end
19+
end
20+
end

api/metrics/+opentelemetry/+metrics/Provider.m

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
classdef Provider
22
% Get and set the global instance of meter provider
33

4-
% Copyright 2023 The MathWorks, Inc.
4+
% Copyright 2023-2025 The MathWorks, Inc.
55

66
methods (Static)
77
function p = getMeterProvider()
@@ -19,9 +19,21 @@ function setMeterProvider(p)
1919
% OPENTELEMETRY.METRICS.PROVIDER.GETMETERPROVIDER(MP) sets
2020
% MP as the global instance of meter provider.
2121
%
22-
% See also OPENTELEMETRY.METRICS.PROVIDER.GETMETERPROVIDER
22+
% See also OPENTELEMETRY.METRICS.PROVIDER.GETMETERPROVIDER,
23+
% OPENTELEMETRY.METRICS.PROVIDER.UNSETMETERPROVIDER
2324
p.setMeterProvider();
2425
end
26+
27+
function unsetMeterProvider()
28+
% Unset the global instance of meter provider, which disables
29+
% metrics
30+
% OPENTELEMETRY.METRICS.PROVIDER.UNSETMETERPROVIDER() unsets
31+
% the global instance of meter provider.
32+
%
33+
% See also OPENTELEMETRY.METRICS.PROVIDER.SETMETERPROVIDER
34+
35+
opentelemetry.metrics.internal.NoOpMeterProvider;
36+
end
2537
end
2638

2739
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2025 The MathWorks, Inc.
2+
3+
#pragma once
4+
5+
#include "libmexclass/proxy/Proxy.h"
6+
7+
#include "opentelemetry/metrics/meter_provider.h"
8+
#include "opentelemetry/metrics/provider.h"
9+
#include "opentelemetry/metrics/noop.h"
10+
11+
namespace metrics_api = opentelemetry::metrics;
12+
namespace nostd = opentelemetry::nostd;
13+
14+
namespace libmexclass::opentelemetry {
15+
class NoOpMeterProviderProxy : public libmexclass::proxy::Proxy {
16+
public:
17+
NoOpMeterProviderProxy(nostd::shared_ptr<metrics_api::MeterProvider> mp) : CppMeterProvider(mp) {
18+
// set as global MeterProvider instance
19+
metrics_api::Provider::SetMeterProvider(CppMeterProvider);
20+
}
21+
22+
static libmexclass::proxy::MakeResult make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
23+
return std::make_shared<NoOpMeterProviderProxy>(nostd::shared_ptr<metrics_api::MeterProvider>(new metrics_api::NoopMeterProvider()));
24+
}
25+
26+
protected:
27+
nostd::shared_ptr<metrics_api::MeterProvider> CppMeterProvider;
28+
};
29+
} // namespace libmexclass::opentelemetry
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
classdef NoOpTracerProvider < handle
2+
% A no-op tracer provider does nothing and is used to disable tracing.
3+
% For internal use only.
4+
5+
% Copyright 2025 The MathWorks, Inc.
6+
7+
properties (Access=private)
8+
Proxy % Proxy object to interface C++ code
9+
end
10+
11+
methods (Access=?opentelemetry.trace.Provider)
12+
function obj = NoOpTracerProvider()
13+
% constructs a no-op TracerProvider and sets it as the global
14+
% instance
15+
obj.Proxy = libmexclass.proxy.Proxy("Name", ...
16+
"libmexclass.opentelemetry.NoOpTracerProviderProxy", ...
17+
"ConstructorArguments", {});
18+
end
19+
end
20+
end

api/trace/+opentelemetry/+trace/Provider.m

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
classdef Provider
22
% Get and set the global instance of tracer provider
33

4-
% Copyright 2023 The MathWorks, Inc.
4+
% Copyright 2023-2025 The MathWorks, Inc.
55

66
methods (Static)
77
function p = getTracerProvider()
@@ -16,13 +16,25 @@
1616

1717
function setTracerProvider(p)
1818
% Set the global instance of tracer provider
19-
% OPENTELEMETRY.TRACE.PROVIDER.GETTRACERPROVIDER(TP) sets
19+
% OPENTELEMETRY.TRACE.PROVIDER.SETTRACERPROVIDER(TP) sets
2020
% TP as the global instance of tracer provider.
2121
%
22-
% See also OPENTELEMETRY.TRACE.PROVIDER.GETTRACERPROVIDER
22+
% See also OPENTELEMETRY.TRACE.PROVIDER.GETTRACERPROVIDER,
23+
% OPENTELEMETRY.TRACE.PROVIDER.UNSETTRACERPROVIDER
2324

2425
p.setTracerProvider();
2526
end
27+
28+
function unsetTracerProvider()
29+
% Unset the global instance of tracer provider, which disables
30+
% tracing
31+
% OPENTELEMETRY.TRACE.PROVIDER.UNSETTRACERPROVIDER() unsets
32+
% the global instance of tracer provider.
33+
%
34+
% See also OPENTELEMETRY.TRACE.PROVIDER.SETTRACERPROVIDER
35+
36+
opentelemetry.trace.internal.NoOpTracerProvider;
37+
end
2638
end
2739

2840
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2025 The MathWorks, Inc.
2+
3+
#pragma once
4+
5+
#include "libmexclass/proxy/Proxy.h"
6+
7+
#include "opentelemetry/trace/tracer_provider.h"
8+
#include "opentelemetry/trace/provider.h"
9+
#include "opentelemetry/trace/noop.h"
10+
11+
namespace trace_api = opentelemetry::trace;
12+
namespace nostd = opentelemetry::nostd;
13+
14+
namespace libmexclass::opentelemetry {
15+
class NoOpTracerProviderProxy : public libmexclass::proxy::Proxy {
16+
public:
17+
NoOpTracerProviderProxy(nostd::shared_ptr<trace_api::TracerProvider> tp) : CppTracerProvider(tp) {
18+
// set as global TracerProvider instance
19+
trace_api::Provider::SetTracerProvider(CppTracerProvider);
20+
}
21+
22+
static libmexclass::proxy::MakeResult make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
23+
return std::make_shared<NoOpTracerProviderProxy>(nostd::shared_ptr<trace_api::TracerProvider>(new trace_api::NoopTracerProvider()));
24+
}
25+
26+
protected:
27+
nostd::shared_ptr<trace_api::TracerProvider> CppTracerProvider;
28+
};
29+
} // namespace libmexclass::opentelemetry

0 commit comments

Comments
 (0)