Files
scylladb/tools/scyllatop/views/groups.py
Avi Kivity 8e9989685d scyllatop: complete conversion to python3
d2dbbba139 converted scyllatop's interperter to Python 3, but neglected to do
the actual conversion. This patch does so, by running 2to3 over allfiles and adding
an additional bytes->string decode step in prometheus.py. Superfluous 2to3 changes
to print() calls were removed.
Message-Id: <20190117124121.7409-1-avi@scylladb.com>
2019-01-17 12:50:25 +00:00

52 lines
1.2 KiB
Python

import re
from . import mergeable
class Group(object):
_HEAD_PATTERN = re.compile('^([^-]+)-\d+/')
def __init__(self, label):
self._label = label
self._metrics = []
def add(self, metric):
self._metrics.append(metric)
@property
def metrics(self):
return self._metrics
def aggregate(self, mergeMethod):
merger = mergeable.Mergeable(mergeMethod)
for metric in self._metrics:
merger.add(metric.status)
return merger.merged()
@property
def label(self):
return self._label
@classmethod
def extractLabel(cls, metric):
return cls._HEAD_PATTERN.sub(r'\1-*/', metric.symbol)
@property
def size(self):
return len(self._metrics)
class Groups(object):
def __init__(self, measurements):
self._groups = {}
self._load(measurements)
def _load(self, measurements):
for metric in measurements:
label = Group.extractLabel(metric)
self._groups.setdefault(label, Group(label))
self._groups[label].add(metric)
def all(self):
return sorted(list(self._groups.values()), key=lambda group: group.label)