Skip to content

Commit 083ee56

Browse files
authored
Merge branch 'metrics' into changes_after_v_1_3_0
2 parents 9989441 + f59aa11 commit 083ee56

File tree

18 files changed

+1156
-1
lines changed

18 files changed

+1156
-1
lines changed

CMakeLists.txt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,21 +188,25 @@ if(WITH_OTLP_GRPC)
188188
endif()
189189

190190
set(TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/include)
191+
set(METRICS_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/include)
191192
set(CONTEXT_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/context/include)
192193
set(BAGGAGE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/include)
193194
set(COMMON_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/common/include)
194195
set(TRACE_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/include)
196+
set(METRICS_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/include)
195197
set(COMMON_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/include)
196198
set(OTLP_EXPORTER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/include)
197-
set(OPENTELEMETRY_PROXY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${TRACE_API_INCLUDE_DIR} ${CONTEXT_API_INCLUDE_DIR} ${BAGGAGE_API_INCLUDE_DIR} ${COMMON_API_INCLUDE_DIR} ${TRACE_SDK_INCLUDE_DIR} ${COMMON_SDK_INCLUDE_DIR} ${OTLP_EXPORTER_INCLUDE_DIR} ${OTEL_CPP_PREFIX}/include)
199+
set(OPENTELEMETRY_PROXY_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${TRACE_API_INCLUDE_DIR} ${METRICS_API_INCLUDE_DIR} ${CONTEXT_API_INCLUDE_DIR} ${BAGGAGE_API_INCLUDE_DIR} ${COMMON_API_INCLUDE_DIR} ${TRACE_SDK_INCLUDE_DIR} ${METRICS_SDK_INCLUDE_DIR} ${COMMON_SDK_INCLUDE_DIR} ${OTLP_EXPORTER_INCLUDE_DIR} ${OTEL_CPP_PREFIX}/include)
198200

