Skip to content

Commit 6fe2e38

Browse files
committed
Edits from in-person review with @lzchen
Changes open-telemetry#258 to remove meter attr from LabelSet and Metic, and remove statsd encoding.
1 parent 30e5e5a commit 6fe2e38

File tree

1 file changed

+23
-48
lines changed
  • opentelemetry-sdk/src/opentelemetry/sdk/metrics

1 file changed

+23
-48
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py

Lines changed: 23 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,8 @@
2626
class LabelSet(metrics_api.LabelSet):
2727
"""See `opentelemetry.metrics.LabelSet."""
2828

29-
def __init__(
30-
self,
31-
meter: "Meter" = None,
32-
labels: Dict[str, str] = None,
33-
encoded: str = "",
34-
):
35-
self.meter = meter
29+
def __init__(self, labels: Dict[str, str] = None):
3630
self.labels = labels
37-
self.encoded = encoded
3831

3932

4033
class BaseHandle:
@@ -110,7 +103,6 @@ def __init__(
110103
description: str,
111104
unit: str,
112105
value_type: Type[metrics_api.ValueT],
113-
meter: "Meter",
114106
label_keys: Sequence[str] = None,
115107
enabled: bool = True,
116108
monotonic: bool = False,
@@ -119,39 +111,21 @@ def __init__(
119111
self.description = description
120112
self.unit = unit
121113
self.value_type = value_type
122-
self.meter = meter
123114
self.label_keys = label_keys
124115
self.enabled = enabled
125116
self.monotonic = monotonic
126117
self.handles = {}
127118

128119
def get_handle(self, label_set: LabelSet) -> BaseHandle:
129120
"""See `opentelemetry.metrics.Metric.get_handle`."""
130-
lable_set_for = self._label_set_for(label_set)
131-
handle = self.handles.get(lable_set_for.encoded)
121+
handle = self.handles.get(label_set)
132122
if not handle:
133123
handle = self.HANDLE_TYPE(
134124
self.value_type, self.enabled, self.monotonic
135125
)
136-
self.handles[lable_set_for.encoded] = handle
126+
self.handles[label_set] = handle
137127
return handle
138128

139-
def _label_set_for(self, label_set: LabelSet) -> LabelSet:
140-
"""Returns an appropriate `LabelSet` based off this metric's `meter`
141-
142-
If this metric's `meter` is the same as label_set's meter, that means
143-
label_set was created from this metric's `meter` instance and the
144-
proper handle can be found. If not, label_set was created using a
145-
different `meter` implementation, in which the metric cannot interpret.
146-
In this case, return the `EMPTY_LABEL_SET`.
147-
148-
Args:
149-
label_set: The `LabelSet` to check for the same `Meter` implentation.
150-
"""
151-
if label_set.meter and label_set.meter is self.meter:
152-
return label_set
153-
return EMPTY_LABEL_SET
154-
155129
def __repr__(self):
156130
return '{}(name="{}", description={})'.format(
157131
type(self).__name__, self.name, self.description
@@ -176,7 +150,6 @@ def __init__(
176150
description: str,
177151
unit: str,
178152
value_type: Type[metrics_api.ValueT],
179-
meter: "Meter",
180153
label_keys: Sequence[str] = None,
181154
enabled: bool = True,
182155
monotonic: bool = True,
@@ -186,7 +159,6 @@ def __init__(
186159
description,
187160
unit,
188161
value_type,
189-
meter,
190162
label_keys=label_keys,
191163
enabled=enabled,
192164
monotonic=monotonic,
@@ -214,7 +186,6 @@ def __init__(
214186
description: str,
215187
unit: str,
216188
value_type: Type[metrics_api.ValueT],
217-
meter: "Meter",
218189
label_keys: Sequence[str] = None,
219190
enabled: bool = True,
220191
monotonic: bool = False,
@@ -224,7 +195,6 @@ def __init__(
224195
description,
225196
unit,
226197
value_type,
227-
meter,
228198
label_keys=label_keys,
229199
enabled=enabled,
230200
monotonic=monotonic,
@@ -252,7 +222,6 @@ def __init__(
252222
description: str,
253223
unit: str,
254224
value_type: Type[metrics_api.ValueT],
255-
meter: "Meter",
256225
label_keys: Sequence[str] = None,
257226
enabled: bool = False,
258227
monotonic: bool = False,
@@ -262,7 +231,6 @@ def __init__(
262231
description,
263232
unit,
264233
value_type,
265-
meter,
266234
label_keys=label_keys,
267235
enabled=enabled,
268236
monotonic=monotonic,
@@ -279,10 +247,26 @@ def record(self, label_set: LabelSet, value: metrics_api.ValueT) -> None:
279247
EMPTY_LABEL_SET = LabelSet()
280248

281249

250+
class Encoder:
251+
def encode(self, dd):
252+
pass
253+
254+
255+
class DumbEncoder(Encoder):
256+
def encode(self, dd):
257+
return tuple(sorted(dd.items()))
258+
259+
260+
class SmartEncoder(Encoder):
261+
def encode(self, dd):
262+
return tuple(reversed(sorted(dd.items())))
263+
264+
282265
class Meter(metrics_api.Meter):
283266
"""See `opentelemetry.metrics.Meter`."""
284267

285-
def __init__(self):
268+
def __init__(self, encoder=DumbEncoder):
269+
self._encoder = encoder()
286270
self.labels = {}
287271

288272
def record_batch(
@@ -326,18 +310,9 @@ def get_label_set(self, labels: Dict[str, str]):
326310
Args:
327311
labels: The dictionary of label keys to label values.
328312
"""
329-
if len(labels) == 0:
330-
return EMPTY_LABEL_SET
331-
sorted_labels = OrderedDict(sorted(labels.items()))
332-
# Uses statsd encoding for labels
333-
encoded = "," + ",".join(
334-
"%s=%s" % (key, value) for (key, value) in sorted_labels.items()
335-
)
336-
# If LabelSet exists for this meter in memory, use existing one
337-
if not self.labels.get(encoded):
338-
self.labels[encoded] = LabelSet(
339-
self, labels=sorted_labels, encoded=encoded
340-
)
313+
encoded = self._encoder.encode(labels)
314+
if not encoded in self.labels:
315+
self.labels[encoded] = LabelSet(self, labels=labels)
341316
return self.labels[encoded]
342317

343318

0 commit comments

Comments
 (0)