75 lines
2.4 KiB
HTML
75 lines
2.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>{{ interval.title() }} Report</title>
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
|
|
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css">
|
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>
|
|
<script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>
|
|
</head>
|
|
<body class="section">
|
|
<div class="container">
|
|
<h1 class="title">{{ interval.title() }} Report</h1>
|
|
{% for report in reports %}
|
|
<div class="box">
|
|
<h2 class="subtitle">{{ report.label }}</h2>
|
|
{% if report.chart == 'table' %}
|
|
<table id="table-{{ report.name }}" class="table is-striped"></table>
|
|
{% else %}
|
|
<canvas id="chart-{{ report.name }}"></canvas>
|
|
{% endif %}
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
<script>
|
|
const reports = {{ reports | tojson }};
|
|
reports.forEach(rep => {
|
|
fetch(rep.json)
|
|
.then(r => r.json())
|
|
.then(data => {
|
|
if (rep.chart === 'table') {
|
|
const rows = data.map(x => [x.bucket, x.value]);
|
|
new DataTable('#table-' + rep.name, {
|
|
data: rows,
|
|
columns: [
|
|
{ title: 'Bucket' },
|
|
{ title: 'Value' }
|
|
]
|
|
});
|
|
return;
|
|
}
|
|
|
|
const labels = data.map(x => x.bucket);
|
|
const values = data.map(x => x.value);
|
|
const chartType = rep.chart === 'stackedBar' ? 'bar' : rep.chart;
|
|
const options = {
|
|
scales: {
|
|
y: { beginAtZero: true }
|
|
}
|
|
};
|
|
if (rep.chart === 'stackedBar') {
|
|
options.scales.x = { stacked: true };
|
|
options.scales.y.stacked = true;
|
|
}
|
|
new Chart(document.getElementById('chart-' + rep.name), {
|
|
type: chartType,
|
|
data: {
|
|
labels: labels,
|
|
datasets: [{
|
|
label: rep.label,
|
|
data: values,
|
|
backgroundColor: 'rgba(54, 162, 235, 0.5)',
|
|
borderColor: 'rgba(54, 162, 235, 1)',
|
|
borderWidth: 1,
|
|
fill: rep.chart !== 'bar' && rep.chart !== 'stackedBar',
|
|
}]
|
|
},
|
|
options: options
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|