Skip to content

Commit 74f9d38

Browse files
committed
Updating view, changing name and histogram edges is working
1 parent 61b93aa commit 74f9d38

File tree

8 files changed

+308
-135
lines changed

8 files changed

+308
-135
lines changed

sdk/metrics/+opentelemetry/+sdk/+metrics/View.m

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,47 @@
2121
end
2222

2323
methods
24-
function obj = View(name, description, unit, instrumentName, instrumentType, ...
25-
meterName, meterVersion, meterSchemaURL, attributeKeys, ...
26-
aggregation, histogramBinEdges, varargin)
24+
function obj = View(options)
25+
arguments
26+
options.name=""
27+
options.description=""
28+
options.unit=""
29+
options.instrumentName=""
30+
options.instrumentType=""
31+
options.meterName=""
32+
options.meterVersion=""
33+
options.meterSchemaURL=""
34+
options.attributeKeys=[]
35+
options.aggregation=""
36+
options.histogramBinEdges=[]
37+
end
2738

28-
instrumentTypeCategory = int32(find(instrumentType==["kCounter", "kHistogram", "kUpDownCounter", "kObservableCounter", "kObservableGauge", "kObservableUpDownCounter"])-1);
39+
options.attributeKeys = ["" options.attributeKeys];
40+
instrumentTypeCategory = int32(find(options.instrumentType==["kCounter", "kHistogram", "kUpDownCounter", "kObservableCounter", "kObservableGauge", "kObservableUpDownCounter"])-1);
2941

30-
aggregationCategory = int32(find(aggregation==["kDrop", "kHistogram", "kLastValue", "kSum", "kDefault"])-1);
42+
aggregationCategory = int32(find(options.aggregation==["kDrop", "kHistogram", "kLastValue", "kSum", "kDefault"])-1);
3143

44+
if(numel(instrumentTypeCategory)==0)
45+
instrumentTypeCategory = -1;
46+
end
47+
if(numel(aggregationCategory)==0)
48+
aggregationCategory = -1;
49+
end
3250
obj.Proxy = libmexclass.proxy.Proxy("Name", "libmexclass.opentelemetry.sdk.ViewProxy", ...
33-
"ConstructorArguments", {name, description, unit, instrumentName, ...
34-
instrumentTypeCategory, meterName, meterVersion, meterSchemaURL, ...
35-
attributeKeys, aggregationCategory, histogramBinEdges, varargin});
36-
obj.Description = description;
37-
obj.Unit = unit;
38-
obj.InstrumentName = instrumentName;
39-
obj.InstrumentType = instrumentType;
40-
obj.MeterName = meterName;
41-
obj.MeterVersion = meterVersion;
42-
obj.MeterSchemaURL = meterSchemaURL;
43-
obj.AttributeKeys = attributeKeys;
44-
obj.Aggregation = aggregation;
45-
obj.HistogramBinEdges = histogramBinEdges;
51+
"ConstructorArguments", {options.name, options.description, options.unit, options.instrumentName, ...
52+
instrumentTypeCategory, options.meterName, options.meterVersion, options.meterSchemaURL, ...
53+
options.attributeKeys, aggregationCategory, options.histogramBinEdges});
54+
obj.Name = options.name;
55+
obj.Description = options.description;
56+
obj.Unit = options.unit;
57+
obj.InstrumentName = options.instrumentName;
58+
obj.InstrumentType = options.instrumentType;
59+
obj.MeterName = options.meterName;
60+
obj.MeterVersion = options.meterVersion;
61+
obj.MeterSchemaURL = options.meterSchemaURL;
62+
obj.AttributeKeys = options.attributeKeys;
63+
obj.Aggregation = options.aggregation;
64+
obj.HistogramBinEdges = options.histogramBinEdges;
4665
end
4766
end
4867
end

sdk/metrics/src/MeterProviderProxy.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
// Copyright 2023 The MathWorks, Inc.
22

3+
#include "opentelemetry/sdk/metrics/instruments.h"
34
#include "opentelemetry-matlab/sdk/metrics/MeterProviderProxy.h"
45
#include "opentelemetry-matlab/sdk/metrics/PeriodicExportingMetricReaderProxy.h"
56
#include "opentelemetry-matlab/sdk/metrics/ViewProxy.h"
67

78
#include "libmexclass/proxy/ProxyManager.h"
89

910
#include <chrono>
11+
#include <string.h>
1012

