Skip to content

Metrics synchronous instruments #74

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 82 commits into from
Dec 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
f6a1c55
feat: metric_exporter, metric_reader
ricktu-mw Sep 25, 2023
0984062
update 1
ricktu-mw Sep 27, 2023
98bd3a6
v2
ricktu-mw Sep 28, 2023
4d8b990
v2
ricktu-mw Sep 28, 2023
081f16e
v2
ricktu-mw Sep 28, 2023
dd8e0e9
v3
ricktu-mw Oct 2, 2023
cc9cf8f
v4
ricktu-mw Oct 2, 2023
883f261
v5
ricktu-mw Oct 2, 2023
137fed8
v6
ricktu-mw Oct 3, 2023
ba013e1
Merge pull request #25 from mathworks/changes_after_v_1_3_0
duncanpo Oct 3, 2023
1b833de
v7
ricktu-mw Oct 3, 2023
6380ae1
v8: addMetricReader
ricktu-mw Oct 4, 2023
300445c
v9: update comments
ricktu-mw Oct 4, 2023
2636072
Merge pull request #26 from mathworks/metrics_reader
duncanpo Oct 5, 2023
40ecc12
Creating MeterProvider API
dnarula-mw Oct 5, 2023
68a0985
fix: invalid instrument names with spaces
ricktu-mw Oct 6, 2023
1773af8
Finishing and cleaning up MeterProvider api
dnarula-mw Oct 6, 2023
e995d79
fix: comments
ricktu-mw Oct 6, 2023
9af0a3d
Merge pull request #29 from mathworks/metrics_reader
duncanpo Oct 6, 2023
6e11722
Merge pull request #38 from mathworks/changes_after_v_1_3_0
duncanpo Oct 10, 2023
ac793c5
Adding test for get and set meter
dnarula-mw Oct 11, 2023
a0777dd
Resolving merge conflicts
dnarula-mw Oct 11, 2023
ec00310
Fixing error from merge
dnarula-mw Oct 11, 2023
3af790a
Removing .vs folder
dnarula-mw Oct 11, 2023
8c3a10c
Add resource property
dnarula-mw Oct 12, 2023
8268a15
Lowering reader interval for test
dnarula-mw Oct 12, 2023
f9b7c45
clearning meter provider in test
dnarula-mw Oct 12, 2023
39e01fa
fixing typo
dnarula-mw Oct 12, 2023
a630aa7
Addressing PR comments
dnarula-mw Oct 12, 2023
fd75583
Fixing crash and comment out test
dnarula-mw Oct 12, 2023
cf7f8ec
Merge pull request #39 from mathworks/meter_provider_api
duncanpo Oct 12, 2023
ff030ae
Adding shutdown and forceflush to fix getsetmeterprovider test
dnarula-mw Oct 26, 2023
e1c58c4
Clean up code and finish shutdown
dnarula-mw Oct 30, 2023
e245e2e
Removing unnecessary change in tests
dnarula-mw Oct 30, 2023
caab36b
Addressing pull request comments
dnarula-mw Oct 31, 2023
60acf06
Merge pull request #42 from mathworks/meter_provider_api
dnarula-mw Oct 31, 2023
f21e7c6
Fixing merge conflicts
dnarula-mw Oct 31, 2023
f3884c3
Make metric reader and exporter properties editable
duncanpo Nov 2, 2023
66b73f2
Merge pull request #46 from mathworks/metrics_readonly_props
duncanpo Nov 2, 2023
58392ca
Finishing add resource property to metrics
dnarula-mw Nov 2, 2023
3e9a03f
Merge branch 'metrics' into meter_provider_resource
dnarula-mw Nov 2, 2023
b90544a
add a test about issue #34
duncanpo Nov 2, 2023
ee27f2b
Cleaning up code
dnarula-mw Nov 2, 2023
2628bd7
Merge pull request #47 from mathworks/metrics_readonly_props
duncanpo Nov 2, 2023
ac97746
Change error message
dnarula-mw Nov 2, 2023
b7bb9cf
Merge pull request #48 from mathworks/meter_provider_resource
dnarula-mw Nov 2, 2023
2bff102
Correctly clearing meter providers
dnarula-mw Nov 3, 2023
4a12e67
add a SynchronousInstrument base class
duncanpo Nov 3, 2023
b6e18f9
Merge pull request #50 from mathworks/fixing_tests
duncanpo Nov 3, 2023
af1a71c
Merge pull request #49 from mathworks/sync_instrument
duncanpo Nov 3, 2023
adb6cd3
enable Cleanup class to work for SDK objects
duncanpo Nov 8, 2023
ccacea4
Merge pull request #51 from mathworks/metrics_cleanup
duncanpo Nov 8, 2023
9f9fbc7
Complex number handling and more code sharing between metric instruments
duncanpo Nov 9, 2023
123f9f9
Merge pull request #54 from mathworks/metrics_cleanup
duncanpo Nov 9, 2023
94b9293
back out a change to replace spaces in instrument names with underscore
duncanpo Nov 9, 2023
6d492c9
Merge pull request #55 from mathworks/metrics_cleanup
duncanpo Nov 9, 2023
bfe1c50
Adding View Class in metrics sdk and add view method to meter provider
dnarula-mw Nov 10, 2023
0e46adf
Merge branch 'metrics' into metrics_view
duncanpo Nov 13, 2023
f3e7a37
Merge pull request #56 from mathworks/metrics_view
duncanpo Nov 13, 2023
1e33556
prepare for merging metrics branch into main
duncanpo Nov 13, 2023
613e99e
fix merge issues
duncanpo Nov 13, 2023
dd0d28a
fix merge issues
duncanpo Nov 13, 2023
10b014c
Merge pull request #58 from mathworks/metrics_merge
duncanpo Nov 13, 2023
9222d37
Add shutdown tests to ttrace_sdk
duncanpo Nov 14, 2023
9185f37
Merge pull request #59 from mathworks/metrics_merge
duncanpo Nov 14, 2023
1e27933
refactor exporter code to enable more code sharing and remove duplica…
duncanpo Nov 16, 2023
65c04b4
Merge pull request #61 from mathworks/metrics_merge
duncanpo Nov 16, 2023
9f33853
separate nondefault endpoint tests into their own test file
duncanpo Nov 17, 2023
489c56e
Merge pull request #63 from mathworks/metrics_merge
duncanpo Nov 17, 2023
61b93aa
Changes to view sdk
dnarula-mw Nov 28, 2023
3f7ee56
Refactor MeterProxy to use a factory class and reduce code duplication
duncanpo Dec 1, 2023
3a6b77f
Merge pull request #65 from mathworks/metrics_factory
duncanpo Dec 1, 2023
74f9d38
Updating view, changing name and histogram edges is working
dnarula-mw Dec 6, 2023
f035171
Finishing view
dnarula-mw Dec 7, 2023
5df8f72
Minor changes for PR
dnarula-mw Dec 7, 2023
c10af76
Addressing PR comments
dnarula-mw Dec 8, 2023
99f23be
Merge pull request #67 from mathworks/metrics_view_sdk
duncanpo Dec 8, 2023
97754c9
Add help texts for metrics
duncanpo Dec 12, 2023
6684a7d
Refactor view class
duncanpo Dec 14, 2023
4c7af79
Bump up libmexclass #72
duncanpo Dec 14, 2023
c9503f1
Add a metrics example
duncanpo Dec 14, 2023
2dab550
Merge pull request #73 from mathworks/metrics_release
duncanpo Dec 14, 2023
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ build
# Autosave files
*.asv
*.swp
.vscode/settings.json
57 changes: 46 additions & 11 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ set(LIBMEXCLASS_FETCH_CONTENT_NAME libmexclass)

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

