Files
apcupsd-client/app/static/js/events.js
T
2026-04-04 13:53:57 -04:00

57 lines
1.8 KiB
JavaScript

// Events log page (DOM-safe)
(async function () {
function setCell(row, text) {
const td = document.createElement('td');
td.textContent = text;
row.appendChild(td);
}
async function loadUps() {
const r = await window.apiFetch('/api/ups');
if (!r.ok) return;
const list = await r.json();
const sel = document.getElementById('filter-ups');
list.forEach(u => {
const o = document.createElement('option');
o.value = u.name; o.textContent = u.name;
sel.appendChild(o);
});
}
async function loadEvents() {
const ups = document.getElementById('filter-ups').value;
const kind = document.getElementById('filter-kind').value;
const params = new URLSearchParams();
if (ups) params.set('ups', ups);
if (kind) params.set('kind', kind);
params.set('limit', '300');
const r = await window.apiFetch('/api/events?' + params.toString());
const tbody = document.getElementById('events-tbody');
tbody.textContent = '';
if (!r.ok) {
const tr = document.createElement('tr');
setCell(tr, 'Failed to load'); tbody.appendChild(tr); return;
}
const rows = await r.json();
if (!rows.length) {
const tr = document.createElement('tr');
setCell(tr, 'No events'); tbody.appendChild(tr); return;
}
rows.forEach(e => {
const tr = document.createElement('tr');
setCell(tr, new Date(e.ts * 1000).toLocaleString());
setCell(tr, e.ups);
setCell(tr, e.type);
setCell(tr, e.detail);
tbody.appendChild(tr);
});
}
document.getElementById('refresh-btn').addEventListener('click', loadEvents);
document.getElementById('filter-ups').addEventListener('change', loadEvents);
document.getElementById('filter-kind').addEventListener('change', loadEvents);
await loadUps();
await loadEvents();
})();