1113
namespace libmexclass::opentelemetry::sdk {
1214
libmexclass::proxy::MakeResult MeterProviderProxy::make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
@@ -62,6 +64,47 @@ void MeterProviderProxy::addMetricReader(libmexclass::proxy::method::Context& co
6264
void MeterProviderProxy::addView(libmexclass::proxy::method::Context& context) {
6365
matlab::data::TypedArray<uint64_t> viewid_mda = context.inputs[0];
6466
libmexclass::proxy::ID viewid = viewid_mda[0];
67+
68+
// auto i = std::static_pointer_cast<ViewProxy>(libmexclass::proxy::ProxyManager::getProxy(viewid))->getInstrumentSelector(context);
69+
// if((int)(i->GetInstrumentType())!=0){
70+
// exit(0);
71+
// }
72+
// auto instrument_name = "mycounter";
73+
// auto instrument_name_view = nostd::string_view(instrument_name);
74+
// if(!i->GetNameFilter()->Match(instrument_name_view)){
75+
// exit(0);
76+
// }
77+
// auto instrument_unit = "unit";
78+
// auto instrument_unit_view = nostd::string_view(instrument_unit);
79+
// if(!i->GetUnitFilter()->Match(instrument_unit_view)){
80+
// exit(0);
81+
// }
82+
// auto m = std::static_pointer_cast<ViewProxy>(libmexclass::proxy::ProxyManager::getProxy(viewid))->getMeterSelector(context);
83+
// auto meter_name = "mymeter";
84+
// auto meter_name_view = nostd::string_view(meter_name);
85+
// if(!m->GetNameFilter()->Match(meter_name_view)){
86+
// exit(0);
87+
// }
88+
// auto meter_version = "1.2.0";
89+
// auto meter_version_view = nostd::string_view(meter_version);
90+
// if(!m->GetVersionFilter()->Match(meter_version_view)){
91+
// exit(0);
92+
// }
93+
// auto meter_schema = "";
94+
// auto meter_schema_view = nostd::string_view(meter_schema);
95+
// if(!m->GetSchemaFilter()->Match(meter_schema_view)){
96+
// exit(0);
97+
// }
98+
// auto v = std::static_pointer_cast<ViewProxy>(libmexclass::proxy::ProxyManager::getProxy(viewid))->getView(context);
99+
// if(v->GetName().compare("View")!=0){
100+
// exit(0);
101+
// }
102+
// if(v->GetDescription().compare("description")!=0){
103+
// exit(0);
104+
// }
105+
// if((int)(v->GetAggregationType())!=0){
106+
// exit(0);
107+
// }
65108

66109
static_cast<metrics_sdk::MeterProvider&>(*CppMeterProvider).AddView(
67110
std::static_pointer_cast<ViewProxy>(libmexclass::proxy::ProxyManager::getProxy(viewid))->getInstrumentSelector(context),

sdk/metrics/src/ViewProxy.cpp

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ libmexclass::proxy::MakeResult ViewProxy::make(const libmexclass::proxy::Functio
3030
auto unit = unit_mda[0];
3131

3232
matlab::data::TypedArray<int> aggregation_type_mda = constructor_arguments[9];
33-
auto aggregation_type = static_cast<metrics_sdk::AggregationType>(static_cast<int>(aggregation_type_mda[0]));
33+
metrics_sdk::AggregationType aggregation_type;
34+
if(static_cast<int>(aggregation_type_mda[0]) == -1){
35+
aggregation_type = metrics_sdk::AggregationType::kDefault;
36+
}else{
37+
aggregation_type = static_cast<metrics_sdk::AggregationType>(static_cast<int>(aggregation_type_mda[0]));
38+
}
3439

3540
std::shared_ptr<metrics_sdk::HistogramAggregationConfig> aggregation_config = std::shared_ptr<metrics_sdk::HistogramAggregationConfig>(new metrics_sdk::HistogramAggregationConfig());
3641
if(aggregation_type == metrics_sdk::AggregationType::kHistogram){
@@ -45,58 +50,64 @@ libmexclass::proxy::MakeResult ViewProxy::make(const libmexclass::proxy::Functio
4550
}
4651

4752
std::unique_ptr<metrics_sdk::AttributesProcessor> attributes_processor;
48-
matlab::data::StringArray attributes_mda = constructor_arguments[8];
49-
if(attributes_mda.getNumberOfElements()==0){
53+
matlab::data::TypedArray<matlab::data::MATLABString> attributes_mda = constructor_arguments[8];
54+
if(attributes_mda.getNumberOfElements()==1){
5055
attributes_processor = std::unique_ptr<metrics_sdk::AttributesProcessor>(new metrics_sdk::DefaultAttributesProcessor());
5156
}else{
5257
std::unordered_map<std::string, bool> allowed_attribute_keys;
53-
for (auto a : attributes_mda) {
54-
allowed_attribute_keys[a] = true;
58+
for (int a=1; a<attributes_mda.getNumberOfElements(); a++) {
59+
allowed_attribute_keys[attributes_mda[a]] = true;
5560
}
5661
attributes_processor = std::unique_ptr<metrics_sdk::AttributesProcessor>(new metrics_sdk::FilteringAttributesProcessor(allowed_attribute_keys));
5762
}
5863

5964
auto view = metrics_sdk::ViewFactory::Create(name, description,
60-
unit, aggregation_type, std::move(aggregation_config), std::move(attributes_processor));
65+
unit, aggregation_type, aggregation_config, std::move(attributes_processor));
6166

6267
// Create Instrument Selector
6368
matlab::data::TypedArray<int> instrument_type_mda = constructor_arguments[4];
64-
auto instrument_type = static_cast<metrics_sdk::InstrumentType>(static_cast<int>(instrument_type_mda[0]));
69+
metrics_sdk::InstrumentType instrument_type;
70+
if(static_cast<int>(instrument_type_mda[0]) == -1){
71+
instrument_type = metrics_sdk::InstrumentType::kCounter;
72+
}else{
73+
instrument_type = static_cast<metrics_sdk::InstrumentType>(static_cast<int>(instrument_type_mda[0]));
74+
}
6575

6676
matlab::data::StringArray instrument_name_mda = constructor_arguments[3];
67-
auto instrument_name = static_cast<std::string>(instrument_name_mda[0]);
68-
auto instrument_name_view = nostd::string_view(instrument_name);
77+
auto instrument_name_view = static_cast<std::string>(instrument_name_mda[0]);
78+
// auto instrument_name_view = nostd::string_view(instrument_name);
6979

70-
auto unit_view = nostd::string_view(static_cast<std::string>(unit));
80+
auto unit_view = static_cast<std::string>(unit);
81+
// auto unit_view = nostd::string_view(static_cast<std::string>(unit));
7182

7283
auto instrumentSelector = metrics_sdk::InstrumentSelectorFactory::Create(instrument_type,
73-
instrument_name, unit_view);
74-
84+
instrument_name_view, unit_view);
7585

7686
// Create Meter Selector
7787
matlab::data::StringArray meter_name_mda = constructor_arguments[5];
78-
auto meter_name = static_cast<std::string>(meter_name_mda[0]);
79-
auto meter_name_view = nostd::string_view(meter_name);
88+
auto meter_name_view = static_cast<std::string>(meter_name_mda[0]);
89+
// auto meter_name_view = nostd::string_view(meter_name);
8090

8191
matlab::data::StringArray meter_version_mda = constructor_arguments[6];
82-
auto meter_version = static_cast<std::string>(meter_version_mda[0]);
83-
auto meter_version_view = nostd::string_view(meter_version);
92+
auto meter_version_view = static_cast<std::string>(meter_version_mda[0]);
93+
// auto meter_version_view = nostd::string_view(meter_version);
8494

8595
matlab::data::StringArray meter_schema_mda = constructor_arguments[7];
86-
auto meter_schema = static_cast<std::string>(meter_schema_mda[0]);
87-
auto meter_schema_view = nostd::string_view(meter_schema);
96+
auto meter_schema_view = static_cast<std::string>(meter_schema_mda[0]);
97+
// auto meter_schema_view = nostd::string_view(meter_schema);
8898

8999
auto meterSelector = metrics_sdk::MeterSelectorFactory::Create(meter_name_view,
90100
meter_version_view, meter_schema_view);
91101

92-
93-
94-
// out = std::make_shared<ViewProxy>(nostd::shared_ptr<metrics_sdk::View>(
95-
// std::move(metrics_sdk::ViewFactory::Create(name, description,
96-
// unit, aggregation_type, std::move(aggregation_config), std::move(attributes_processor)))));
97-
98-
99-
// return out;
102+
// std::unique_ptr<metrics_sdk::InstrumentSelector> instrumentSelector{
103+
// new metrics_sdk::InstrumentSelector(instrument_type,
104+
// instrument_name_view, unit_view)};
105+
// std::unique_ptr<metrics_sdk::MeterSelector> meterSelector{
106+
// new metrics_sdk::MeterSelector(meter_name_view,
107+
// meter_version_view, meter_schema_view)};
108+
// std::unique_ptr<metrics_sdk::View> view{
109+
// new metrics_sdk::View{name, description,
110+
// unit, aggregation_type, aggregation_config, std::move(attributes_processor)}};
100111

101112
return std::make_shared<ViewProxy>(std::move(view), std::move(instrumentSelector), std::move(meterSelector));
102113
}

0 commit comments

Comments
 (0)