Skip to content

Commit 3400f04

Browse files
authored
Merge pull request #74 from mathworks/metrics
Metrics synchronous instruments
2 parents bb15a99 + 2dab550 commit 3400f04

File tree

59 files changed

+3626
-199
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+3626
-199
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ build
44
# Autosave files
55
*.asv
66
*.swp
7+
.vscode/settings.json

CMakeLists.txt

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ set(LIBMEXCLASS_FETCH_CONTENT_NAME libmexclass)
9898

9999
set(LIBMEXCLASS_FETCH_CONTENT_GIT_REPOSITORY "https://github.com/mathworks/libmexclass.git")
100100

101-
set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "77f3d72")
101+
set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "bf16a65")
102102

103103
set(LIBMEXCLASS_FETCH_CONTENT_SOURCE_SUBDIR "libmexclass/cpp")
104104

@@ -187,22 +187,26 @@ if(WITH_OTLP_GRPC)
187187
endif()
188188
endif()
189189

190-
set(TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/include)
190+
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,12 @@ 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}/MeterProviderProxy.cpp
220+
${METRICS_API_SOURCE_DIR}/MeterProxy.cpp
221+
${METRICS_API_SOURCE_DIR}/CounterProxy.cpp
222+
${METRICS_API_SOURCE_DIR}/UpDownCounterProxy.cpp
223+
${METRICS_API_SOURCE_DIR}/HistogramProxy.cpp
224+
${METRICS_API_SOURCE_DIR}/SynchronousInstrumentProxyFactory.cpp
215225
${CONTEXT_API_SOURCE_DIR}/TextMapPropagatorProxy.cpp
216226
${CONTEXT_API_SOURCE_DIR}/CompositePropagatorProxy.cpp
217227
${CONTEXT_API_SOURCE_DIR}/TextMapCarrierProxy.cpp
@@ -221,14 +231,21 @@ set(OPENTELEMETRY_PROXY_SOURCES
221231
${TRACE_SDK_SOURCE_DIR}/SimpleSpanProcessorProxy.cpp
222232
${TRACE_SDK_SOURCE_DIR}/BatchSpanProcessorProxy.cpp
223233
${TRACE_SDK_SOURCE_DIR}/ParentBasedSamplerProxy.cpp
234+
${METRICS_SDK_SOURCE_DIR}/MeterProviderProxy.cpp
235+
${METRICS_SDK_SOURCE_DIR}/ViewProxy.cpp
236+
${METRICS_SDK_SOURCE_DIR}/PeriodicExportingMetricReaderProxy.cpp
224237
${COMMON_SDK_SOURCE_DIR}/resource.cpp)
225238
if(WITH_OTLP_HTTP)
226-
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
227-
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpSpanExporterProxy.cpp)
239+
set(OPENTELEMETRY_PROXY_SOURCES
240+
${OPENTELEMETRY_PROXY_SOURCES}
241+
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpSpanExporterProxy.cpp
242+
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpMetricExporterProxy.cpp)
228243
endif()
229244
if(WITH_OTLP_GRPC)
230-
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
231-
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcSpanExporterProxy.cpp)
245+
set(OPENTELEMETRY_PROXY_SOURCES
246+
${OPENTELEMETRY_PROXY_SOURCES}
247+
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcSpanExporterProxy.cpp
248+
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcMetricExporterProxy.cpp)
232249
endif()
233250

