|
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