199201
set(OPENTELEMETRY_PROXY_FACTORY_CLASS_NAME OtelMatlabProxyFactory)
200202
set(OPENTELEMETRY_PROXY_FACTORY_SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR})
201203
set(TRACE_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/src)
204+
set(METRICS_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/src)
202205
set(CONTEXT_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/context/src)
203206
set(BAGGAGE_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/src)
204207
set(COMMON_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/common/src)
205208
set(TRACE_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/src)
209+
set(METRICS_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/src)
206210
set(COMMON_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/src)
207211
set(OTLP_EXPORTER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/src)
208212
set(OPENTELEMETRY_PROXY_SOURCES
@@ -212,6 +216,10 @@ set(OPENTELEMETRY_PROXY_SOURCES
212216
${TRACE_API_SOURCE_DIR}/SpanProxy.cpp
213217
${TRACE_API_SOURCE_DIR}/SpanContextProxy.cpp
214218
${COMMON_API_SOURCE_DIR}/attribute.cpp
219+
${METRICS_API_SOURCE_DIR}/MeterProxy.cpp
220+
${METRICS_API_SOURCE_DIR}/CounterProxy.cpp
221+
${METRICS_API_SOURCE_DIR}/UpDownCounterProxy.cpp
222+
${METRICS_API_SOURCE_DIR}/HistogramProxy.cpp
215223
${CONTEXT_API_SOURCE_DIR}/TextMapPropagatorProxy.cpp
216224
${CONTEXT_API_SOURCE_DIR}/CompositePropagatorProxy.cpp
217225
${CONTEXT_API_SOURCE_DIR}/TextMapCarrierProxy.cpp
@@ -221,6 +229,7 @@ set(OPENTELEMETRY_PROXY_SOURCES
221229
${TRACE_SDK_SOURCE_DIR}/SimpleSpanProcessorProxy.cpp
222230
${TRACE_SDK_SOURCE_DIR}/BatchSpanProcessorProxy.cpp
223231
${TRACE_SDK_SOURCE_DIR}/ParentBasedSamplerProxy.cpp
232+
${METRICS_SDK_SOURCE_DIR}/MeterProviderProxy.cpp
224233
${COMMON_SDK_SOURCE_DIR}/resource.cpp)
225234
if(WITH_OTLP_HTTP)
226235
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
@@ -277,16 +286,19 @@ set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX
277286
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX}
278287
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX}
279288
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX}
289+
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
280290
${Protobuf_LIBRARIES})
281291
if(WITH_OTLP_HTTP)
282292
set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_LINK_LIBRARIES} ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX}
283293
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX}
294+
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX}
284295
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX}
285296
${CURL_LIBRARIES})
286297
endif()
287298
if(WITH_OTLP_GRPC)
288299
set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_LINK_LIBRARIES} ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc${CMAKE_STATIC_LIBRARY_SUFFIX}
289300
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX}
301+
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
290302
${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX}
291303
gRPC::grpc++
292304
absl::synchronization)
@@ -373,21 +385,25 @@ libmexclass_client_install(
373385

374386
# Install M files
375387
set(TRACE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/+opentelemetry)
388+
set(METRICS_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/+opentelemetry)
376389
set(CONTEXT_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/context/+opentelemetry)
377390
set(BAGGAGE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/+opentelemetry)
378391
set(COMMON_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/common/+opentelemetry)
379392
set(TRACE_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/+opentelemetry)
393+
set(METRICS_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/+opentelemetry)
380394
set(DEFAULT_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m)
381395
set(OTLP_HTTP_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m)
382396
set(OTLP_GRPC_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcSpanExporter.m)
383397

384398
set(OTLP_EXPORTERS_DIR +opentelemetry/+exporters/+otlp)
385399

386400
install(DIRECTORY ${TRACE_API_MATLAB_SOURCES} DESTINATION .)
401+
install(DIRECTORY ${METRICS_API_MATLAB_SOURCES} DESTINATION .)
387402
install(DIRECTORY ${CONTEXT_API_MATLAB_SOURCES} DESTINATION .)
388403
install(DIRECTORY ${BAGGAGE_API_MATLAB_SOURCES} DESTINATION .)
389404
install(DIRECTORY ${COMMON_API_MATLAB_SOURCES} DESTINATION .)
390405
install(DIRECTORY ${TRACE_SDK_MATLAB_SOURCES} DESTINATION .)
406+
install(DIRECTORY ${METRICS_SDK_MATLAB_SOURCES} DESTINATION .)
391407
install(FILES ${DEFAULT_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
392408
if(WITH_OTLP_HTTP)
393409
install(FILES ${OTLP_HTTP_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})

OtelMatlabProxyFactory.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
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/sdk/metrics/MeterProviderProxy.h"
2526
#ifdef WITH_OTLP_HTTP
2627
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpSpanExporterProxy.h"
2728
#endif
@@ -54,6 +55,9 @@ OtelMatlabProxyFactory::make_proxy(const libmexclass::proxy::ClassName& class_na
5455
REGISTER_PROXY(libmexclass.opentelemetry.sdk.AlwaysOffSamplerProxy, libmexclass::opentelemetry::sdk::AlwaysOffSamplerProxy);
5556
REGISTER_PROXY(libmexclass.opentelemetry.sdk.TraceIdRatioBasedSamplerProxy, libmexclass::opentelemetry::sdk::TraceIdRatioBasedSamplerProxy);
5657
REGISTER_PROXY(libmexclass.opentelemetry.sdk.ParentBasedSamplerProxy, libmexclass::opentelemetry::sdk::ParentBasedSamplerProxy);
58+
59+
REGISTER_PROXY(libmexclass.opentelemetry.sdk.MeterProviderProxy, libmexclass::opentelemetry::sdk::MeterProviderProxy);
60+
5761
#ifdef WITH_OTLP_HTTP
5862
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpSpanExporterProxy);
5963
#endif
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
classdef Counter < handle
2+
% Counter is a value that accumulates over time,
3+
% you can think of this like an odometer on a car; it only ever goes up.
4+
5+
% Copyright 2023 The MathWorks, Inc.
6+
7+
properties (SetAccess=immutable)
8+
Name (1,1) string
9+
Description (1,1) string
10+
Unit (1,1) string
11+
end
12+
13+
properties (Access=private)
14+
Proxy % Proxy object to interface C++ code
15+
end
16+
17+
methods (Access={?opentelemetry.metrics.Meter})
18+
19+
function obj = Counter(proxy, ctname, ctdescription, ctunit)
20+
% Private constructor. Use createCounter method of Meter
21+
% to create Counters.
22+
obj.Proxy = proxy;
23+
obj.Name = ctname;
24+
obj.Description = ctdescription;
25+
obj.Unit = ctunit;
26+
end
27+
28+
end
29+
30+
methods
31+
32+
function add(obj, value, varargin)
33+
% input value must be a numerical scalar
34+
if isnumeric(value) && isscalar(value)
35+
36+
if nargin == 2
37+
obj.Proxy.add(value);
38+
39+
elseif isa(varargin{1}, "dictionary")
40+
attrkeys = keys(varargin{1});
41+
attrvals = values(varargin{1},"cell");
42+
if all(cellfun(@iscell, attrvals))
43+
attrvals = [attrvals{:}];
44+
end
45+
obj.Proxy.add(value,attrkeys,attrvals);
46+
47+
else
48+
attrkeys = [varargin{1:2:length(varargin)}]';
49+
attrvals = [varargin(2:2:length(varargin))]';
50+
obj.Proxy.add(value,attrkeys,attrvals);
51+
end
52+
end
53+
54+
end
55+
56+
end
57+
58+
59+
end
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
classdef Histogram < handle
2+
% Histogram is an instrument that adds or reduce values.
3+
4+
% Copyright 2023 The MathWorks, Inc.
5+
6+
properties (SetAccess=immutable)
7+
Name (1,1) string
8+
Description (1,1) string
9+
Unit (1,1) string
10+
end
11+
12+
properties (Access=public)
13+
Proxy % Proxy object to interface C++ code
14+
end
15+
16+
methods (Access={?opentelemetry.metrics.Meter})
17+
18+
function obj = Histogram(proxy, hiname, hidescription, hiunit)
19+
% Private constructor. Use createHistogram method of Meter
20+
% to create Histograms.
21+
obj.Proxy = proxy;
22+
obj.Name = hiname;
23+
obj.Description = hidescription;
24+
obj.Unit = hiunit;
25+
end
26+
27+
end
28+
29+
methods
30+
31+
function record(obj, value, varargin)
32+
% input value must be a numerical scalar
33+
if isnumeric(value) && isscalar(value)
34+
if nargin == 2
35+
obj.Proxy.record(value);
36+
elseif isa(varargin{1}, "dictionary")
37+
attrkeys = keys(varargin{1});
38+
attrvals = values(varargin{1},"cell");
39+
if all(cellfun(@iscell, attrvals))
40+
attrvals = [attrvals{:}];
41+
end
42+
obj.Proxy.record(value,attrkeys,attrvals);
43+
else
44+
attrkeys = [varargin{1:2:length(varargin)}]';
45+
attrvals = [varargin(2:2:length(varargin))]';
46+
obj.Proxy.record(value,attrkeys,attrvals);
47+
end
48+
end
49+
50+
end
51+
52+
end
53+
54+
55+
end
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
classdef Meter < handle
2+
% A Meter creates metric instruments, capturing measurements about a service at runtime.
3+
% Meters are created from Meter Providers.
4+
5+
% Copyright 2023 The MathWorks, Inc.
6+
7+
properties (SetAccess=immutable)
8+
Name (1,1) string % Meter name
9+
Version (1,1) string % Meter version
10+
Schema (1,1) string % URL that documents the schema of the generated spans
11+
end
12+
13+
properties (Access=private)
14+
Proxy % Proxy object to interface C++ code
15+
end
16+
17+
methods (Access={?opentelemetry.sdk.metrics.MeterProvider})
18+
19+
function obj = Meter(proxy, mtname, mtversion, mtschema)
20+
% Private constructor. Use getMeter method of MeterProvider
21+
% to create Meters.
22+
obj.Proxy = proxy;
23+
obj.Name = mtname;
24+
obj.Version = mtversion;
25+
obj.Schema = mtschema;
26+
end
27+
28+
end
29+
30+
methods
31+
32+
function counter = createCounter(obj, ctname, ctdescription, ctunit)
33+
arguments
34+
obj
35+
ctname
36+
ctdescription = ""
37+
ctunit = ""
38+
end
39+
import opentelemetry.common.mustBeScalarString
40+
ctname = mustBeScalarString(ctname);
41+
ctdescription = mustBeScalarString(ctdescription);
42+
ctunit = mustBeScalarString(ctunit);
43+
id = obj.Proxy.createCounter(ctname, ctdescription, ctunit);
44+
CounterProxy = libmexclass.proxy.Proxy("Name", ...
45+
"libmexclass.opentelemetry.CounterProxy", "ID", id);
46+
counter = opentelemetry.metrics.Counter(CounterProxy, ctname, ctdescription, ctunit);
47+
end
48+
49+
50+
function updowncounter = createUpDownCounter(obj, ctname, ctdescription, ctunit)
51+
arguments
52+
obj
53+
ctname
54+
ctdescription = ""
55+
ctunit = ""
56+
end
57+
58+
import opentelemetry.common.mustBeScalarString
59+
ctname = mustBeScalarString(ctname);
60+
ctdescription = mustBeScalarString(ctdescription);
61+
ctunit = mustBeScalarString(ctunit);
62+
id = obj.Proxy.createUpDownCounter(ctname, ctdescription, ctunit);
63+
UpDownCounterProxy = libmexclass.proxy.Proxy("Name", ...
64+
"libmexclass.opentelemetry.UpDownCounterProxy", "ID", id);
65+
updowncounter = opentelemetry.metrics.UpDownCounter(UpDownCounterProxy, ctname, ctdescription, ctunit);
66+
end
67+
68+
69+
function histogram = createHistogram(obj, hiname, hidescription, hiunit)
70+
arguments
71+
obj
72+
hiname
73+
hidescription = ""
74+
hiunit = ""
75+
end
76+
77+
import opentelemetry.common.mustBeScalarString
78+
hiname = mustBeScalarString(hiname);
79+
hidescription = mustBeScalarString(hidescription);
80+
hiunit = mustBeScalarString(hiunit);
81+
id = obj.Proxy.createHistogram(hiname, hidescription, hiunit);
82+
HistogramProxy = libmexclass.proxy.Proxy("Name", ...
83+
"libmexclass.opentelemetry.HistogramProxy", "ID", id);
84+
histogram = opentelemetry.metrics.Histogram(HistogramProxy, hiname, hidescription, hiunit);
85+
end
86+
87+
end
88+
89+
end
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
classdef UpDownCounter < handle
2+
% UpDownCounter is an instrument that adds or reduce values.
3+
4+
% Copyright 2023 The MathWorks, Inc.
5+
6+
properties (SetAccess=immutable)
7+
Name (1,1) string
8+
Description (1,1) string
9+
Unit (1,1) string
10+
end
11+
12+
properties (Access=public)
13+
Proxy % Proxy object to interface C++ code
14+
end
15+
16+
methods (Access={?opentelemetry.metrics.Meter})
17+
18+
function obj = UpDownCounter(proxy, ctname, ctdescription, ctunit)
19+
% Private constructor. Use createUpDownCounter method of Meter
20+
% to create UpDownCounters.
21+
obj.Proxy = proxy;
22+
obj.Name = ctname;
23+
obj.Description = ctdescription;
24+
obj.Unit = ctunit;
25+
end
26+
27+
end
28+
29+
methods
30+
31+
function add(obj, value, varargin)
32+
% input value must be a numerical scalar
33+
if isnumeric(value) && isscalar(value)
34+
35+
if nargin == 2
36+
obj.Proxy.add(value);
37+
38+
elseif isa(varargin{1}, "dictionary")
39+
attrkeys = keys(varargin{1});
40+
attrvals = values(varargin{1},"cell");
41+
if all(cellfun(@iscell, attrvals))
42+
attrvals = [attrvals{:}];
43+
end
44+
obj.Proxy.add(value,attrkeys,attrvals);
45+
46+
else
47+
attrkeys = [varargin{1:2:length(varargin)}]';
48+
attrvals = [varargin(2:2:length(varargin))]';
49+
obj.Proxy.add(value,attrkeys,attrvals);
50+
end
51+
end
52+
53+
end
54+
55+
end
56+
57+
58+
end

0 commit comments

Comments
 (0)