Files
TDI-Dashboard/static/js/page_schema.js
T
2026-05-15 12:41:17 +02:00

121 lines
3.3 KiB
JavaScript

(function () {
if (typeof Chart === 'undefined' || !_schemaLabels || !_schemaLabels.length) return;
var COLORS = [
'#2563eb','#16a34a','#d97706','#dc2626','#0284c7',
'#6d28d9','#db2777','#059669','#ea580c','#0891b2',
'#0f766e','#b45309','#7c3aed','#be185d','#0369a1'
];
function palette(n) {
var out = [];
for (var i = 0; i < n; i++) out.push(COLORS[i % COLORS.length]);
return out;
}
// --- bar chart: most used processes ---
var ctxBar = document.getElementById('chartBar');
if (ctxBar) {
new Chart(ctxBar, {
type: 'bar',
data: {
labels: _schemaLabels,
datasets: [{
label: 'Esecuzioni',
data: _schemaCounts,
backgroundColor: palette(_schemaLabels.length),
borderRadius: 4,
borderSkipped: false
}]
},
options: {
responsive: true,
plugins: {
legend: { display: false }
},
scales: {
y: { beginAtZero: true, ticks: { precision: 0 } }
}
}
});
}
// --- pie chart: time per process ---
var ctxPie = document.getElementById('chartPie');
if (ctxPie) {
new Chart(ctxPie, {
type: 'pie',
data: {
labels: _schemaLabels,
datasets: [{
data: _schemaMinutes,
backgroundColor: palette(_schemaLabels.length)
}]
},
options: {
responsive: true,
plugins: {
legend: { position: 'right', labels: { font: { size: 12 } } },
tooltip: {
callbacks: {
label: function (ctx) {
var min = ctx.parsed;
var h = Math.floor(min / 60);
var m = min % 60;
var dur = h > 0 ? h + 'h ' + m + 'min' : m + 'min';
return ' ' + ctx.label + ': ' + dur;
}
}
}
}
}
});
}
// --- horizontal bar chart: total errors per process (most to least) ---
var ctxErrByProc = document.getElementById('chartErrByProc');
if (ctxErrByProc && _errLabels && _errLabels.length) {
var errPairs = _errLabels.map(function(l, i) { return { l: l, n: _errCounts[i] }; })
.filter(function(p) { return p.n > 0; });
var errLabels = errPairs.map(function(p) { return p.l; });
var errCounts = errPairs.map(function(p) { return p.n; });
if (!errLabels.length) {
ctxErrByProc.closest('.chart-box').style.display = 'none';
} else
new Chart(ctxErrByProc, {
type: 'bar',
data: {
labels: errLabels,
datasets: [{
label: 'Errori',
data: errCounts,
backgroundColor: '#dc2626',
hoverBackgroundColor: '#b91c1c',
borderRadius: 4,
borderSkipped: false
}]
},
options: {
indexAxis: 'y',
responsive: true,
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: function (ctx) { return ' ' + ctx.parsed.x + ' errori'; }
}
}
},
scales: {
x: {
beginAtZero: true,
ticks: { precision: 0 },
title: { display: true, text: 'Numero errori' }
},
y: { ticks: { font: { size: 12 } } }
}
}
});
}
}());