]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/prometheus: Refactoring: Introduce type aliases
authorPatrick Seidensal <pseidensal@suse.com>
Mon, 25 Oct 2021 08:51:35 +0000 (10:51 +0200)
committerPatrick Seidensal <pseidensal@suse.com>
Tue, 25 Jan 2022 14:39:15 +0000 (15:39 +0100)
Fixes: https://tracker.ceph.com/issues/52974
Signed-off-by: Patrick Seidensal <pseidensal@suse.com>
(cherry picked from commit 154d3525b19135a929851c0b027da19abda20ebe)

src/pybind/mgr/prometheus/module.py

index f8573b61cbaf3470b1cbb66eb7ebf7f49ecfe279..800cba9f35e33eae6933c727205f5c29cda3d547 100644 (file)
@@ -16,6 +16,9 @@ import yaml
 
 from typing import DefaultDict, Optional, Dict, Any, Set, cast, Tuple, Union, List
 
+LabelValues = Tuple[str, ...]
+Number = Union[int, float]
+
 # Defaults for the Prometheus HTTP server.  Can also set in config-key
 # see https://github.com/prometheus/prometheus/wiki/Default-port-allocations
 # for Prometheus exporter port registry
@@ -302,18 +305,17 @@ class HealthHistory:
 
 
 class Metric(object):
-    def __init__(self, mtype: str, name: str, desc: str, labels: Optional[Tuple[str, ...]] = None) -> None:
+    def __init__(self, mtype: str, name: str, desc: str, labels: Optional[LabelValues] = None) -> None:
         self.mtype = mtype
         self.name = name
         self.desc = desc
-        self.labelnames = labels    # tuple if present
-        self.value: Dict[Tuple[str, ...], Union[float, int]
-                         ] = {}             # indexed by label values
+        self.labelnames = labels  # tuple if present
+        self.value: Dict[LabelValues, Number] = {}
 
     def clear(self) -> None:
         self.value = {}
 
-    def set(self, value: Union[float, int], labelvalues: Optional[Tuple[str, ...]] = None) -> None:
+    def set(self, value: Number, labelvalues: Optional[LabelValues] = None) -> None:
         # labelvalues must be a tuple
         labelvalues = labelvalues or ('',)
         self.value[labelvalues] = value
@@ -374,7 +376,7 @@ class MetricCounter(Metric):
     def __init__(self,
                  name: str,
                  desc: str,
-                 labels: Optional[Tuple[str, ...]] = None) -> None:
+                 labels: Optional[LabelValues] = None) -> None:
         super(MetricCounter, self).__init__('counter', name, desc, labels)
         self.value = defaultdict(lambda: 0)
 
@@ -382,14 +384,14 @@ class MetricCounter(Metric):
         pass  # Skip calls to clear as we want to keep the counters here.
 
     def set(self,
-            value: Union[float, int],
-            labelvalues: Optional[Tuple[str, ...]] = None) -> None:
+            value: Number,
+            labelvalues: Optional[LabelValues] = None) -> None:
         msg = 'This method must not be used for instances of MetricCounter class'
         raise NotImplementedError(msg)
 
     def add(self,
-            value: Union[float, int],
-            labelvalues: Optional[Tuple[str, ...]] = None) -> None:
+            value: Number,
+            labelvalues: Optional[LabelValues] = None) -> None:
         # labelvalues must be a tuple
         labelvalues = labelvalues or ('',)
         self.value[labelvalues] += value
@@ -1079,7 +1081,7 @@ class Module(MgrModule):
                     continue
                 mirror_metadata['ceph_daemon'] = '{}.{}'.format(service_type,
                                                                 service_id)
-                rbd_mirror_metadata = cast(Tuple[str, ...],
+                rbd_mirror_metadata = cast(LabelValues,
                                            (mirror_metadata.get(k, '')
                                             for k in RBD_MIRROR_METADATA))
                 self.metrics['rbd_mirror_metadata'].set(
@@ -1360,7 +1362,7 @@ class Module(MgrModule):
                         metrics.mtype,
                         new_path,
                         metrics.desc,
-                        cast(Tuple[str, ...], metrics.labelnames) + ('source_zone',)
+                        cast(LabelValues, metrics.labelnames) + ('source_zone',)
                     )
                 for label_values, value in metrics.value.items():
                     new_metrics[new_path].set(value, label_values + (match.group(1),))