set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "77f3d72")
set(LIBMEXCLASS_FETCH_CONTENT_GIT_TAG "bf16a65")

set(LIBMEXCLASS_FETCH_CONTENT_SOURCE_SUBDIR "libmexclass/cpp")

Expand Down Expand Up @@ -187,22 +187,26 @@ if(WITH_OTLP_GRPC)
endif()
endif()

set(TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/include)
set(TRACE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/include)
set(METRICS_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/include)
set(CONTEXT_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/context/include)
set(BAGGAGE_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/include)
set(COMMON_API_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/common/include)
set(TRACE_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/include)
set(METRICS_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/include)
set(COMMON_SDK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/include)
set(OTLP_EXPORTER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/include)
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)
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)

set(OPENTELEMETRY_PROXY_FACTORY_CLASS_NAME OtelMatlabProxyFactory)
set(OPENTELEMETRY_PROXY_FACTORY_SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(TRACE_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/src)
set(METRICS_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/src)
set(CONTEXT_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/context/src)
set(BAGGAGE_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/src)
set(COMMON_API_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/api/common/src)
set(TRACE_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/src)
set(METRICS_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/src)
set(COMMON_SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/src)
set(OTLP_EXPORTER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/src)
set(OPENTELEMETRY_PROXY_SOURCES
Expand All @@ -212,6 +216,12 @@ set(OPENTELEMETRY_PROXY_SOURCES
${TRACE_API_SOURCE_DIR}/SpanProxy.cpp
${TRACE_API_SOURCE_DIR}/SpanContextProxy.cpp
${COMMON_API_SOURCE_DIR}/attribute.cpp
${METRICS_API_SOURCE_DIR}/MeterProviderProxy.cpp
${METRICS_API_SOURCE_DIR}/MeterProxy.cpp
${METRICS_API_SOURCE_DIR}/CounterProxy.cpp
${METRICS_API_SOURCE_DIR}/UpDownCounterProxy.cpp
${METRICS_API_SOURCE_DIR}/HistogramProxy.cpp
${METRICS_API_SOURCE_DIR}/SynchronousInstrumentProxyFactory.cpp
${CONTEXT_API_SOURCE_DIR}/TextMapPropagatorProxy.cpp
${CONTEXT_API_SOURCE_DIR}/CompositePropagatorProxy.cpp
${CONTEXT_API_SOURCE_DIR}/TextMapCarrierProxy.cpp
Expand All @@ -221,14 +231,21 @@ set(OPENTELEMETRY_PROXY_SOURCES
${TRACE_SDK_SOURCE_DIR}/SimpleSpanProcessorProxy.cpp
${TRACE_SDK_SOURCE_DIR}/BatchSpanProcessorProxy.cpp
${TRACE_SDK_SOURCE_DIR}/ParentBasedSamplerProxy.cpp
${METRICS_SDK_SOURCE_DIR}/MeterProviderProxy.cpp
${METRICS_SDK_SOURCE_DIR}/ViewProxy.cpp
${METRICS_SDK_SOURCE_DIR}/PeriodicExportingMetricReaderProxy.cpp
${COMMON_SDK_SOURCE_DIR}/resource.cpp)
if(WITH_OTLP_HTTP)
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpSpanExporterProxy.cpp)
set(OPENTELEMETRY_PROXY_SOURCES
${OPENTELEMETRY_PROXY_SOURCES}
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpSpanExporterProxy.cpp
${OTLP_EXPORTER_SOURCE_DIR}/OtlpHttpMetricExporterProxy.cpp)
endif()
if(WITH_OTLP_GRPC)
set(OPENTELEMETRY_PROXY_SOURCES ${OPENTELEMETRY_PROXY_SOURCES}
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcSpanExporterProxy.cpp)
set(OPENTELEMETRY_PROXY_SOURCES
${OPENTELEMETRY_PROXY_SOURCES}
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcSpanExporterProxy.cpp
${OTLP_EXPORTER_SOURCE_DIR}/OtlpGrpcMetricExporterProxy.cpp)
endif()

libmexclass_client_add_proxy_library(
Expand Down Expand Up @@ -277,16 +294,19 @@ set(OTEL_CPP_LINK_LIBRARIES ${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_trace${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_version${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_logs${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
${Protobuf_LIBRARIES})
if(WITH_OTLP_HTTP)
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}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_client${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_metric${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_http_client_curl${CMAKE_STATIC_LIBRARY_SUFFIX}
${CURL_LIBRARIES})
endif()
if(WITH_OTLP_GRPC)
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}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_client${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_grpc_metrics${CMAKE_STATIC_LIBRARY_SUFFIX}
${OTEL_CPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}opentelemetry_proto_grpc${OTEL_PROTO_LIBRARY_SUFFIX}
gRPC::grpc++
absl::synchronization)
Expand Down Expand Up @@ -373,22 +393,37 @@ libmexclass_client_install(

# Install M files
set(TRACE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/trace/+opentelemetry)
set(METRICS_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/metrics/+opentelemetry)
set(CONTEXT_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/context/+opentelemetry)
set(BAGGAGE_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/baggage/+opentelemetry)
set(COMMON_API_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/api/common/+opentelemetry)
set(TRACE_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/trace/+opentelemetry)
set(DEFAULT_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m)
set(OTLP_HTTP_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m)
set(OTLP_GRPC_EXPORTER_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcSpanExporter.m)
set(METRICS_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/metrics/+opentelemetry)
set(COMMON_SDK_MATLAB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sdk/common/+opentelemetry)
set(EXPORTER_MATLAB_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultSpanExporter.m
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/defaultMetricExporter.m
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpValidator.m)
set(OTLP_HTTP_EXPORTER_MATLAB_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpSpanExporter.m
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpMetricExporter.m
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpHttpValidator.m)
set(OTLP_GRPC_EXPORTER_MATLAB_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcSpanExporter.m
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcMetricExporter.m
${CMAKE_CURRENT_SOURCE_DIR}/exporters/otlp/+opentelemetry/+exporters/+otlp/OtlpGrpcValidator.m)

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

install(DIRECTORY ${TRACE_API_MATLAB_SOURCES} DESTINATION .)
install(DIRECTORY ${METRICS_API_MATLAB_SOURCES} DESTINATION .)
install(DIRECTORY ${CONTEXT_API_MATLAB_SOURCES} DESTINATION .)
install(DIRECTORY ${BAGGAGE_API_MATLAB_SOURCES} DESTINATION .)
install(DIRECTORY ${COMMON_API_MATLAB_SOURCES} DESTINATION .)
install(DIRECTORY ${TRACE_SDK_MATLAB_SOURCES} DESTINATION .)
install(FILES ${DEFAULT_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
install(DIRECTORY ${METRICS_SDK_MATLAB_SOURCES} DESTINATION .)
install(DIRECTORY ${COMMON_SDK_MATLAB_SOURCES} DESTINATION .)
install(FILES ${EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
if(WITH_OTLP_HTTP)
install(FILES ${OTLP_HTTP_EXPORTER_MATLAB_SOURCES} DESTINATION ${OTLP_EXPORTERS_DIR})
endif()
Expand Down
13 changes: 13 additions & 0 deletions OtelMatlabProxyFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,23 @@
#include "opentelemetry-matlab/sdk/trace/AlwaysOffSamplerProxy.h"
#include "opentelemetry-matlab/sdk/trace/TraceIdRatioBasedSamplerProxy.h"
#include "opentelemetry-matlab/sdk/trace/ParentBasedSamplerProxy.h"
#include "opentelemetry-matlab/sdk/metrics/MeterProviderProxy.h"
#include "opentelemetry-matlab/sdk/metrics/ViewProxy.h"
#include "opentelemetry-matlab/sdk/metrics/PeriodicExportingMetricReaderProxy.h"
#ifdef WITH_OTLP_HTTP
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpSpanExporterProxy.h"
#include "opentelemetry-matlab/exporters/otlp/OtlpHttpMetricExporterProxy.h"
#endif
#ifdef WITH_OTLP_GRPC
#include "opentelemetry-matlab/exporters/otlp/OtlpGrpcSpanExporterProxy.h"
#include "opentelemetry-matlab/exporters/otlp/OtlpGrpcMetricExporterProxy.h"
#endif

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

REGISTER_PROXY(libmexclass.opentelemetry.MeterProviderProxy, libmexclass::opentelemetry::MeterProviderProxy);
REGISTER_PROXY(libmexclass.opentelemetry.TracerProviderProxy, libmexclass::opentelemetry::TracerProviderProxy);
//REGISTER_PROXY(libmexclass.opentelemetry.TracerProxy, libmexclass::opentelemetry::TracerProxy);
REGISTER_PROXY(libmexclass.opentelemetry.SpanProxy, libmexclass::opentelemetry::SpanProxy);
Expand All @@ -54,11 +60,18 @@ OtelMatlabProxyFactory::make_proxy(const libmexclass::proxy::ClassName& class_na
REGISTER_PROXY(libmexclass.opentelemetry.sdk.AlwaysOffSamplerProxy, libmexclass::opentelemetry::sdk::AlwaysOffSamplerProxy);
REGISTER_PROXY(libmexclass.opentelemetry.sdk.TraceIdRatioBasedSamplerProxy, libmexclass::opentelemetry::sdk::TraceIdRatioBasedSamplerProxy);
REGISTER_PROXY(libmexclass.opentelemetry.sdk.ParentBasedSamplerProxy, libmexclass::opentelemetry::sdk::ParentBasedSamplerProxy);

REGISTER_PROXY(libmexclass.opentelemetry.sdk.MeterProviderProxy, libmexclass::opentelemetry::sdk::MeterProviderProxy);
REGISTER_PROXY(libmexclass.opentelemetry.sdk.ViewProxy, libmexclass::opentelemetry::sdk::ViewProxy);
REGISTER_PROXY(libmexclass.opentelemetry.sdk.PeriodicExportingMetricReaderProxy, libmexclass::opentelemetry::sdk::PeriodicExportingMetricReaderProxy);

#ifdef WITH_OTLP_HTTP
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpSpanExporterProxy);
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpHttpMetricExporterProxy, libmexclass::opentelemetry::exporters::OtlpHttpMetricExporterProxy);
#endif
#ifdef WITH_OTLP_GRPC
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpGrpcSpanExporterProxy, libmexclass::opentelemetry::exporters::OtlpGrpcSpanExporterProxy);
REGISTER_PROXY(libmexclass.opentelemetry.exporters.OtlpGrpcMetricExporterProxy, libmexclass::opentelemetry::exporters::OtlpGrpcMetricExporterProxy);
#endif
return nullptr;
}
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
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.

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

### MathWorks Products (https://www.mathworks.com)
Expand Down Expand Up @@ -43,6 +44,7 @@ otelcol --config <otelcol-config-yaml>
>> addpath <OpenTelemetry MATLAB installdir>
```
## Examples
### Tracing
1. Create a default tracer provider and save it.
```
>> p = opentelemetry.sdk.trace.TracerProvider();
Expand All @@ -58,6 +60,22 @@ otelcol --config <otelcol-config-yaml>
>> sp.endSpan();
```
4. If your collector is configured to display the data, you should see your span displayed.
### Metrics
1. Create a default meter provider and save it.
```
>> p = opentelemetry.sdk.metrics.MeterProvider();
>> setMeterProvider(p);
```
2. Create a counter
```
>> m = opentelemetry.metrics.getMeter("First Meter");
>> c = m.createCounter("FirstCounter");
```
3. Increment the counter
```
>> c.add(10);
```
4. If your collector is configured to display the data, you should see your counter displayed after 1 minute.

For more examples, see the "examples" folder.

Expand Down
30 changes: 30 additions & 0 deletions api/metrics/+opentelemetry/+metrics/Counter.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
classdef Counter < opentelemetry.metrics.SynchronousInstrument
% Counter is a value that accumulates over time and can only increase
% but not decrease.

% Copyright 2023 The MathWorks, Inc.

methods (Access={?opentelemetry.metrics.Meter})
function obj = Counter(proxy, name, description, unit)
% Private constructor. Use createCounter method of Meter
% to create Counters.
[email protected](proxy, name, description, unit);
end
end

methods
function add(obj, value, varargin)
% ADD Add to counter value
% ADD(C, VALUE) adds a nonnegative scalar numeric value to
% the counter.
%
% ADD(C, VALUE, ATTRIBUTES) also specifies attributes as a
% dictionary
%
% ADD(C, VALUE, ATTRNAME1, ATTRVALUE1, ATTRNAME2,
% ATTRVALUE2, ...) specifies attributes as trailing
% name-value pairs.
obj.processValue(value, varargin{:});
end
end
end
29 changes: 29 additions & 0 deletions api/metrics/+opentelemetry/+metrics/Histogram.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
classdef Histogram < opentelemetry.metrics.SynchronousInstrument
% Histogram is an instrument that aggregates values into bins

% Copyright 2023 The MathWorks, Inc.

methods (Access={?opentelemetry.metrics.Meter})
function obj = Histogram(proxy, name, description, unit)
% Private constructor. Use createHistogram method of Meter
% to create Histograms.
[email protected](proxy, name, description, unit);
end
end

methods
function record(obj, value, varargin)
% RECORD Aggregate a value into a histogram bin
% RECORD(H, VALUE) determine which bin VALUE falls into and
% increment that bin by 1.
%
% RECORD(H, VALUE, ATTRIBUTES) also specifies attributes as a
% dictionary
%
% RECORD(H, VALUE, ATTRNAME1, ATTRVALUE1, ATTRNAME2,
% ATTRVALUE2, ...) specifies attributes as trailing
% name-value pairs.
obj.processValue(value, varargin{:});
end
end
end
Loading