|
2 | 2 | import time
|
3 | 3 | import types
|
4 | 4 | from typing import (
|
5 |
| - Any, Callable, Dict, Optional, Sequence, Tuple, Type, TypeVar, |
| 5 | + Any, Callable, Dict, Iterable, Optional, Sequence, Type, TypeVar, |
6 | 6 | )
|
7 | 7 |
|
8 | 8 | from . import values # retain this import style for testability
|
|
12 | 12 | RESERVED_METRIC_LABEL_NAME_RE,
|
13 | 13 | )
|
14 | 14 | from .registry import CollectorRegistry, REGISTRY
|
15 |
| -from .samples import Exemplar |
| 15 | +from .samples import Exemplar, Sample |
16 | 16 | from .utils import floatToGoString, INF
|
17 | 17 |
|
18 | 18 | T = TypeVar('T', bound='MetricWrapperBase')
|
@@ -103,7 +103,7 @@ def __repr__(self):
|
103 | 103 | def __init__(self: T,
|
104 | 104 | name: str,
|
105 | 105 | documentation: str,
|
106 |
| - labelnames: Sequence[str] = (), |
| 106 | + labelnames: Iterable[str] = (), |
107 | 107 | namespace: str = '',
|
108 | 108 | subsystem: str = '',
|
109 | 109 | unit: str = '',
|
@@ -204,21 +204,21 @@ def clear(self) -> None:
|
204 | 204 | with self._lock:
|
205 | 205 | self._metrics = {}
|
206 | 206 |
|
207 |
| - def _samples(self): |
| 207 | + def _samples(self) -> Iterable[Sample]: |
208 | 208 | if self._is_parent():
|
209 | 209 | return self._multi_samples()
|
210 | 210 | else:
|
211 | 211 | return self._child_samples()
|
212 | 212 |
|
213 |
| - def _multi_samples(self): |
| 213 | + def _multi_samples(self) -> Iterable[Sample]: |
214 | 214 | with self._lock:
|
215 | 215 | metrics = self._metrics.copy()
|
216 | 216 | for labels, metric in metrics.items():
|
217 | 217 | series_labels = list(zip(self._labelnames, labels))
|
218 | 218 | for suffix, sample_labels, value, timestamp, exemplar in metric._samples():
|
219 |
| - yield (suffix, dict(series_labels + list(sample_labels.items())), value, timestamp, exemplar) |
| 219 | + yield Sample(suffix, dict(series_labels + list(sample_labels.items())), value, timestamp, exemplar) |
220 | 220 |
|
221 |
| - def _child_samples(self) -> Sequence[Tuple[str, Dict[str, str], float]]: # pragma: no cover |
| 221 | + def _child_samples(self) -> Iterable[Sample]: # pragma: no cover |
222 | 222 | raise NotImplementedError('_child_samples() must be implemented by %r' % self)
|
223 | 223 |
|
224 | 224 | def _metric_init(self): # pragma: no cover
|
@@ -289,10 +289,10 @@ def count_exceptions(self, exception: Type[BaseException] = Exception) -> Except
|
289 | 289 | self._raise_if_not_observable()
|
290 | 290 | return ExceptionCounter(self, exception)
|
291 | 291 |
|
292 |
| - def _child_samples(self): |
| 292 | + def _child_samples(self) -> Iterable[Sample]: |
293 | 293 | return (
|
294 |
| - ('_total', {}, self._value.get(), None, self._value.get_exemplar()), |
295 |
| - ('_created', {}, self._created, None, None), |
| 294 | + Sample('_total', {}, self._value.get(), None, self._value.get_exemplar()), |
| 295 | + Sample('_created', {}, self._created, None, None), |
296 | 296 | )
|
297 | 297 |
|
298 | 298 |
|
@@ -413,13 +413,13 @@ def set_function(self, f):
|
413 | 413 |
|
414 | 414 | self._raise_if_not_observable()
|
415 | 415 |
|
416 |
| - def samples(self): |
417 |
| - return (('', {}, float(f()), None, None),) |
| 416 | + def samples(self) -> Iterable[Sample]: |
| 417 | + return (Sample('', {}, float(f()), None, None),) |
418 | 418 |
|
419 | 419 | self._child_samples = types.MethodType(samples, self)
|
420 | 420 |
|
421 |
| - def _child_samples(self): |
422 |
| - return (('', {}, self._value.get(), None, None),) |
| 421 | + def _child_samples(self) -> Iterable[Sample]: |
| 422 | + return (Sample('', {}, self._value.get(), None, None),) |
423 | 423 |
|
424 | 424 |
|
425 | 425 | class Summary(MetricWrapperBase):
|
@@ -482,11 +482,11 @@ def time(self):
|
482 | 482 | """
|
483 | 483 | return Timer(self, 'observe')
|
484 | 484 |
|
485 |
| - def _child_samples(self): |
| 485 | + def _child_samples(self) -> Iterable[Sample]: |
486 | 486 | return (
|
487 |
| - ('_count', {}, self._count.get(), None, None), |
488 |
| - ('_sum', {}, self._sum.get(), None, None), |
489 |
| - ('_created', {}, self._created, None, None), |
| 487 | + Sample('_count', {}, self._count.get(), None, None), |
| 488 | + Sample('_sum', {}, self._sum.get(), None, None), |
| 489 | + Sample('_created', {}, self._created, None, None), |
490 | 490 | )
|
491 | 491 |
|
492 | 492 |
|
@@ -606,16 +606,16 @@ def time(self):
|
606 | 606 | """
|
607 | 607 | return Timer(self, 'observe')
|
608 | 608 |
|
609 |
| - def _child_samples(self): |
| 609 | + def _child_samples(self) -> Iterable[Sample]: |
610 | 610 | samples = []
|
611 | 611 | acc = 0
|
612 | 612 | for i, bound in enumerate(self._upper_bounds):
|
613 | 613 | acc += self._buckets[i].get()
|
614 |
| - samples.append(('_bucket', {'le': floatToGoString(bound)}, acc, None, self._buckets[i].get_exemplar())) |
615 |
| - samples.append(('_count', {}, acc, None, None)) |
| 614 | + samples.append(Sample('_bucket', {'le': floatToGoString(bound)}, acc, None, self._buckets[i].get_exemplar())) |
| 615 | + samples.append(Sample('_count', {}, acc, None, None)) |
616 | 616 | if self._upper_bounds[0] >= 0:
|
617 |
| - samples.append(('_sum', {}, self._sum.get(), None, None)) |
618 |
| - samples.append(('_created', {}, self._created, None, None)) |
| 617 | + samples.append(Sample('_sum', {}, self._sum.get(), None, None)) |
| 618 | + samples.append(Sample('_created', {}, self._created, None, None)) |
619 | 619 | return tuple(samples)
|
620 | 620 |
|
621 | 621 |
|
@@ -650,9 +650,9 @@ def info(self, val):
|
650 | 650 | with self._lock:
|
651 | 651 | self._value = dict(val)
|
652 | 652 |
|
653 |
| - def _child_samples(self): |
| 653 | + def _child_samples(self) -> Iterable[Sample]: |
654 | 654 | with self._lock:
|
655 |
| - return (('_info', self._value, 1.0, None, None),) |
| 655 | + return (Sample('_info', self._value, 1.0, None, None),) |
656 | 656 |
|
657 | 657 |
|
658 | 658 | class Enum(MetricWrapperBase):
|
@@ -707,10 +707,10 @@ def state(self, state: str) -> None:
|
707 | 707 | with self._lock:
|
708 | 708 | self._value = self._states.index(state)
|
709 | 709 |
|
710 |
| - def _child_samples(self): |
| 710 | + def _child_samples(self) -> Iterable[Sample]: |
711 | 711 | with self._lock:
|
712 | 712 | return [
|
713 |
| - ('', {self._name: s}, 1 if i == self._value else 0, None, None) |
| 713 | + Sample('', {self._name: s}, 1 if i == self._value else 0, None, None) |
714 | 714 | for i, s
|
715 | 715 | in enumerate(self._states)
|
716 | 716 | ]
|
0 commit comments