feat+fix: changed the primary data source for the data analysis and added the relative card in the dashboard page.
This commit is contained in:
@@ -38,6 +38,13 @@
|
||||
</div>
|
||||
</a> -->
|
||||
|
||||
<a class="card" href="/sessions" title="Previsioni">
|
||||
<div>
|
||||
<h3>Analisi Dati</h3>
|
||||
<p>Analizza i dati raccolti sulle performance e sulla navigazione.</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a class="card" href="/forecasts" title="Previsioni">
|
||||
<div>
|
||||
<h3>Previsioni</h3>
|
||||
|
||||
@@ -464,7 +464,7 @@ function nearestIdx(ts) {
|
||||
// --- Load sessions list ---
|
||||
async function loadSessionsList() {
|
||||
try {
|
||||
const res = await fetch(`${API_URL}/sessions/history`);
|
||||
const res = await fetch(`${API_URL}/sessions/history`, { credentials: 'include' });
|
||||
const sessions = await res.json();
|
||||
renderSessionGrid(sessions);
|
||||
} catch (err) {
|
||||
@@ -496,8 +496,8 @@ function filterSessionGrid() {
|
||||
if (!filtered.length) { grid.innerHTML = '<div class="sess-empty">Nessuna sessione trovata.</div>'; return; }
|
||||
grid.innerHTML = '';
|
||||
filtered.forEach(s => {
|
||||
const start = s.created_at ? new Date(s.created_at).getTime() : null;
|
||||
const end = s.disconnected_at ? new Date(s.disconnected_at).getTime() : null;
|
||||
const start = s.startTime ? new Date(s.startTime).getTime() : null;
|
||||
const end = s.endTime ? new Date(s.endTime).getTime() : null;
|
||||
const dur = start && end ? fmtDuration(end - start) : (start ? 'In corso' : '—');
|
||||
const tags = Array.isArray(s.tags) ? s.tags : [];
|
||||
const card = document.createElement('div');
|
||||
@@ -506,8 +506,8 @@ function filterSessionGrid() {
|
||||
<div class="sess-card-name">${s.name || s.session_id || '—'}</div>
|
||||
<div class="sess-card-id">${s.session_id || ''}</div>
|
||||
<div class="sess-card-sensor">${s.sensor_name || '—'}</div>
|
||||
<div class="sess-card-dates">${fmtDate(s.created_at)}</div>
|
||||
${end ? `<div class="sess-card-dates">${fmtDate(s.disconnected_at)}</div>` : ''}
|
||||
<div class="sess-card-dates">${fmtDate(s.startTime)}</div>
|
||||
${end ? `<div class="sess-card-dates">${fmtDate(s.endTime)}</div>` : ''}
|
||||
<div class="sess-card-duration">${dur}</div>
|
||||
${tags.length ? `<div class="sess-tags">${tags.map(t=>`<span class="sess-tag">${t}</span>`).join('')}</div>` : ''}
|
||||
`;
|
||||
@@ -549,10 +549,10 @@ async function loadSessionData(meta) {
|
||||
document.getElementById('loadingText').textContent = 'Caricamento dati sessione...';
|
||||
document.getElementById('loadingOverlay').classList.add('visible');
|
||||
try {
|
||||
const from = meta.created_at ? new Date(meta.created_at).toISOString() : null;
|
||||
const from = meta.startTime ? new Date(meta.startTime).toISOString() : null;
|
||||
const params = new URLSearchParams({ session: meta.session_id });
|
||||
if (from) params.set('from', from);
|
||||
const res = await fetch(`${API_URL}/sessions/${encodeURIComponent(meta.sensor_name)}/data?${params}`);
|
||||
const res = await fetch(`${API_URL}/sessions/${encodeURIComponent(meta.sensor_name)}/data?${params}`, { credentials: 'include' });
|
||||
sessionRows = await res.json();
|
||||
|
||||
if (!sessionRows.length) { showToast('Nessun dato trovato per questa sessione'); return; }
|
||||
@@ -894,7 +894,7 @@ document.getElementById('downloadBtn').onclick = async () => {
|
||||
try {
|
||||
const params = new URLSearchParams({ session: currentSessionId, from: String(tStart) });
|
||||
if (restrictMode) params.set('to', String(restrictEnd));
|
||||
const res = await fetch(`${API_URL}/sessions/${encodeURIComponent(currentSensorId)}/csv?${params}`);
|
||||
const res = await fetch(`${API_URL}/sessions/${encodeURIComponent(currentSensorId)}/csv?${params}`, { credentials: 'include' });
|
||||
if (!res.ok) { showToast('Errore durante il download'); return; }
|
||||
const blob = await res.blob();
|
||||
const url = URL.createObjectURL(blob);
|
||||
|
||||
Reference in New Issue
Block a user