feat(server): persist activity history on the server and expose it to the dashboard UI via /api/activity instead of relying on fragile localStorage
This commit is contained in:
1 parent
bf7bf48163
commit
ae0ea9ab22
4 files changed
+83
-41
No files matched your search
@@ -895,23 +895,17 @@
|
||||
// --- WebSocket Activity Feed ---
|
||||
const MAX_ACTIVITY_HISTORY = 100;
|
||||
|
||||
function saveActivityHistory(time, htmlData) {
|
||||
try {
|
||||
let history = JSON.parse(localStorage.getItem('activityHistory') || '[]');
|
||||
history.push({ time, data: htmlData });
|
||||
if (history.length > MAX_ACTIVITY_HISTORY) history = history.slice(-MAX_ACTIVITY_HISTORY);
|
||||
localStorage.setItem('activityHistory', JSON.stringify(history));
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
function loadActivityHistory() {
|
||||
async function loadActivityHistory() {
|
||||
try {
|
||||
const response = await fetch('/api/activity');
|
||||
const history = await response.json();
|
||||
const feed = document.getElementById('activity-feed');
|
||||
let history = JSON.parse(localStorage.getItem('activityHistory') || '[]');
|
||||
feed.innerHTML = '';
|
||||
history.forEach(item => {
|
||||
const div = document.createElement('div');
|
||||
div.className = 'feed-entry';
|
||||
div.innerHTML = `<span class="time">[${item.time}]</span> ${item.data}`;
|
||||
const timeStr = new Date(item.time).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', second:'2-digit'});
|
||||
div.innerHTML = `<span class="time">[${timeStr}]</span> ${item.message || item.data}`;
|
||||
feed.appendChild(div);
|
||||
});
|
||||
if (history.length > 0) {
|
||||
@@ -931,12 +925,10 @@
|
||||
if (data.type === 'activity') {
|
||||
const div = document.createElement('div');
|
||||
div.className = 'feed-entry';
|
||||
const time = new Date().toLocaleTimeString();
|
||||
div.innerHTML = `<span class="time">[${time}]</span> ${data.data}`;
|
||||
const timeStr = new Date(data.data.time).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', second:'2-digit'});
|
||||
div.innerHTML = `<span class="time">[${timeStr}]</span> ${data.data.message || data.data.data || data.data}`;
|
||||
feed.appendChild(div);
|
||||
|
||||
saveActivityHistory(time, data.data);
|
||||
|
||||
// Auto-scroll logic
|
||||
const isScrolledToBottom = feed.scrollHeight - feed.clientHeight <= feed.scrollTop + 20;
|
||||
if (isScrolledToBottom) {
|
||||
|
||||
Reference in new issue
Block a user