Calculate statistics from list of latency samples.
(cls, samples: list[float])
| 76 | |
| 77 | @classmethod |
| 78 | def from_samples(cls, samples: list[float]) -> "LatencyStats": |
| 79 | """Calculate statistics from list of latency samples.""" |
| 80 | if not samples: |
| 81 | return cls() |
| 82 | |
| 83 | sorted_samples = sorted(samples) |
| 84 | n = len(sorted_samples) |
| 85 | |
| 86 | return cls( |
| 87 | min=sorted_samples[0], |
| 88 | max=sorted_samples[-1], |
| 89 | mean=statistics.mean(sorted_samples), |
| 90 | stddev=statistics.stdev(sorted_samples) if n > 1 else 0.0, |
| 91 | p50=sorted_samples[int(n * 0.50)], |
| 92 | p95=sorted_samples[int(n * 0.95)] if n >= 20 else sorted_samples[-1], |
| 93 | p99=sorted_samples[int(n * 0.99)] if n >= 100 else sorted_samples[-1], |
| 94 | ) |
| 95 | |
| 96 | |
| 97 | @dataclass |
no outgoing calls
no test coverage detected