6df440a14e37f87f8fcea5cac7c57ca1269915b4
[arvados.git] / tools / crunchstat-summary / crunchstat_summary / dygraphs.py
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 import crunchstat_summary.webchart
6
7
8 class DygraphsChart(crunchstat_summary.webchart.WebChart):
9     CSS = 'https://cdnjs.cloudflare.com/ajax/libs/dygraph/2.0.0/dygraph.min.css'
10     JSLIB = 'https://cdnjs.cloudflare.com/ajax/libs/dygraph/2.0.0/dygraph.min.js'
11     JSASSETS = ['synchronizer.js','dygraphs.js']
12
13     def headHTML(self):
14         return '<link rel="stylesheet" href="{}">\n'.format(self.CSS)
15
16     def chartdata(self, label, tasks, stat):
17         return {
18             'data': self._collate_data(tasks, stat),
19             'options': {
20                 'connectSeparatedPoints': True,
21                 'labels': ['elapsed']+[uuid for uuid, _ in tasks.items()],
22                 'title': '{}: {} {}'.format(label, stat[0], stat[1]),
23             },
24         }
25
26     def _collate_data(self, tasks, stat):
27         data = []
28         nulls = []
29         for uuid, task in tasks.items():
30             for pt in task.series[stat]:
31                 data.append([pt[0].total_seconds()] + nulls + [pt[1]])
32             nulls.append(None)
33         return sorted(data)