def __init__(self, core): AbstractPlugin.__init__(self, core) self.decoder = MonitoringDataDecoder() self.mon_data = {} def create_storage(): return { 'avg': defaultdict(list), 'quantiles': defaultdict(list), 'threads': { 'active_threads': [] }, 'rps': { 'RPS': [] }, 'http_codes': defaultdict(list), 'net_codes': defaultdict(list), } self.overall = create_storage() self.cases = defaultdict(create_storage) self.start_time = None self.end_time = None self.show_graph = None self.template = os.path.dirname(__file__) + "/report.tpl"
import time from Tank.MonCollector.collector import MonitoringDataDecoder mon_decoder = MonitoringDataDecoder() def uts(dt): return int(time.mktime(dt.timetuple())) def parse_number(val): try: return float(val) except ValueError: return None def decode_monitoring(data): data_items = (mon_decoder.decode_line(line) for line in data.splitlines() if line.strip()) result = {} for host, metrics, _, ts in data_items: host_metrics = result \ .setdefault(int(ts), {}) \ .setdefault("monitoring", {}) \ .setdefault(host, {}) for metric_name, value in metrics.iteritems(): if '_' in metric_name: group, metric_name = metric_name.split('_', 1) else: group = metric_name