diff --git a/prometheus_client/__init__.py b/prometheus_client/__init__.py index 8a87285d..aa446160 100644 --- a/prometheus_client/__init__.py +++ b/prometheus_client/__init__.py @@ -136,6 +136,8 @@ def init(name, documentation, labelnames=(), namespace='', subsystem='', registr raise ValueError('Invalid label metric name: ' + l) if _RESERVED_METRIC_LABEL_NAME_RE.match(l): raise ValueError('Reserved label metric name: ' + l) + if l in cls._reserved_labelnames: + raise ValueError('Reserved label metric name: ' + l) collector = _LabelWrapper(cls, labelnames) else: collector = cls() @@ -165,6 +167,7 @@ def collect(): @_MetricWrapper class Counter(object): _type = 'counter' + _reserved_labelnames = [] def __init__(self): self._value = 0.0 self._lock = Lock() @@ -205,6 +208,7 @@ def _samples(self): @_MetricWrapper class Gauge(object): _type = 'gauge' + _reserved_labelnames = [] def __init__(self): self._value = 0.0 self._lock = Lock() @@ -257,6 +261,7 @@ def _samples(self): @_MetricWrapper class Summary(object): _type = 'summary' + _reserved_labelnames = ['quantile'] def __init__(self): self._count = 0.0 self._sum = 0.0 diff --git a/tests/test_client.py b/tests/test_client.py index 9bf82edb..837258af 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -143,6 +143,7 @@ def test_invalid_names_raise(self): self.assertRaises(ValueError, Counter, '', 'help', subsystem='(') self.assertRaises(ValueError, Counter, 'c', '', labelnames=['^']) self.assertRaises(ValueError, Counter, 'c', '', labelnames=['__reserved']) + self.assertRaises(ValueError, Summary, 'c', '', labelnames=['quantile']) class TestGenerateText(unittest.TestCase): def setUp(self):