Skip to content

Commit f035171

Browse files
committed
Finishing view
1 parent 74f9d38 commit f035171

File tree

8 files changed

+92
-252
lines changed

8 files changed

+92
-252
lines changed

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,27 @@
3131
options.meterName=""
3232
options.meterVersion=""
3333
options.meterSchemaURL=""
34-
options.attributeKeys=[]
34+
options.attributeKeys=""
3535
options.aggregation=""
3636
options.histogramBinEdges=[]
3737
end
38-
39-
options.attributeKeys = ["" options.attributeKeys];
38+
4039
instrumentTypeCategory = int32(find(options.instrumentType==["kCounter", "kHistogram", "kUpDownCounter", "kObservableCounter", "kObservableGauge", "kObservableUpDownCounter"])-1);
4140

4241
aggregationCategory = int32(find(options.aggregation==["kDrop", "kHistogram", "kLastValue", "kSum", "kDefault"])-1);
4342

4443
if(numel(instrumentTypeCategory)==0)
45-
instrumentTypeCategory = -1;
44+
instrumentTypeCategory = int32(-1);
4645
end
4746
if(numel(aggregationCategory)==0)
48-
aggregationCategory = -1;
47+
aggregationCategory = int32(-1);
4948
end
49+
5050
obj.Proxy = libmexclass.proxy.Proxy("Name", "libmexclass.opentelemetry.sdk.ViewProxy", ...
5151
"ConstructorArguments", {options.name, options.description, options.unit, options.instrumentName, ...
5252
instrumentTypeCategory, options.meterName, options.meterVersion, options.meterSchemaURL, ...
5353
options.attributeKeys, aggregationCategory, options.histogramBinEdges});
54+
5455
obj.Name = options.name;
5556
obj.Description = options.description;
5657
obj.Unit = options.unit;

sdk/metrics/src/MeterProviderProxy.cpp

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "libmexclass/proxy/ProxyManager.h"
99

1010
#include <chrono>
11-
#include <string.h>
1211

