Fuer den Betrieb fehlte bisher eine Rolle: "user" meldet zwar Daten, bleibt in der Buero-Visualisierung aber unsichtbar, weil sie nie einen Schreibtisch bekommt. Der Ping-Check aus check_fds.sh (Weg 3 im README) lief deshalb als "user" und tauchte im Buero nicht auf. "ops" fuellt die Luecke: die Schreibtischvergabe in AgentRepository::register() greift automatisch, sobald die Rolle erlaubt ist - nur "user" bleibt ohne Platz. Der CHECK-Constraint auf agents.role braucht dafuer eine eigene Migration. Ein Edit von 001_initial.sql wuerde nur frische Datenbanken erreichen: bestehende Installationen haben die Migration laut schema_migrations laengst angewandt und wuerden bei role='ops' weiterhin abbrechen. SQLite kann CHECK nicht per ALTER TABLE aendern, 004 baut die Tabelle deshalb neu (Verfahren aus der SQLite-Doku, foreign_keys kurz aus, weil tickets.assignee_agent_id auf agents zeigt). Im Frontend bekommt die Rolle Label "OPs", eine Akzentfarbe und ein Zahnrad als Schreibtisch-Deko - ohne Eintrag in der ROLES-Map rendert der Avatar grau und ohne Label. Neu ist ausserdem register-ops-agent.sh neben der docker-compose.yml: es liest Admin-Key und Basis-URL aus der .env, registriert den lokalen OPs-Agenten und schreibt den nur einmalig ausgegebenen API-Key mit chmod 600 nach monitor-api.conf - also genau die beiden Schritte aus Weg 3, die hosts.conf und credentials.conf nicht abdecken. Eine vorhandene monitor-api.conf ueberschreibt es nicht, und ein zweiter Agent gleichen Namens (der einen weiteren der acht Schreibtische belegen wuerde) wird vorher abgefangen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
52 lines
2.3 KiB
JavaScript
52 lines
2.3 KiB
JavaScript
// Statische Demo-Daten fuer Phase 2 ("Statische Buero-Szene", Visualization.md Abschnitt 9).
|
||
// Die Form entspricht bewusst den echten API-Responses (siehe API.md), damit ab Phase 3 nur
|
||
// noch die Quelle (fetch() statt dieses Moduls) getauscht werden muss.
|
||
|
||
// Entspricht der Struktur von GET /api/v1/tickets, hier aber bereits zu Zaehlern je Spalte
|
||
// aggregiert (die eigentliche Aggregation aus Einzel-Tickets kommt mit der Live-Anbindung
|
||
// in Phase 3).
|
||
export const DEMO_TICKET_COUNTS = {
|
||
backlog: 8,
|
||
bereit: 3,
|
||
in_arbeit: 2,
|
||
qa: 1,
|
||
testing: 0,
|
||
fertig: 2,
|
||
done: 12,
|
||
};
|
||
|
||
// Entspricht GET /api/v1/agents, "pose" ist reine Darstellungs-Deko fuer Phase 2 (ohne
|
||
// Animation) und kein Feld der echten API.
|
||
export const DEMO_AGENTS = [
|
||
{ name: "Alice", role: "entwickler", pose: "working" },
|
||
{ name: "Bob", role: "entwickler", pose: "reading_newspaper" },
|
||
{ name: "Petra", role: "product_owner", pose: "working" },
|
||
{ name: "Quentin", role: "qa", pose: "idle" },
|
||
{ name: "Dirk", role: "entwickler", pose: "working" },
|
||
{ name: "Nadja", role: "qa", pose: "coffee" },
|
||
{ name: "Olaf", role: "ops", pose: "working" },
|
||
null,
|
||
];
|
||
|
||
// Entspricht GET /api/v1/systems.
|
||
export const DEMO_SYSTEMS = [
|
||
{ id: "srv1", name: "Webserver", status: "ok" },
|
||
{ id: "srv2", name: "Mailserver", status: "ok" },
|
||
{ id: "srv3", name: "Datenbank", status: "error" },
|
||
{ id: "srv4", name: "Backup", status: "ok" },
|
||
{ id: "srv5", name: "VPN", status: "ok" },
|
||
{ id: "srv6", name: "DNS", status: "ok" },
|
||
];
|
||
|
||
// Entspricht GET /api/v1/events, bereits absteigend nach Zeit sortiert (neuestes zuerst).
|
||
export const DEMO_EVENTS = [
|
||
{ time: "14:32", system: "Datenbank", message: "Verbindung fehlgeschlagen", severity: "error" },
|
||
{ time: "14:20", system: "Backup", message: "Backup dauert laenger als ueblich", severity: "warning" },
|
||
{ time: "13:58", system: "Webserver", message: "Hohe Antwortzeit", severity: "warning" },
|
||
{ time: "12:10", system: "VPN", message: "Client getrennt", severity: "warning" },
|
||
{ time: "09:05", system: "Datenbank", message: "Reconnect erfolgreich", severity: "warning" },
|
||
];
|
||
|
||
// KPI-Monitor: F7 ist noch offen ("kommt spaeter") - Phase 2 zeigt daher nur einen leeren
|
||
// Rahmen mit Platzhaltertext, bewusst keine erfundenen Kennzahlen.
|
||
export const DEMO_KPI_PLACEHOLDER = "KPI-Monitor – Kennzahlen folgen in einer späteren Phase";
|