|
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 | + la
A55E
bels_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