|
38 | 38 | % OPENTELEMETRY.SDK.TRACE.PARENTBASEDSAMPLER |
39 | 39 |
|
40 | 40 | arguments |
41 | | - processor {mustBeA(processor, "opentelemetry.sdk.trace.SpanProcessor")} = ... |
| 41 | + processor {mustBeA(processor, ["opentelemetry.sdk.trace.SpanProcessor", ... |
| 42 | + "libmexclass.proxy.Proxy"])} = ... |
42 | 43 | opentelemetry.sdk.trace.SimpleSpanProcessor() |
43 | 44 | end |
44 | 45 |
|
45 | 46 | arguments (Repeating) |
46 | 47 | optionnames (1,:) {mustBeTextScalar} |
47 | 48 | optionvalues |
48 | 49 | end |
49 | | - |
| 50 | + |
50 | 51 | % explicit call to superclass constructor to make it a no-op |
51 | 52 | obj@opentelemetry.trace.TracerProvider("skip"); |
52 | 53 |
|
53 | | - validnames = ["Sampler", "Resource"]; |
54 | | - foundsampler = false; |
55 | | - resourcekeys = string.empty(); |
56 | | - resourcevalues = {}; |
57 | | - resource = dictionary(resourcekeys, resourcevalues); |
58 | | - for i = 1:length(optionnames) |
59 | | - namei = validatestring(optionnames{i}, validnames); |
60 | | - valuei = optionvalues{i}; |
61 | | - if strcmp(namei, "Sampler") |
62 | | - if ~isa(valuei, "opentelemetry.sdk.trace.Sampler") |
63 | | - error("opentelemetry:InvalidSamplerType", ... |
64 | | - "Sampler must be an instance of one of the sampler classes"); |
65 | | - end |
66 | | - sampler = valuei; |
67 | | - foundsampler = true; |
68 | | - else % "Resource" |
69 | | - if ~isa(valuei, "dictionary") |
70 | | - error("opentelemetry:InvalidResourceType", ... |
71 | | - "Attibutes input must be a dictionary."); |
72 | | - end |
73 | | - resource = valuei; |
74 | | - resourcekeys = keys(valuei); |
75 | | - resourcevalues = values(valuei,"cell"); |
76 | | - % collapse one level of cells, as this may be due to |
77 | | - % a behavior of dictionary.values |
78 | | - if all(cellfun(@iscell, resourcevalues)) |
79 | | - resourcevalues = [resourcevalues{:}]; |
| 54 | + if isa(processor, "libmexclass.proxy.Proxy") |
| 55 | + % This code branch is used to support conversion from API |
| 56 | + % TracerProvider to SDK equivalent, needed internally by |
| 57 | + % opentelemetry.sdk.trace.Cleanup |
| 58 | + tpproxy = processor; % rename the variable |
| 59 | + assert(tpproxy.Name == "libmexclass.opentelemetry.TracerProviderProxy"); |
| 60 | + obj.Proxy = libmexclass.proxy.Proxy("Name", ... |
| 61 | + "libmexclass.opentelemetry.sdk.TracerProviderProxy", ... |
| 62 | + "ConstructorArguments", {tpproxy.ID}); |
| 63 | + % leave other properties unassigned, they won't be used |
| 64 | + else |
| 65 | + % Code branch for construction from inputs |
| 66 | + validnames = ["Sampler", "Resource"]; |
| 67 | + foundsampler = false; |
| 68 | + resourcekeys = string.empty(); |
| 69 | + resourcevalues = {}; |
| 70 | + resource = dictionary(resourcekeys, resourcevalues); |
| 71 | + for i = 1:length(optionnames) |
| 72 | + namei = validatestring(optionnames{i}, validnames); |
| 73 | + valuei = optionvalues{i}; |
| 74 | + if strcmp(namei, "Sampler") |
| 75 | + if ~isa(valuei, "opentelemetry.sdk.trace.Sampler") |
| 76 | + error("opentelemetry:InvalidSamplerType", ... |
| 77 | + "Sampler must be an instance of one of the sampler classes"); |
| 78 | + end |
| 79 | + sampler = valuei; |
| 80 | + foundsampler = true; |
| 81 | + else % "Resource" |
| 82 | + if ~isa(valuei, "dictionary") |
| 83 | + error("opentelemetry:InvalidResourceType", ... |
| 84 | + "Attibutes input must be a dictionary."); |
| 85 | + end |
| 86 | + resource = valuei; |
| 87 | + resourcekeys = keys(valuei); |
| 88 | + resourcevalues = values(valuei,"cell"); |
| 89 | + % collapse one level of cells, as this may be due to |
| 90 | + % a behavior of dictionary.values |
| 91 | + if all(cellfun(@iscell, resourcevalues)) |
| 92 | + resourcevalues = [resourcevalues{:}]; |
| 93 | + end |
80 | 94 | end |
81 | 95 | end |
| 96 | + if ~foundsampler |
| 97 | + sampler = opentelemetry.sdk.trace.AlwaysOnSampler; |
| 98 | + end |
| 99 | + obj.Proxy = libmexclass.proxy.Proxy("Name", ... |
| 100 | + "libmexclass.opentelemetry.sdk.TracerProviderProxy", ... |
| 101 | + "ConstructorArguments", {processor.Proxy.ID, sampler.Proxy.ID, ... |
| 102 | + resourcekeys, resourcevalues}); |
| 103 | + obj.SpanProcessor = processor; |
| 104 | + obj.Sampler = sampler; |
| 105 | + obj.Resource = resource; |
82 | 106 | end |
83 | | - if ~foundsampler |
84 | | - sampler = opentelemetry.sdk.trace.AlwaysOnSampler; |
85 | | - end |
86 | | - obj.Proxy = libmexclass.proxy.Proxy("Name", ... |
87 | | - "libmexclass.opentelemetry.sdk.TracerProviderProxy", ... |
88 | | - "ConstructorArguments", {processor.Proxy.ID, sampler.Proxy.ID, ... |
89 | | - resourcekeys, resourcevalues}); |
90 | | - obj.SpanProcessor = processor; |
91 | | - obj.Sampler = sampler; |
92 | | - obj.Resource = resource; |
93 | 107 | end |
94 | 108 |
|
95 | 109 | function addSpanProcessor(obj, processor) |
|
0 commit comments