69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import json
|
|
|
|
|
|
class ChartRenderer(object):
|
|
def __init__(self, data):
|
|
self.data = data
|
|
|
|
def get_chart_data(self):
|
|
raise NotImplementedError
|
|
|
|
|
|
class ChartJSLine(ChartRenderer):
|
|
template_name = 'statistics/renderers/chartjs/line.html'
|
|
|
|
dataset_palette = (
|
|
{
|
|
'fillColor': "rgba(220,220,220,0.2)",
|
|
'strokeColor': "rgba(220,220,220,1)",
|
|
'pointColor': "rgba(220,220,220,1)",
|
|
'pointStrokeColor': "#fff",
|
|
'pointHighlightFill': "#fff",
|
|
'pointHighlightStroke': "rgba(220,220,220,1)",
|
|
},
|
|
{
|
|
'fillColor': "rgba(151,187,205,0.2)",
|
|
'strokeColor': "rgba(151,187,205,1)",
|
|
'pointColor': "rgba(151,187,205,1)",
|
|
'pointStrokeColor': "#fff",
|
|
'pointHighlightFill': "#fff",
|
|
'pointHighlightStroke': "rgba(151,187,205,1)",
|
|
},
|
|
)
|
|
|
|
def get_chart_data(self):
|
|
labels = []
|
|
datasets = []
|
|
|
|
for count, serie in enumerate(self.data['series'].items()):
|
|
series_name, series_data = serie
|
|
dataset_labels = []
|
|
dataset_values = []
|
|
|
|
for data_point in series_data:
|
|
dataset_labels.extend(data_point.keys())
|
|
dataset_values.extend(data_point.values())
|
|
|
|
labels = dataset_labels
|
|
dataset = {
|
|
'label': series_name,
|
|
'data': dataset_values,
|
|
}
|
|
dataset.update(
|
|
ChartJSLine.dataset_palette[
|
|
count % len(ChartJSLine.dataset_palette)
|
|
]
|
|
)
|
|
|
|
datasets.append(dataset)
|
|
|
|
data = {
|
|
'labels': labels,
|
|
'datasets': datasets,
|
|
|
|
}
|
|
|
|
return json.dumps(data)
|