updated
All checks were successful
Deployment / deploy-docker (push) Successful in 18s

This commit is contained in:
Melchior Reimers
2026-01-25 18:33:16 +01:00
parent df478b0ea4
commit 03d080b0d9

View File

@@ -125,8 +125,8 @@
</div> </div>
</div> </div>
<button onclick="updateCustomGraph()" class="btn-primary px-6 py-2">Graph aktualisieren</button> <button onclick="updateCustomGraph()" class="glass px-6 py-3 bg-sky-500 hover:bg-sky-600 text-white font-bold rounded-lg transition-colors cursor-pointer">Graph aktualisieren</button>
<button onclick="shareCustomGraph()" class="glass px-6 py-2 ml-2 text-sky-400 hover:text-sky-200">🔗 Link teilen</button> <button onclick="shareCustomGraph()" class="glass px-6 py-3 ml-2 text-sky-400 hover:text-sky-200 font-bold rounded-lg transition-colors cursor-pointer">🔗 Link teilen</button>
</div> </div>
<div class="glass p-8"> <div class="glass p-8">
@@ -140,8 +140,16 @@
const API = '/api'; const API = '/api';
let store = { trades: [], metadata: [], summary: [], totalTrades: 0 }; let store = { trades: [], metadata: [], summary: [], totalTrades: 0 };
let charts = {}; let charts = {};
let isRefreshing = false;
let refreshInterval = null;
async function fetchData() { let isRefreshing = false;
let refreshInterval = null;
async function fetchData(skipCharts = false) {
if (isRefreshing) return; // Verhindere parallele Aufrufe
isRefreshing = true;
try { try {
const days = parseInt(document.getElementById('statisticsPeriod')?.value || '7'); const days = parseInt(document.getElementById('statisticsPeriod')?.value || '7');
// Lade alle Trades (aggregiert) und Total Trades aus vorberechneten Daten // Lade alle Trades (aggregiert) und Total Trades aus vorberechneten Daten
@@ -153,13 +161,15 @@
]); ]);
store = { ...store, trades: t.dataset || [], metadata: m.dataset || [], summary: s.dataset || [] }; store = { ...store, trades: t.dataset || [], metadata: m.dataset || [], summary: s.dataset || [] };
store.totalTrades = totalTrades.total_trades || 0; store.totalTrades = totalTrades.total_trades || 0;
updateDashboard(days); updateDashboard(days, skipCharts);
} catch (err) { } catch (err) {
console.error('Error fetching data:', err); console.error('Error fetching data:', err);
} finally {
isRefreshing = false;
} }
} }
function updateDashboard(days = 7) { function updateDashboard(days = 7, skipCharts = false) {
// Volumen aus dem gewählten Zeitraum (aggregiert) // Volumen aus dem gewählten Zeitraum (aggregiert)
let vol = 0; let vol = 0;
if (store.trades && store.trades.length > 0) { if (store.trades && store.trades.length > 0) {
@@ -174,8 +184,10 @@
document.getElementById('statTradesLabel').innerText = `Total Trades (${days}d)`; document.getElementById('statTradesLabel').innerText = `Total Trades (${days}d)`;
document.getElementById('statIsins').innerText = store.metadata.length.toLocaleString(); document.getElementById('statIsins').innerText = store.metadata.length.toLocaleString();
// Lade Statistiken // Lade Statistiken nur wenn nicht übersprungen (verhindert Graph-Zucken)
loadStatistics(); if (!skipCharts) {
loadStatistics();
}
} }
function showView(viewId) { function showView(viewId) {
@@ -193,14 +205,13 @@
async function loadStatistics() { async function loadStatistics() {
const days = parseInt(document.getElementById('statisticsPeriod')?.value || '7'); const days = parseInt(document.getElementById('statisticsPeriod')?.value || '7');
// Aktualisiere auch die Statistik-Karten // Lade die Graphen (ohne fetchData aufzurufen, um Zucken zu vermeiden)
await fetchData();
// Lade dann die Graphen
await Promise.all([ await Promise.all([
loadMovingAverage(days), loadMovingAverage(days),
loadVolumeChanges(days), loadVolumeChanges(days),
loadStockTrends(days) loadStockTrends(days)
]); ]);
updateUrlParams();
} }
async function loadMovingAverage(days) { async function loadMovingAverage(days) {
@@ -730,7 +741,12 @@
await fetchData(); await fetchData();
loadFromUrlParams(); loadFromUrlParams();
setInterval(fetchData, 30000);
// Automatisches Refresh: Aktualisiere nur Daten, nicht die Graphen (verhindert Zucken)
refreshInterval = setInterval(() => {
fetchData(true); // skipCharts = true
}, 30000);
setTimeout(() => loadStatistics(), 1000); setTimeout(() => loadStatistics(), 1000);
}; };
</script> </script>