Eventanzeige: Events im Modal auf den aktuellen Tag filtern

Das Event-Modal zeigte bisher die volle vom Server gelieferte Liste
(bis zu 200 Events) ungefiltert an und war dadurch schnell unuebersichtlich.
filterEventsForToday() schraenkt die Anzeige auf Events des aktuellen
Kalendertags (lokale Zeitzone, wie formatEventTime()) ein.

Schliesst #100

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
fds2610-bot 2026-10-01 07:28:16 +02:00
parent a62bb384af
commit 4eb80f603d
3 changed files with 50 additions and 2 deletions

View file

@ -23,6 +23,7 @@ import {
formatEventLineText, formatEventLineText,
truncateToWidth, truncateToWidth,
buildEventModalContent, buildEventModalContent,
filterEventsForToday,
buildSystemModalContent, buildSystemModalContent,
buildKpiTiles, buildKpiTiles,
buildKpiModalContent, buildKpiModalContent,
@ -2386,7 +2387,7 @@ export function renderOfficeScene(container, data = {}) {
} }
const wallGroup = renderMonitorWall(systems, events, displayKpis, { const wallGroup = renderMonitorWall(systems, events, displayKpis, {
onEventsClick: () => openModal(buildEventModalContent(events), renderEventModalBody), onEventsClick: () => openModal(buildEventModalContent(filterEventsForToday(events)), renderEventModalBody),
onSystemsClick: () => openModal(buildSystemModalContent(systems), renderSystemModalBody), onSystemsClick: () => openModal(buildSystemModalContent(systems), renderSystemModalBody),
// Issue #70: die aktuell gezeigten Systeme wandern mit ins Modal - daran erkennt es, // Issue #70: die aktuell gezeigten Systeme wandern mit ins Modal - daran erkennt es,
// welche Kacheln zu keinem konfigurierten Host mehr gehoeren. // welche Kacheln zu keinem konfigurierten Host mehr gehoeren.

View file

@ -335,7 +335,31 @@ export function truncateToWidth(value, availableWidth, charWidth = EVENT_LINE_CH
} }
/** /**
* Inhaltsmodell fuer das Event-Monitor-Modal: volle Liste (kein MAX_EVENT_LINES-Limit). * Filtert Events auf den aktuellen Kalendertag (Issue #100: die volle Eventliste im Modal
* lief sonst unbegrenzt zurueck und wurde dadurch unuebersichtlich lang). "Aktueller Tag"
* meint wie bei formatEventTime() die lokale Zeitzone des Browsers (F16), nicht UTC.
*
* @param {Array<{occurred_at: string}>} events
* @param {Date} [now]
* @returns {Array<object>}
*/
export function filterEventsForToday(events = [], now = new Date()) {
return events.filter((event) => {
const occurredAt = new Date(event.occurred_at);
if (Number.isNaN(occurredAt.getTime())) {
return false;
}
return (
occurredAt.getFullYear() === now.getFullYear() &&
occurredAt.getMonth() === now.getMonth() &&
occurredAt.getDate() === now.getDate()
);
});
}
/**
* Inhaltsmodell fuer das Event-Monitor-Modal: volle Liste des aktuellen Tages (kein
* MAX_EVENT_LINES-Limit, aber auf heute gefiltert, siehe filterEventsForToday()).
* *
* @param {Array<object>} events * @param {Array<object>} events
*/ */

View file

@ -19,6 +19,7 @@ import {
truncateToWidth, truncateToWidth,
EVENT_LINE_CHAR_WIDTH, EVENT_LINE_CHAR_WIDTH,
buildEventModalContent, buildEventModalContent,
filterEventsForToday,
buildSystemModalContent, buildSystemModalContent,
systemsWithoutHostConfig, systemsWithoutHostConfig,
formatSystemCheckTime, formatSystemCheckTime,
@ -350,6 +351,28 @@ test("buildEventModalContent zeigt die volle Liste (kein MAX_EVENT_LINES-Limit)"
assert.equal(content.items[0].systemId, "srv1"); assert.equal(content.items[0].systemId, "srv1");
}); });
test("filterEventsForToday behaelt nur Events vom aktuellen Kalendertag (lokale Zeitzone, F16)", () => {
const now = new Date("2026-07-27T10:00:00");
const events = [
{ id: "heute-frueh", occurred_at: "2026-07-27T00:05:00" },
{ id: "heute-spaet", occurred_at: "2026-07-27T23:55:00" },
{ id: "gestern", occurred_at: "2026-07-26T23:59:00" },
{ id: "morgen", occurred_at: "2026-07-28T00:00:00" },
{ id: "ungueltig", occurred_at: "nicht-valide" },
];
const filtered = filterEventsForToday(events, now);
assert.deepEqual(
filtered.map((e) => e.id),
["heute-frueh", "heute-spaet"]
);
});
test("filterEventsForToday liefert eine leere Liste, wenn kein Event von heute ist", () => {
const now = new Date("2026-07-27T10:00:00");
const events = [{ id: "gestern", occurred_at: "2026-07-26T10:00:00" }];
assert.deepEqual(filterEventsForToday(events, now), []);
});
test("buildSystemModalContent uebernimmt Status/Detail je System", () => { test("buildSystemModalContent uebernimmt Status/Detail je System", () => {
const content = buildSystemModalContent([ const content = buildSystemModalContent([
{ id: "srv1", name: "Webserver", status: "ok", type: "host", detail: null, last_check_at: "t" }, { id: "srv1", name: "Webserver", status: "ok", type: "host", detail: null, last_check_at: "t" },