|
12 | 12 | from .samples import Sample |
13 | 13 | from .utils import floatToGoString |
14 | 14 |
|
| 15 | +MP_METRIC_HELP = 'Multiprocess metric' |
| 16 | + |
15 | 17 |
|
16 | 18 | class MultiProcessCollector(object): |
17 | 19 | """Collector for files for multi-process mode.""" |
@@ -39,17 +41,26 @@ def merge(files, accumulate=True): |
39 | 41 | @staticmethod |
40 | 42 | def _read_metrics(files): |
41 | 43 | metrics = {} |
| 44 | + key_cache = {} |
| 45 | + |
| 46 | + def _parse_key(key): |
| 47 | + val = key_cache.get(key) |
| 48 | + if not val: |
| 49 | + metric_name, name, labels = json.loads(key) |
| 50 | + labels_key = tuple(sorted(labels.items())) |
| 51 | + val = key_cache[key] = (metric_name, name, labels, labels_key) |
| 52 | + return val |
| 53 | + |
42 | 54 | for f in files: |
43 | 55 | parts = os.path.basename(f).split('_') |
44 | 56 | typ = parts[0] |
45 | 57 | d = MmapedDict(f, read_mode=True) |
46 | 58 | for key, value in d.read_all_values(): |
47 | | - metric_name, name, labels = json.loads(key) |
48 | | - labels_key = tuple(sorted(labels.items())) |
| 59 | + metric_name, name, labels, labels_key = _parse_key(key) |
49 | 60 |
|
50 | 61 | metric = metrics.get(metric_name) |
51 | 62 | if metric is None: |
52 | | - metric = Metric(metric_name, 'Multiprocess metric', typ) |
| 63 | + metric = Metric(metric_name, MP_METRIC_HELP, typ) |
53 | 64 | metrics[metric_name] = metric |
54 | 65 |
|
55 | 66 | if typ == 'gauge': |
|
0 commit comments