Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

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 CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ set(OPENTELEMETRY_PROXY_SOURCES
${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 Down
3 changes: 3 additions & 0 deletions api/metrics/include/opentelemetry-matlab/metrics/MeterProxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "opentelemetry-matlab/metrics/CounterProxy.h"
#include "opentelemetry-matlab/metrics/HistogramProxy.h"
#include "opentelemetry-matlab/metrics/UpDownCounterProxy.h"
#include "opentelemetry-matlab/metrics/SynchronousInstrumentProxyFactory.h"

#include "opentelemetry/metrics/meter.h"

Expand All @@ -31,6 +32,8 @@ class MeterProxy : public libmexclass::proxy::Proxy {

private:

void createSynchronous(libmexclass::proxy::method::Context& context, SynchronousInstrumentType type);

nostd::shared_ptr<metrics_api::Meter> CppMeter;
};
} // namespace libmexclass::opentelemetry
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2023 The MathWorks, Inc.

#pragma once

#include "libmexclass/proxy/Proxy.h"

#include "opentelemetry/metrics/meter.h"

namespace metrics_api = opentelemetry::metrics;
namespace nostd = opentelemetry::nostd;

namespace libmexclass::opentelemetry {

enum class SynchronousInstrumentType {Counter, UpDownCounter, Histogram};

class SynchronousInstrumentProxyFactory {
public:
SynchronousInstrumentProxyFactory(nostd::shared_ptr<metrics_api::Meter> mt) : CppMeter(mt) {}

std::shared_ptr<libmexclass::proxy::Proxy> create(SynchronousInstrumentType type,
const std::string& name, const std::string& description, const std::string& unit);

private:

nostd::shared_ptr<metrics_api::Meter> CppMeter;
};
} // namespace libmexclass::opentelemetry
59 changes: 10 additions & 49 deletions api/metrics/src/MeterProxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
#include <chrono>

namespace libmexclass::opentelemetry {
void MeterProxy::createCounter(libmexclass::proxy::method::Context& context) {

void MeterProxy::createSynchronous(libmexclass::proxy::method::Context& context, SynchronousInstrumentType type) {
// Always assumes 3 inputs
matlab::data::StringArray name_mda = context.inputs[0];
std::string name = static_cast<std::string>(name_mda[0]);
Expand All @@ -18,11 +19,8 @@ void MeterProxy::createCounter(libmexclass::proxy::method::Context& context) {
matlab::data::StringArray unit_mda = context.inputs[2];
std::string unit = static_cast<std::string>(unit_mda[0]);

nostd::shared_ptr<metrics_api::Counter<double> > ct = std::move(CppMeter->CreateDoubleCounter(name, description, unit));

// instantiate a CounterProxy instance
CounterProxy* newproxy = new CounterProxy(ct);
auto proxy = std::shared_ptr<libmexclass::proxy::Proxy>(newproxy);
SynchronousInstrumentProxyFactory proxyfactory(CppMeter);
auto proxy = proxyfactory.create(type, name, description, unit);

// obtain a proxy ID
libmexclass::proxy::ID proxyid = libmexclass::proxy::ProxyManager::manageProxy(proxy);
Expand All @@ -33,55 +31,18 @@ void MeterProxy::createCounter(libmexclass::proxy::method::Context& context) {
context.outputs[0] = proxyid_mda;
}

void MeterProxy::createCounter(libmexclass::proxy::method::Context& context) {
createSynchronous(context, SynchronousInstrumentType::Counter);
}

void MeterProxy::createUpDownCounter(libmexclass::proxy::method::Context& context) {
// Always assumes 3 inputs
matlab::data::StringArray name_mda = context.inputs[0];
std::string name = static_cast<std::string>(name_mda[0]);
matlab::data::StringArray description_mda = context.inputs[1];
std::string description= static_cast<std::string>(description_mda[0]);
matlab::data::StringArray unit_mda = context.inputs[2];
std::string unit = static_cast<std::string>(unit_mda[0]);

nostd::shared_ptr<metrics_api::UpDownCounter<double> > ct = std::move(CppMeter->CreateDoubleUpDownCounter
(name, description, unit));

// instantiate a UpDownCounterProxy instance
UpDownCounterProxy* newproxy = new UpDownCounterProxy(ct);
auto proxy = std::shared_ptr<libmexclass::proxy::Proxy>(newproxy);

// obtain a proxy ID
libmexclass::proxy::ID proxyid = libmexclass::proxy::ProxyManager::manageProxy(proxy);

// return the ID
matlab::data::ArrayFactory factory;
auto proxyid_mda = factory.createScalar<libmexclass::proxy::ID>(proxyid);
context.outputs[0] = proxyid_mda;
void MeterProxy::createUpDownCounter(libmexclass::proxy::method::Context& context) {
createSynchronous(context, SynchronousInstrumentType::UpDownCounter);
}


void MeterProxy::createHistogram(libmexclass::proxy::method::Context& context) {
// Always assumes 3 inputs
matlab::data::StringArray name_mda = context.inputs[0];
std::string name = static_cast<std::string>(name_mda[0]);
matlab::data::StringArray description_mda = context.inputs[1];
std::string description= static_cast<std::string>(description_mda[0]);
matlab::data::StringArray unit_mda = context.inputs[2];
std::string unit = static_cast<std::string>(unit_mda[0]);

nostd::shared_ptr<metrics_api::Histogram<double> > hist = std::move(CppMeter->CreateDoubleHistogram(name, description, unit));

// instantiate a HistogramProxy instance
HistogramProxy* newproxy = new HistogramProxy(hist);
auto proxy = std::shared_ptr<libmexclass::proxy::Proxy>(newproxy);

// obtain a proxy ID
libmexclass::proxy::ID proxyid = libmexclass::proxy::ProxyManager::manageProxy(proxy);

// return the ID
matlab::data::ArrayFactory factory;
auto proxyid_mda = factory.createScalar<libmexclass::proxy::ID>(proxyid);
context.outputs[0] = proxyid_mda;
createSynchronous(context, SynchronousInstrumentType::Histogram);
}


Expand Down
37 changes: 37 additions & 0 deletions api/metrics/src/SynchronousInstrumentProxyFactory.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright 2023 The MathWorks, Inc.

#include "opentelemetry-matlab/metrics/SynchronousInstrumentProxyFactory.h"
#include "opentelemetry-matlab/metrics/CounterProxy.h"
#include "opentelemetry-matlab/metrics/HistogramProxy.h"
#include "opentelemetry-matlab/metrics/UpDownCounterProxy.h"


namespace libmexclass::opentelemetry {
std::shared_ptr<libmexclass::proxy::Proxy> SynchronousInstrumentProxyFactory::create(SynchronousInstrumentType type,
const std::string& name, const std::string& description, const std::string& unit) {
std::shared_ptr<libmexclass::proxy::Proxy> proxy;
switch(type) {
case SynchronousInstrumentType::Counter:
{
nostd::shared_ptr<metrics_api::Counter<double> > ct = std::move(CppMeter->CreateDoubleCounter(name, description, unit));
proxy = std::shared_ptr<libmexclass::proxy::Proxy>(new CounterProxy(ct));
}
break;
case SynchronousInstrumentType::UpDownCounter:
{
nostd::shared_ptr<metrics_api::UpDownCounter<double> > udct = std::move(CppMeter->CreateDoubleUpDownCounter(name, description, unit));
proxy = std::shared_ptr<libmexclass::proxy::Proxy>(new UpDownCounterProxy(udct));
}
break;
case SynchronousInstrumentType::Histogram:
{
nostd::shared_ptr<metrics_api::Histogram<double> > hist = std::move(CppMeter->CreateDoubleHistogram(name, description, unit));
proxy = std::shared_ptr<libmexclass::proxy::Proxy>(new HistogramProxy(hist));
}
break;
}
return proxy;
}


} // namespace libmexclass::opentelemetry