1312
namespace libmexclass::opentelemetry::sdk {
1413
libmexclass::proxy::MakeResult MeterProviderProxy::make(const libmexclass::proxy::FunctionArguments& constructor_arguments) {
@@ -64,47 +63,6 @@ void MeterProviderProxy::addMetricReader(libmexclass::proxy::method::Context& co
6463
void MeterProviderProxy::addView(libmexclass::proxy::method::Context& context) {
6564
matlab::data::TypedArray<uint64_t> viewid_mda = context.inputs[0];
6665
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-
// }
10866

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

sdk/metrics/src/ViewProxy.cpp

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ libmexclass::proxy::MakeResult ViewProxy::make(const libmexclass::proxy::Functio
5151

5252
std::unique_ptr<metrics_sdk::AttributesProcessor> attributes_processor;
5353
matlab::data::TypedArray<matlab::data::MATLABString> attributes_mda = constructor_arguments[8];
54-
if(attributes_mda.getNumberOfElements()==1){
54+
if(attributes_mda.getNumberOfElements()==1 && attributes_mda[0]==""){
5555
attributes_processor = std::unique_ptr<metrics_sdk::AttributesProcessor>(new metrics_sdk::DefaultAttributesProcessor());
5656
}else{
5757
std::unordered_map<std::string, bool> allowed_attribute_keys;
58-
for (int a=1; a<attributes_mda.getNumberOfElements(); a++) {
58+
for (int a=0; a<attributes_mda.getNumberOfElements(); a++) {
5959
allowed_attribute_keys[attributes_mda[a]] = true;
6060
}
6161
attributes_processor = std::unique_ptr<metrics_sdk::AttributesProcessor>(new metrics_sdk::FilteringAttributesProcessor(allowed_attribute_keys));
@@ -64,6 +64,7 @@ libmexclass::proxy::MakeResult ViewProxy::make(const libmexclass::proxy::Functio
6464
auto view = metrics_sdk::ViewFactory::Create(name, description,
6565
unit, aggregation_type, aggregation_config, std::move(attributes_processor));
6666

67+
6768
// Create Instrument Selector
6869
matlab::data::TypedArray<int> instrument_type_mda = constructor_arguments[4];
6970
metrics_sdk::InstrumentType instrument_type;
@@ -75,40 +76,28 @@ libmexclass::proxy::MakeResult ViewProxy::make(const libmexclass::proxy::Functio
7576

7677
matlab::data::StringArray instrument_name_mda = constructor_arguments[3];
7778
auto instrument_name_view = static_cast<std::string>(instrument_name_mda[0]);
78-
// auto instrument_name_view = nostd::string_view(instrument_name);
7979

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

8382
auto instrumentSelector = metrics_sdk::InstrumentSelectorFactory::Create(instrument_type,
84-
instrument_name_view, unit_view);
83+
instrument_name_view, unit_str);
84+
8585

8686
// Create Meter Selector
8787
matlab::data::StringArray meter_name_mda = constructor_arguments[5];
8888
auto meter_name_view = static_cast<std::string>(meter_name_mda[0]);
89-
// auto meter_name_view = nostd::string_view(meter_name);
9089

9190
matlab::data::StringArray meter_version_mda = constructor_arguments[6];
9291
auto meter_version_view = static_cast<std::string>(meter_version_mda[0]);
93-
// auto meter_version_view = nostd::string_view(meter_version);
9492

9593
matlab::data::StringArray meter_schema_mda = constructor_arguments[7];
9694
auto meter_schema_view = static_cast<std::string>(meter_schema_mda[0]);
97-
// auto meter_schema_view = nostd::string_view(meter_schema);
9895

9996
auto meterSelector = metrics_sdk::MeterSelectorFactory::Create(meter_name_view,
10097
meter_version_view, meter_schema_view);
10198

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)}};
111-
99+
100+
// Call View Proxy Constructor
112101
return std::make_shared<ViewProxy>(std::move(view), std::move(instrumentSelector), std::move(meterSelector));
113102
}
114103

test/tmetrics_sdk.m

Lines changed: 78 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -146,99 +146,84 @@ function testCustomResource(testCase)
146146
end
147147
end
148148

149-
% function testViewCounter(testCase)
150-
% % testCustomResource: check custom resources are included in
151-
% % emitted metrics
152-
%
153-
% exporter = opentelemetry.exporters.otlp.OtlpHttpMetricExporter();
154-
% reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(exporter, ...
155-
% "Interval", seconds(2), "Timeout", seconds(1));
156-
% mp = opentelemetry.sdk.metrics.MeterProvider(reader);
157-
%
158-
% m = getMeter(mp, "mymeter");
159-
% c = createCounter(m, "mycounter");
160-
%
161-
% % create testing value
162-
% val = 10;
163-
%
164-
% % add value and attributes
165-
% c.add(val);
166-
%
167-
% pause(2.5);
168-
%
169-
% view = opentelemetry.sdk.metrics.View("View", "my View", "", "mycounter", "kCounter", "mymeter", "", "", "", "kDrop", []);
170-
%
171-
% addView(mp, view);
172-
%
173-
% clear mp;
174-
%
175-
% % % TODO: add test comparisons
176-
%
177-
% end
178-
%
179-
% function testViewUpDownCounter(testCase)
180-
% % test names and added value in UpDownCounter
181-
%
182-
% exporter = opentelemetry.exporters.otlp.OtlpHttpMetricExporter();
183-
% reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(exporter, ...
184-
% "Interval", seconds(2), "Timeout", seconds(1));
185-
% mp = opentelemetry.sdk.metrics.MeterProvider(reader);
186-
%
187-
% m = getMeter(mp, "mymeter");
188-
% c = createUpDownCounter(m, "mycounter");
189-
%
190-
%
191-
% % add value and attributes
192-
% c.add(-10);
193-
% c.add(-5);
194-
% c.add(12);
195-
% c.add(7);
196-
%
197-
% % wait for collector response time (2s)
198-
% pause(5);
199-
%
200-
% view = opentelemetry.sdk.metrics.View("View", "", "", "mycounter", "kUpDownCounter", "mymeter", "", "", [], "kLastValue", []);
201-
%
202-
% addView(mp, view);
203-
%
204-
% c.add(8);
205-
%
206-
% clear mp;
207-
%
208-
% % % TODO: add test comparisons
209-
% end
210-
%
211-
% function testViewHistogram(testCase)
212-
% % testCustomResource: check custom resources are included in
213-
% % emitted metrics
214-
%
215-
% exporter = opentelemetry.exporters.otlp.OtlpHttpMetricExporter();
216-
% reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(exporter, ...
217-
% "Interval", seconds(2), "Timeout", seconds(1));
218-
% mp = opentelemetry.sdk.metrics.MeterProvider(reader);
219-
% m = mp.getMeter("mymeter");
220-
% hist = m.createHistogram("histogram");
221-
%
222-
% % record values
223-
% hist.record(1);
224-
% hist.record(200);
225-
% hist.record(201);
226-
% hist.record(400);
227-
% hist.record(401);
228-
%
229-
% % wait for collector response
230-
% pause(2.5);
231-
%
232-
% view = opentelemetry.sdk.metrics.View("View", "my View", "", "histogram", "kHistogram", "mymeter", "", "", "", "kHistogram", [0 100 200 300 400 500]);
233-
%
234-
% addView(mp, view);
235-
%
236-
% hist.record(402);
237-
%
238-
% clear mp;
239-
%
240-
% % % TODO: add test comparisons
241-
% end
149+
function testViewBasic(testCase)
150+
mp = opentelemetry.sdk.metrics.MeterProvider(testCase.ShortIntervalReader);
151+
152+
view_name = "counter_view";
153+
view_description = "view_description";
154+
view = opentelemetry.sdk.metrics.View(name="counter_view", description="view_description", instrumentName="mycounter", instrumentType="kCounter", meterName="mymeter", meterVersion="1.2.0", meterSchemaURL="", aggregation="kSum");
155+
156+
addView(mp, view);
157+
158+
m = getMeter(mp, "mymeter", "1.2.0", "");
159+
c = createCounter(m, "mycounter");
160+
161+
% add value and attributes
162+
val = 10;
163+
c.add(val);
164+
165+
pause(2.5);
166+
167+
clear m;
168+
results = readJsonResults(testCase);
169+
results = results{end};
170+
171+
% verify view name and description
172+
verifyEqual(testCase, string(results.resourceMetrics.scopeMetrics.metrics.name), view_name);
173+
verifyEqual(testCase, string(results.resourceMetrics.scopeMetrics.metrics.description), view_description);
174+
175+
% fetch datapoint
176+
dp = results.resourceMetrics.scopeMetrics.metrics.sum.dataPoints;
177+
178+
% verify counter value
179+
verifyEqual(testCase, dp.asDouble, val);
180+
end
181+
182+
183+
function testViewHistogram(testCase)
184+
mp = opentelemetry.sdk.metrics.MeterProvider(testCase.ShortIntervalReader);
185+
186+
view_name = "histogram_view";
187+
view_description = "view_description";
188+
bin_edges = [0; 100; 200; 300; 400; 500];
189+
view = opentelemetry.sdk.metrics.View(name="histogram_view", description="view_description", instrumentName="myhistogram", instrumentType="kHistogram", meterName="mymeter", aggregation="kHistogram", histogramBinEdges=bin_edges);
190+
191+
addView(mp, view);
192+
193+
m = mp.getMeter("mymeter");
194+
hist = m.createHistogram("myhistogram");
195+
196+
% record values
197+
hist.record(0);
198+
hist.record(200);
199+
hist.record(201);
200+
hist.record(401);
201+
hist.record(402);
202+
203+
% wait for collector response
204+
pause(2.5);
205+
206+
clear m;
207+
results = readJsonResults(testCase);
208+
results = results{end};
209+
210+
% verify view name and description
211+
verifyEqual(testCase, string(results.resourceMetrics.scopeMetrics.metrics.name), view_name);
212+
verifyEqual(testCase, string(results.resourceMetrics.scopeMetrics.metrics.description), view_description);
213+
214+
% fetch datapoint
215+
dp = results.resourceMetrics.scopeMetrics.metrics.histogram.dataPoints;
216+
217+
% verify histogram sum
218+
verifyEqual(testCase, dp.sum, 1204);
219+
220+
% verify histogram bounds
221+
verifyEqual(testCase, dp.explicitBounds, bin_edges);
222+
223+
% verify histogram buckets
224+
expected_buckets = {'1'; '0'; '1'; '1'; '0'; '2'; '0'};
225+
verifyEqual(testCase, dp.bucketCounts, expected_buckets);
226+
end
242227

243228
function testShutdown(testCase)
244229
% testShutdown: shutdown method should stop exporting

test/view/testattributes.m

Lines changed: 0 additions & 24 deletions
This file was deleted.

test/view/testhistogram.m

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)