|
5 | 5 | import unittest
|
6 | 6 | import warnings
|
7 | 7 |
|
| 8 | +import pytest |
| 9 | + |
8 | 10 | from prometheus_client import mmap_dict, values
|
9 | 11 | from prometheus_client.core import (
|
10 | 12 | CollectorRegistry, Counter, Gauge, Histogram, Sample, Summary,
|
11 | 13 | )
|
| 14 | +import prometheus_client.multiprocess as multiprocess |
12 | 15 | from prometheus_client.multiprocess import (
|
13 | 16 | mark_process_dead, MultiProcessCollector,
|
14 | 17 | )
|
@@ -398,6 +401,56 @@ def test_remove_clear_warning(self):
|
398 | 401 | assert "Clearing labels has not been implemented" in str(w[-1].message)
|
399 | 402 |
|
400 | 403 |
|
| 404 | +@pytest.fixture |
| 405 | +def tempdir(): |
| 406 | + tempdir = tempfile.mkdtemp() |
| 407 | + os.environ['PROMETHEUS_MULTIPROC_DIR'] = tempdir |
| 408 | + values.ValueClass = MultiProcessValue(lambda: 123) |
| 409 | + yield tempdir |
| 410 | + del os.environ['PROMETHEUS_MULTIPROC_DIR'] |
| 411 | + shutil.rmtree(tempdir) |
| 412 | + values.ValueClass = MutexValue |
| 413 | + |
| 414 | +@pytest.fixture |
| 415 | +def registry() -> CollectorRegistry: |
| 416 | + return CollectorRegistry() |
| 417 | + |
| 418 | +@pytest.fixture |
| 419 | +def collector(tempdir, registry) -> MultiProcessCollector: |
| 420 | + return MultiProcessCollector(registry) |
| 421 | + |
| 422 | +@pytest.fixture |
| 423 | +def no_speedup(): |
| 424 | + tmp = multiprocess._speedups |
| 425 | + multiprocess._speedups = False |
| 426 | + yield tmp |
| 427 | + multiprocess._speedups = tmp |
| 428 | + |
| 429 | +def setup_benchmark(): |
| 430 | + labels = {i: i for i in 'abcd'} |
| 431 | + for pid in range(1000): |
| 432 | + values.ValueClass = MultiProcessValue(lambda: pid) |
| 433 | + |
| 434 | + c = Counter('c', 'help', labelnames=labels.keys(), registry=None) |
| 435 | + g = Gauge('g', 'help', labelnames=labels.keys(), registry=None) |
| 436 | + h = Histogram('h', 'help', labelnames=labels.keys(), registry=None) |
| 437 | + |
| 438 | + c.labels(**labels).inc(1) |
| 439 | + g.labels(**labels).set(1) |
| 440 | + h.labels(**labels).observe(1) |
| 441 | + |
| 442 | + |
| 443 | +def test_native_collect_performance(benchmark, collector, no_speedup): |
| 444 | + setup_benchmark() |
| 445 | + benchmark(collector.collect) |
| 446 | + |
| 447 | +def test_speedup_collect_performance(benchmark, collector): |
| 448 | + if not multiprocess._speedups: |
| 449 | + pytest.skip("prometheus_client_python_speedups not installed") |
| 450 | + setup_benchmark() |
| 451 | + benchmark(collector.collect) |
| 452 | + |
| 453 | + |
401 | 454 | class TestMmapedDict(unittest.TestCase):
|
402 | 455 | def setUp(self):
|
403 | 456 | fd, self.tempfile = tempfile.mkstemp()
|
|
0 commit comments