Código fonte para asyncworker.metrics.buckets

from typing import List

from asyncworker.conf import INFINITY


[documentos]def exponential_buckets(start: float, factor: float, count: int) -> List[float]: """ Creates 'count' buckets, where the lowest bucket has an upper bound of 'start' and each following bucket's upper bound is 'factor' times the previous bucket's upper bound. The final +Inf bucket is not counted and is included in the returned slice. The returned list is meant to be used for the buckets field of Histogram. >>> exponential_buckets(start=100.0, factor=2, count=5) [100.0, 200.0, 400.0, 800.0, 1600.0, inf] >>> exponential_buckets(start=100.0, factor=2.5, count=5) [100.0, 250.0, 625.0, 1562.5, 3906.25, inf] """ if count < 1: raise ValueError(f"Expected a positive `count` value. Got '{count}'") start = float(start) if start <= 0: raise ValueError(f"Expected a positive `start` value. Got '{start}'") if factor <= 1: raise ValueError( f"Exponential buckets need a `factor` greater than 1. Got '{factor}'" ) def gen_steps(): nonlocal start yield start for _ in range(count - 1): start = start * factor yield start return [*gen_steps(), INFINITY]
[documentos]def linear_buckets(start: float, width: float, count: int) -> List[float]: """ Creates 'count' buckets, each 'width' wide, where the lowest bucket has an upper bound of 'start'. The final +Inf bucket is not counted and is included in the returned slice. The returned list is meant to be used for the buckets field of Histograms. >>> linear_buckets(start=100.0, width=100, count=5) [100.0, 200.0, 300.0, 400.0, 500.0, inf] >>> linear_buckets(start=100.0, width=1000, count=5) [100.0, 1100.0, 2100.0, 3100.0, 4100.0, inf] """ if count < 1: raise ValueError(f"Expected a positive `count` value. Got '{count}'") return [*(start + (width * n) for n in range(count)), INFINITY]