Files
scylladb/tools/scyllatop/views/groups.py
Yoav Kleinberger 1543253bfd scyllatop: differentiate metrics coming from different hosts
Fix issue #1173.
Previously scyllatop aggregated metrics coming from a cluster with many
hosts so that individual contributions could not be recognized. This is
now changed so that aggregation is also by hostname.

Signed-off-by: Yoav Kleinberger <yoav@scylladb.com>
Message-Id: <8a4d8b82216d8c1aa855026ff31bcfd8bfac7e47.1461150261.git.yoav@scylladb.com>
2016-04-20 20:20:09 +02:00

52 lines
1.2 KiB
Python

import re
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(self._groups.values(), key=lambda group: group.label)