Files

167 lines
8.1 KiB
HTML

<!DOCTYPE html>
<html lang="da">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SuWiMo Documentation</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f8f9fa;
color: #333;
line-height: 1.6;
}
.container {
width: 80%;
max-width: 1000px;
margin: auto;
padding: 20px;
}
h1, h2, h3 {
color: #0056b3;
}
.section {
margin-bottom: 40px;
}
.highlight {
background-color: #e7f1ff;
padding: 10px;
border-left: 4px solid #0056b3;
margin-top: 20px;
}
.footer {
text-align: center;
padding: 20px;
border-top: 1px solid #ddd;
margin-top: 40px;
color: #777;
}
.token-logo {
width: 100px;
height: 100px;
}
pre, code {
background: #f4f4f4;
border-radius: 4px;
padding: 2px 6px;
}
pre {
padding: 10px;
overflow-x: auto;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ccc;
padding: 6px;
text-align: left;
}
ul, ol {
margin-left: 1.2em;
}
</style>
</head>
<body>
<div class="container">
<h1>SuWiMo Documentation</h1>
<p>#<center><H1>SuWiMo<br>Documentation</H1></center></p><p><strong>Indholdsfortegnelse:</strong>
<!-- TOC -->
* [1. Introduktion og Formål](#1-introduktion-og-formål)
* [2. Arkitektur og Overordnet Design](#2-arkitektur-og-overordnet-design)
* [2.1 Central Hub (SuWiMoHub)](#21-central-hub-suwimohub)
* [2.2 Plugin-baseret Design](#22-plugin-baseret-design)
* [3. Sensorer](#3-sensorer)
* [3.1 Sensorinterface](#31-sensorinterface)
* [3.2 Statusniveauer](#32-statusniveauer)
* [3.3 Passiv Sensorlogik](#33-passiv-sensorlogik)
* [4. Hierarkisk Struktur (Træstruktur)](#4-hierarkisk-struktur-træstruktur)
* [4.1 Dynamisk Træ via Konfiguration](#41-dynamisk-træ-via-konfiguration)
* [4.2 Statuspropagering](#42-statuspropagering)
* [5. Notifikationssystem og Logging](#5-notifikationssystem-og-logging)
* [5.1 Notifier Interface](#51-notifier-interface)
* [5.2 Historik og Logging](#52-historik-og-logging)
* [6. Distribution og Decentralisering](#6-distribution-og-decentralisering)
* [6.1 AssetAZ Observables](#61-assetaz-observables)
* [6.2 Distribuerede Hubs](#62-distribuerede-hubs)
* [7. Brugsscenarier og Eksempler](#7-brugsscenarier-og-eksempler)
* [8. Fremtidige Funktioner / TODO](#8-fremtidige-funktioner--todo)
<!-- TOC --></p><p><h2>1. Introduktion og Formål</h2>
SuWiMo (Surveillance Without Moving) er et system udviklet til enkel og effektiv statusovervågning af mange uafhængige
sensorer organiseret i en hierarkisk træstruktur. Formålet med SuWiMo er at give et hurtigt, visuelt overblik over
systemets tilstand, hvor status let kan aflæses som grøn (OK), gul (advarsel) eller rød (kritisk fejl).</p><p>SuWiMo fokuserer på tillidsvalidering og identificering af afvigelser i realtid, snarere end detaljeret monitorering
eller datalogging som traditionelle overvågningssystemer.</p><p><h2>2. Arkitektur og Overordnet Design</h2>
<h3>2.1 Central Hub (SuWiMoHub)</h3>
SuWiMoHub fungerer som den centrale orchestrator, der står for al polling, statusvurdering og statuspropagering i
træstrukturen. Hubben håndterer ikke selv sensorlogik, men trækker på plugins via interfaces.
<ul><ul><li>Centraliseret styring af polling-interval.</li>
<li>Indlæsning af sensor- og notifier-plugins.</li>
<li>Dynamisk opbygning og opdatering af status-træet.</li></p><p><h3>2.2 Plugin-baseret Design</h3>
SuWiMo benytter en modulær plugin-arkitektur, hvor forskellige typer af plugins implementerer specifikke interfaces
efter deres funktion:
<li><strong>Sensor-plugins</strong> implementerer sensorinterface til overvågning og statusrapportering.</li>
<li><strong>Notifier-plugins</strong> implementerer notifierinterface til at sende notifikationer ved statusændringer.</li>
<li><strong>Logger-plugins</strong> implementerer logningsinterface til historisk registrering af statusændringer.</li></p><p>Disse plugins registreres og administreres af Nenjim-systemet, hvilket sikrer nem distribution, versionering og
udskiftelighed.</p><p><h2>3. Sensorer</h2>
<h3>3.1 Sensorinterface</h3>
Sensorer implementerer et simpelt, standardiseret interface:</p><pre><code class="java">public interface SuwimoSensor {
SensorStatus poll();
}</p><p>public class SensorStatus {
StatusLevel level; // GREEN, YELLOW, RED
String message; // Kort forklaring på tilstand
}
</code></pre><p><h3>3.2 Statusniveauer</h3>
<li><strong>Green</strong>: Normal drift.</li>
<li><strong>Yellow</strong>: Advarsel, kræver opmærksomhed.</li>
<li><strong>Red</strong>: Kritisk fejl, kræver øjeblikkelig handling.</li></p><p><h3>3.3 Passiv Sensorlogik</h3>
Sensorer kører ikke aktivt. De er passive komponenter, som kun evaluerer og returnerer deres status, når hubben
poller dem.</p><p><h2>4. Hierarkisk Struktur (Træstruktur)</h2>
<h3>4.1 Dynamisk Træ via Konfiguration</h3>
Træstrukturen defineres i en JSON-konfigurationsfil, hvor hver node har et unikt ID, et navn, en valgfri sensor og en
parent-reference. Eksempel:</p><pre><code class="json">[
{ "id": "internet", "name": "Internetforbindelse", "sensor": "PingGoogle", "parent": null },
{ "id": "zfs-check", "name": "ZFS array", "sensor": "ZfsStatus", "parent": "server01" },
{ "id": "server01", "name": "Serverrummet", "sensor": null, "parent": null }
]
</code></pre><p><h3>4.2 Statuspropagering</h3>
Den dårligste status blandt børn og egen sensor propagerer op gennem træet. Det gør det muligt at se den værste
tilstand hurtigt fra en node eller træets rod.</p><p><h2>5. Notifikationssystem og Logging</h2>
<h3>5.1 Notifier Interface</h3>
Notifikationskomponenter implementerer et interface, der reagerer på statusændringer:</p><pre><code class="java">public interface SuwimoNotifier {
void statusChanged(SensorEvent event);
}</p><p>public class SensorEvent {
String sensorId;
StatusLevel oldStatus;
StatusLevel newStatus;
String message;
ZonedDateTime timestamp;
}
</code></pre><p><h3>5.2 Historik og Logging</h3>
Historiske log-events registreres hver gang en sensor ændrer tilstand. Denne funktionalitet implementeres som et
separat plugin, der eksempelvis kan logge til fil, database eller anden ekstern tjeneste.</p><p><h2>6. Distribution og Decentralisering</h2>
<h3>6.1 AssetAZ Observables</h3>
SuWiMoHub eksponerer sin status som en AssetAZ Observable. Det gør det muligt for andre hubs eller AssetAZ-instanser
at abonnere på sensorstatus fra eksterne hubs.</p><p><h3>6.2 Distribuerede Hubs</h3>
Flere SuWiMoHubs kan installeres decentralt, tæt på de ressourcer de overvåger, og udveksle sensorstatus via AssetAZ's
P2P-netværk. Dette sikrer effektiv isolation af fejl og lokal robusthed.</p><p><h2>7. Brugsscenarier og Eksempler</h2>
Eksempler på anvendelser af SuWiMo:
<li>Overvågning af servermiljøer (CPU, RAM, ZFS arrays)</li>
<li>Netværksstatus (Internet-ping, DNS-opløsning)</li>
<li>Overvågning af applikationstilgængelighed og integritet (HTTP-checks med checksum)</li>
<li>Husovervågning (temperatur, dørsensorer, strøm)</li></p><p><h2>8. Fremtidige Funktioner / TODO</h2>
<li>Implementering af GUI med træstruktur (træk-og-slip sensororganisering)</li>
<li>Avanceret historikvisning (grafer og mønstergenkendelse)</li>
<li>Yderligere notifier-plugins (push-notifikationer, SMS, Discord, syslog)</li>
<li>Avancerede permissions og adgangskontrol</li>
<li>Automatisk timeout-tilstand (sensor bliver rød efter manglende respons)</li>
</ul></ul></p>
<div class="footer">
<p>Part of the r35157 project. See also AssetAZ, Nenjim, Evelyn.</p>
</div>
</div>
</body>
</html>