234251
libmexclass_client_add_proxy_library(
@@ -277,16 +294,19 @@ set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX
277294
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX}
278295
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX}
279296
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX}
297+
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
280298
${Protobuf_LIBRARIES})
281299
if(WITH_OTLP_HTTP)
282300
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}
283301
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX}
302+
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX}
284303
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX}
285304
${CURL_LIBRARIES})
286305
endif()
287306
if(WITH_OTLP_GRPC)
288307
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}
289308
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX}
309+
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
290310
${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX}
291311
gRPC::grpc++
292312
absl::synchronization)
@@ -373,22 +393,37 @@ libmexclass_client_install(
373393

374394
# Install M files
375395
set(TRACE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/+opentelemetry)
396+
set(METRICS_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/+opentelemetry)
376397
set(CONTEXT_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/context/+opentelemetry)
377398
set(BAGGAGE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/+opentelemetry)
378399
set(COMMON_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/common/+opentelemetry)
379400
set(TRACE_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/+opentelemetry)
380-
set(DEFAULT_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m)
381-
set(OTLP_HTTP_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m)
382-
set(OTLP_GRPC_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcSpanExporter.m)
401+
set(METRICS_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/+opentelemetry)
402+
set(COMMON_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/+opentelemetry)
403+
set(EXPORTER_MATLAB_SOURCES
404+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m
405+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultMetricExporter.m
406+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpValidator.m)
407+
set(OTLP_HTTP_EXPORTER_MATLAB_SOURCES
408+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m
409+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpMetricExporter.m
410+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpValidator.m)
411+
set(OTLP_GRPC_EXPORTER_MATLAB_SOURCES
412+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcSpanExporter.m
413+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcMetricExporter.m
414+
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcValidator.m)
383415

384416
set(OTLP_EXPORTERS_DIR +opentelemetry/+exporters/+otlp)
385417

386418
install(DIRECTORY ${TRACE_API_MATLAB_SOURCES} DESTINATION .)
419+
install(DIRECTORY ${METRICS_API_MATLAB_SOURCES} DESTINATION .)
387420
install(DIRECTORY ${CONTEXT_API_MATLAB_SOURCES} DESTINATION .)
388421
install(DIRECTORY ${BAGGAGE_API_MATLAB_SOURCES} DESTINATION .)
389422
install(DIRECTORY ${COMMON_API_MATLAB_SOURCES} DESTINATION .)
390423
install(DIRECTORY ${TRACE_SDK_MATLAB_SOURCES} DESTINATION .)
391-
install(FILES ${DEFAULT_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
424+
install(DIRECTORY ${METRICS_SDK_MATLAB_SOURCES} DESTINATION .)
425+
install(DIRECTORY ${COMMON_SDK_MATLAB_SOURCES} DESTINATION .)
426+
install(FILES ${EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
392427
if(WITH_OTLP_HTTP)
393428
install(FILES ${OTLP_HTTP_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
394429
endif()

OtelMatlabProxyFactory.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,23 @@
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"
26+
#include "opentelemetry-matlab/sdk/metrics/ViewProxy.h"
27+
#include "opentelemetry-matlab/sdk/metrics/PeriodicExportingMetricReaderProxy.h"
2528
#ifdef WITH_OTLP_HTTP
2629
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpSpanExporterProxy.h"
30+
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpMetricExporterProxy.h"
2731
#endif
2832
#ifdef WITH_OTLP_GRPC
2933
#include "opentelemetry-matlab/exporters/otlp/OtlpGrpcSpanExporterProxy.h"
34+
#include "opentelemetry-matlab/exporters/otlp/OtlpGrpcMetricExporterProxy.h"
3035
#endif
3136

3237
libmexclass::proxy::MakeResult
3338
OtelMatlabProxyFactory::make_proxy(const libmexclass::proxy::ClassName& class_name,
3439
const libmexclass::proxy::FunctionArguments& constructor_arguments) {
3540

41+
REGISTER_PROXY(libmexclass.opentelemetry.MeterProviderProxy, libmexclass::opentelemetry::MeterProviderProxy);
3642
REGISTER_PROXY(libmexclass.opentelemetry.TracerProviderProxy, libmexclass::opentelemetry::TracerProviderProxy);
3743
//REGISTER_PROXY(libmexclass.opentelemetry.TracerProxy, libmexclass::opentelemetry::TracerProxy);
3844
REGISTER_PROXY(libmexclass.opentelemetry.SpanProxy, libmexclass::opentelemetry::SpanProxy);
@@ -54,11 +60,18 @@ OtelMatlabProxyFactory::make_proxy(const libmexclass::proxy::ClassName& class_na
5460
REGISTER_PROXY(libmexclass.opentelemetry.sdk.AlwaysOffSamplerProxy, libmexclass::opentelemetry::sdk::AlwaysOffSamplerProxy);
5561
REGISTER_PROXY(libmexclass.opentelemetry.sdk.TraceIdRatioBasedSamplerProxy, libmexclass::opentelemetry::sdk::TraceIdRatioBasedSamplerProxy);
5662
REGISTER_PROXY(libmexclass.opentelemetry.sdk.ParentBasedSamplerProxy, libmexclass::opentelemetry::sdk::ParentBasedSamplerProxy);
63+
64+
REGISTER_PROXY(libmexclass.opentelemetry.sdk.MeterProviderProxy, libmexclass::opentelemetry::sdk::MeterProviderProxy);
65+
REGISTER_PROXY(libmexclass.opentelemetry.sdk.ViewProxy, libmexclass::opentelemetry::sdk::ViewProxy);
66+
REGISTER_PROXY(libmexclass.opentelemetry.sdk.PeriodicExportingMetricReaderProxy, libmexclass::opentelemetry::sdk::PeriodicExportingMetricReaderProxy);
67+
5768
#ifdef WITH_OTLP_HTTP
5869
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpSpanExporterProxy);
70+
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpMetricExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpMetricExporterProxy);
5971
#endif
6072
#ifdef WITH_OTLP_GRPC
6173
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpGrpcSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpGrpcSpanExporterProxy);
74+
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpGrpcMetricExporterProxy, libmexclass::opentelemetry::exporters::OtlpGrpcMetricExporterProxy);
6275
#endif
6376
return nullptr;
6477
}

README.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
MATLAB® interface to [OpenTelemetry™](https://opentelemetry.io/), based on the [OpenTelemetry Specification](https://opentelemetry.io/docs/reference/specification/). OpenTelemetry is an observability framework for creating and managing telemetry data, such as traces, metrics, and logs. This data can then be sent to an observability back-end for monitoring, alerts, and analysis.
55

66
### Status
7-
- Currently only tracing is supported. Metrics and logs will be in the future.
7+
- Currently only tracing and metrics (synchronous instruments) are supported. Asynchronous metrics instruments and logs will be in the future.
8+
- View class in metrics is only partially supported. The properties **Aggregation** and **AllowedAttributes** are not yet supported.
89
- This package is supported and has been tested on Windows®, Linux®, and macOS.
910

1011
### MathWorks Products (https://www.mathworks.com)
@@ -43,6 +44,7 @@ otelcol --config <otelcol-config-yaml>
4344
>> addpath <OpenTelemetry MATLAB installdir>
4445
```
4546
## Examples
47+
### Tracing
4648
1. Create a default tracer provider and save it.
4749
```
4850
>> p = opentelemetry.sdk.trace.TracerProvider();
@@ -58,6 +60,22 @@ otelcol --config <otelcol-config-yaml>
5860
>> sp.endSpan();
5961
```
6062
4. If your collector is configured to display the data, you should see your span displayed.
63+
### Metrics
64+
1. Create a default meter provider and save it.
65+
```
66+
>> p = opentelemetry.sdk.metrics.MeterProvider();
67+
>> setMeterProvider(p);
68+
```
69+
2. Create a counter
70+
```
71+
>> m = opentelemetry.metrics.getMeter("First Meter");
72+
>> c = m.createCounter("FirstCounter");
73+
```
74+
3. Increment the counter
75+
```
76+
>> c.add(10);
77+
```
78+
4. If your collector is configured to display the data, you should see your counter displayed after 1 minute.
6179

6280
For more examples, see the "examples" folder.
6381

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
classdef Counter < opentelemetry.metrics.SynchronousInstrument
2+
% Counter is a value that accumulates over time and can only increase
3+
% but not decrease.
4+
5+
% Copyright 2023 The MathWorks, Inc.
6+
7+
methods (Access={?opentelemetry.metrics.Meter})
8+
function obj = Counter(proxy, name, description, unit)
9+
% Private constructor. Use createCounter method of Meter
10+
% to create Counters.
11+
[email protected](proxy, name, description, unit);
12+
end
13+
end
14+
15+
methods
16+
function add(obj, value, varargin)
17+
% ADD Add to counter value
18+
% ADD(C, VALUE) adds a nonnegative scalar numeric value to
19+
% the counter.
20+
%
21+
% ADD(C, VALUE, ATTRIBUTES) also specifies attributes as a
22+
% dictionary
23+
%
24+
% ADD(C, VALUE, ATTRNAME1, ATTRVALUE1, ATTRNAME2,
25+
% ATTRVALUE2, ...) specifies attributes as trailing
26+
% name-value pairs.
27+
obj.processValue(value, varargin{:});
28+
end
29+
end
30+
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
classdef Histogram < opentelemetry.metrics.SynchronousInstrument
2+
% Histogram is an instrument that aggregates values into bins
3+
4+
% Copyright 2023 The MathWorks, Inc.
5+
6+
methods (Access={?opentelemetry.metrics.Meter})
7+
function obj = Histogram(proxy, name, description, unit)
8+
% Private constructor. Use createHistogram method of Meter
9+
% to create Histograms.
10+
[email protected](proxy, name, description, unit);
11+
end
12+
end
13+
14+
methods
15+
function record(obj, value, varargin)
16+
% RECORD Aggregate a value into a histogram bin
17+
% RECORD(H, VALUE) determine which bin VALUE falls into and
18+
% increment that bin by 1.
19+
%
20+
% RECORD(H, VALUE, ATTRIBUTES) also specifies attributes as a
21+
% dictionary
22+
%
23+
% RECORD(H, VALUE, ATTRNAME1, ATTRVALUE1, ATTRNAME2,
24+
% ATTRVALUE2, ...) specifies attributes as trailing
25+
% name-value pairs.
26+
obj.processValue(value, varargin{:});
27+
end
28+
end
29+
end

0 commit comments

Comments
 (0)
close