English | Deutsch
Ein professionelles, Open-Source Monitoring-Tool zur kontinuierlichen Überwachung deiner Internet-Qualität – mit PDF-Berichten für Provider-Beschwerden, IP-Tracking und DNS-Benchmark.
💡 Warum SignalReport?
"Mein Internet ist langsam!" reicht bei Providern nicht. Mit SignalReport lieferst du nachweisbare, quantifizierte Belege – nicht nur Bauchgefühl.
📜 Projektgeschichte
SignalReport entstand zwischen Jänner und April 2026 als Abschlussprojekt des Diplomlehrgangs "Software Developer:in" am WIFI Wien (Kurs 18195015) und wird seither als persönliches Open-Source-Projekt aktiv weiterentwickelt. Wer den exakten Stand zum Zeitpunkt der Diplomprüfung begutachten möchte, findet diesen als ReleaseV1.
| Kategorie | Funktionen |
|---|---|
| Monitoring | 🔁 Kontinuierliche Messung (Ping/DNS/HTTP + Gateways) ⏱️ Konfigurierbares Intervall (5s–1h, Standard 30s) ⏸️ Maintenance-Fenster (Router-Updates) 🌐 IP-Tracking (externe IP-Änderungen erkennen) |
| Störungs-Lokalisierung & Zuverlässigkeit | 🛰️ Router vs. Internet-Gateway vs. Provider lokalisieren (Traceroute-Gateway-Kette) 🐳 virtuelle-Gateway-Erkennung in VM/Docker 📈 Verfügbarkeit, Abdeckung, MTBF & MTTR (lückenbewusst) 📉 aggregierte Verbindungsausfälle, einzeln aus der Wertung nehmbar |
| Dienst-Erreichbarkeit | 🚫 Erkennt, ob Dienste (Facebook, Instagram, X, YouTube, WhatsApp, …) erreichbar oder gesperrt sind — unterscheidet DNS- / TCP- / SNI- / Sperrseiten-Filterung 🕒 Eigener langsamer Takt (Standard 6 h), Leitungs-gated, standardmäßig aus 📅 Sperr-/Störungs-Timeline je Dienst im PDF-Bericht |
| Visualisierung | 📊 Live-Charts mit Chart.js 📋 Mess-Tabelle pro Messzyklus (aufklappbar) 🌡️ Heatmap pro Stunde 🖥️ Web-Oberfläche (responsiv) 🔔 Browser-Push bei Ausfällen/Hoher Latenz |
| Berichte | 📄 PDF-Export (24h/7 Tage/12 Monate) 📈 3 Charts (PING/DNS/HTTP) mit Ziel-Änderungs-Markierung 🏆 Top 10 schlechteste Messungen 📤 CSV-Export (vollständig oder gefiltert) |
| Sicherheit | 🔐 Setup-Wizard (Web-basiert, keine CLI) 🔑 Challenge-Response-Authentifizierung (SHA-256) 👥 Admin/User-Rollen mit Session-Management 🛡️ Passwort wird nie im Klartext übertragen |
| Datensicherheit | 🛟 Twin-Datenbank (synchrone Spiegelung) 🔄 Auto-Recovery beim Start (Korruption → Rekonstruktion aus intakter Kopie) ⚡ Synchrone Schreibvorgänge ( WRITE_DELAY=0)🛡️ Schutz vor Crash durch Update-Reboots / Stromausfälle |
| Mehrsprachigkeit | 🌐 9 Sprachen: Deutsch, English, Français, Italiano, Español, Português, Türkçe, Polski, Українська 🔤 Gilt für Web-UI, PDF-Berichte und CSV-Exporte 🎛️ Sprachwahl im Setup-Wizard und in den Einstellungen 📂 Erweiterbar ohne Neukompilieren: eigene Sprachdatei in ./lang/ ablegen |
| Konfiguration | ⚙️ Dynamische Messziele (Ping/DNS/HTTP) 🌍 DNS-Benchmark (Server weltweit) 👤 Benutzer-Info (Provider/Kundennummer für Berichte) |
- Java 21 oder höher (Download)
- (Optional) Maven für Build aus Quelle
# 1. JAR herunterladen (oder mit Maven bauen: mvn clean package)
java -jar signalreport.jar
# 2. Browser öffnen
http://localhost:4567
# 3. Setup-Wizard durchlaufen (Admin-Passwort festlegen)✅ Fertig! Die Messung beginnt automatisch – standardmäßig alle 30 Sekunden werden Ping, DNS und HTTP (und ggf. die Gateways) getestet.
Für den Dauerbetrieb (auch ohne angemeldeten Benutzer) kann SignalReport als Hintergrund-Dienst installiert werden.
signalreport_windows.zipherunterladen und entpackeninstall.batmit Rechtsklick → "Als Administrator ausführen" starten- Das Skript installiert den Dienst, erstellt eine Desktop-Verknüpfung und richtet die Firewall ein
signalreport_mac-linux.zipherunterladen und entpacken- Terminal öffnen und ausführen:
sudo bash install.sh - Der Dienst wird als systemd-Service (Linux) bzw. launchd-Service (macOS) eingerichtet
💡 Die
signalreport.jarmuss sich im selben Verzeichnis wie die Installations-Skripte befinden.
🔄 Installieren oder aktualisieren: Das Skript erkennt eine bestehende Installation und tauscht dann nur die JAR aus (Dienst stoppen → tauschen → starten) — deine Daten und
config.jsonbleiben erhalten. Zum Aktualisieren einfach die neuesignalreport.jarneben das Skript legen und es erneut ausführen.
- Windows:
uninstall.batRechtsklick → als Administrator ausführen - macOS/Linux:
sudo bash uninstall.sh(im Terminal)
Die Deinstallation fragt, was behalten werden soll: nichts, die Konfiguration (config.json), die Datenbank (deine gesammelten Messdaten) oder beides.
| Web-Oberfläche | PDF-Bericht (Auszug) | DNS-Benchmark |
|---|---|---|
![]() |
![]() |
![]() |
| Live-Charts, Statistiken, Einstellungen | Professioneller Bericht für Provider | Vergleich globaler DNS-Server |
Nach dem ersten Start wird config.json erstellt. Wichtige Einstellungen:
{
"language": "de",
"measurement": {
"intervalSeconds": 30,
"targets": {
"ping": "8.8.8.8",
"dns": "google.com",
"http": "https://example.com"
}
},
"maintenanceWindow": {
"enabled": true,
"startHour": 4,
"startMinute": 0,
"endHour": 4,
"endMinute": 10
},
"userInfo": {
"provider": "Oranga",
"customerId": "08154711",
"userName": "Matthias F."
}
}💡 Tipp: Änderungen über die Web-Oberfläche (Tab ⚙️ Einstellungen) werden sofort übernommen und persistiert!
Für die Störungs-Lokalisierung (eigener Router vs. Provider) ermittelt SignalReport beim Start per Traceroute den nächsten Router und das Gateway ins Internet. Läuft SignalReport in einer VM oder einem Container, kann der erkannte „Router" allerdings ein virtuelles NAT-Gerät sein statt der echten Hardware:
- Docker-Standard-Bridge (
172.17.0.0/16) wird automatisch übersprungen, sofern der echte Router als nächster Hop dahinter sichtbar ist. - VirtualBox-/QEMU-NAT (
10.0.2.0/24) sowie Docker-Bridges innerhalb eines Containers werden als virtuell erkannt → ein Warnhinweis erscheint im Tab ⚙️ Einstellungen unter Gateways. - VMware-NAT (
192.168.x.2) und ähnliche NATs in echten Heimnetz-Bereichen lassen sich per IP nicht von einem echten Router unterscheiden und werden bewusst nicht automatisch markiert (sonst Fehlalarme).
Lösung in solchen Fällen: im Tab ⚙️ Einstellungen unter Gateways die echte Router-IP manuell setzen, oder für das Internet-Gateway „nicht kontinuierlich pingen" aktivieren. Manuell gesetzte IPs lassen sich optional auch über einen IP-Wechsel hinweg beibehalten.
SignalReport ist vollständig mehrsprachig – Web-Oberfläche, PDF-Berichte und CSV-Exporte. Mitgeliefert werden 9 Sprachen:
🇩🇪 Deutsch · 🇬🇧 English · 🇫🇷 Français · 🇮🇹 Italiano · 🇪🇸 Español · 🇵🇹 Português · 🇹🇷 Türkçe · 🇵🇱 Polski · 🇺🇦 Українська
- Umstellen: im Setup-Wizard (vor der Passwortvergabe) oder jederzeit im Tab ⚙️ Einstellungen
- Standard: Neuinstallationen übernehmen die Systemsprache (sonst Englisch); bestehende Installationen bleiben auf Deutsch
- Eigene Sprache hinzufügen (ohne Neukompilieren): eine
<code>.json-Datei (z.B.nl.json) nach dem Vorbild vonde.jsonin einen Ordnerlang/neben dersignalreport.jarlegen – sie erscheint automatisch im Sprach-Dropdown - Unicode im PDF: Die DejaVu-Schrift ist eingebettet, daher werden auch Türkisch, Polnisch und kyrillische Schrift (Ukrainisch) korrekt dargestellt
Der 12-Monats-Bericht enthält:
- ✅ Deine Kundendaten (Name, Provider, Kundennummer)
- ✅ Host-Informationen (Hostname, Hash, IPs)
- ✅ 3 Charts mit roten Linien bei Ziel-Änderungen
- ✅ Chronologische Liste der gemessenen Ziele
- ✅ Top 10 schlechteste Messungen (mit Zeitstempel)
- ✅ Top 10 längste Verbindungsausfälle
- ✅ Gesamtanzahl der Ausfälle
📌 So nutzt du den Bericht:
- PDF mit "📄 PDF-Bericht (12 Monate)" generieren
- Als
signalreport-providername-beschwerde-2026-03-25.pdfspeichern- An Support-Mail anhängen mit Text:
"Anbei der technische Nachweis für wiederholte Verbindungsprobleme im Zeitraum XX bis YY. Bitte prüfen Sie die Leitung zu meinem Anschluss."
Eine kompakte Übersicht der Verzeichnisse und Klassen findest du in docs/ProjectStructure_de.md, die Architektur in docs/Architecture_de.md.
signalreport/
├── src/main/java/at/mafue/signalreport/
│ ├── SignalReportApp.java # Hauptklasse (Entry Point)
│ ├── ServiceReachabilityScheduler.java # Langsamer Dienst-Erreichbarkeits-Lauf + Leitungs-Gate
│ ├── config/ # Schlankes Config + eine Datei je Bereich (Measurement, Gateway, ServiceReachability, ServiceTarget, …)
│ ├── measurement/ # Measurer-Interface + Ping/Dns/Http, Measurement, DnsBenchmark
│ ├── network/ # GatewayDiscovery (Traceroute), ServiceReachabilityProbe, NetworkInfo, HostIdentifier
│ ├── storage/ # H2MeasurementRepository (Twin-DB) + DTOs (Statistics, ServiceCheck, IpChange, …)
│ ├── report/ # ReliabilityReport, ConnectivityAssessment, ServiceReachabilityAssessment/Report, PdfReportGenerator
│ ├── web/ # WebServer (Javalin-Orchestrator), SessionManager
│ │ ├── view/ # HtmlPageRenderer, SetupPageRenderer, LoginPageRenderer
│ │ └── api/ # 10 Routen-Registrare (Measurement, Reliability, ServiceReachability, Settings, …)
│ ├── i18n/ # I18n (9 Sprachen, erweiterbar)
│ └── notification/ # PushNotificationService
├── src/test/java/at/mafue/signalreport/ # 20 Testklassen, 156 Tests (spiegeln die Pakete oben)
├── src/main/resources/web/ # Statische Assets: app.css, app.js, Logos, Favicons
├── src/main/resources/lang/ # Sprachdateien (de, en, fr, it, es, pt, tr, pl, uk)
├── src/main/resources/fonts/ # DejaVu-Schriften für PDF (Unicode/Kyrillisch)
├── docs/
│ ├── diagrams/ # PlantUML-Diagramme (.puml + .png)
│ ├── latex/ # Vollständige LaTeX-Dokumentation
│ └── screenshots/ # UI-Screenshots
├── deployment/ # Installations-Skripte (Win/Linux/macOS)
├── config.json # Auto-generierte Konfiguration
├── data/ # H2-Twin-Datenbank: Primary + Shadow (gitignored)
│ └── quarantine/ # Defekte DB-Dateien zur Nachanalyse
├── pom.xml # Maven-Build-Konfiguration
└── README.md # Englische Nutzungsanleitung (diese: README_de.md)
- Vollständige LaTeX-Dokumentation als PDF:
signalreport-dokumentation.pdfEnthält UML-Diagramme, Architekturbeschreibung, Implementierungsdetails und Testbericht. - Architektur-Kurzübersicht:
docs/Architecture_de.md - Projektstruktur:
docs/ProjectStructure_de.md - UML-Diagramme: Alle 7 Diagramme als PNG und PlantUML in
docs/diagrams/:class-diagram.png– Klassenstrukturcomponent-diagram.png– Komponentenübersichtsequence-measurement.png– Messungsablaufsequence-pdf.png– PDF-Export-Prozessusecase-diagram.png– Use-Casesdeployment-diagram.png– Deployment-Szenarienstate-diagram-auth.png– Authentifizierungs-Zustände
- Challenge-Response Auth: Passwörter werden nie im Klartext übertragen – SHA-256 mit Einmal-Nonces
- Session-Management: 24h Session-Timeout, sichere Cookie-basierte Authentifizierung
- Authentifizierung: Für öffentliche IPs (z.B. NAS mit Port-Weiterleitung) unbedingt aktivieren (Tab 🔐 Sicherheit)
- Setup-Passwort: Admin-Passwort wird beim ersten Start festgelegt – niemals Standardwerte belassen!
- Datenbank: Alle Daten lokal gespeichert in einer crash-resistenten Twin-Datenbank (Primary + Shadow). Keine Cloud-Abhängigkeit, keine externen APIs (außer ipify.org für externe IP)
SignalReport ist Open Source! Du kannst:
- 🐛 Fehler melden (Issues)
- 💡 Neue Features vorschlagen
- 📝 Dokumentation verbessern
- 🌍 Übersetzungen beisteuern (eine neue
lang/<code>.jsonnach Vorbild vonde.json)
MIT License – siehe LICENSE Datei.
Frei nutzbar für private und kommerzielle Zwecke – mit Quellenangabe.
Dieses Projekt nutzt großartige Open-Source-Bibliotheken und Dienste:
Backend-Bibliotheken (Maven/Java):
- Javalin – Leichtgewichtiges Web-Framework
- H2 Database – Embedded SQL-Datenbank
- Jackson – JSON-Serialisierung (Config, API)
- OpenPDF – PDF-Erstellung
- JFreeChart – Chart-Generierung für PDF-Reports
- dnsjava – DNS-Queries für Benchmark
- SLF4J + Logback – Logging
- JUnit 5 – Test-Framework
Frontend (Browser):
- Chart.js – Live-Charts im Web-Interface (via CDN)
- Web Crypto API – Client-seitiges SHA-256 Hashing für Challenge-Response Auth
Schriften:
- DejaVu Fonts – Eingebettete Unicode-Schrift für PDF-Berichte (Latein, Latein-Erweitert, Kyrillisch)
Externe Dienste:
- ipify.org – Ermittlung der externen IP-Adresse
Build & Deployment:
- Apache Maven – Build-System
- Apache Commons Daemon – Service-Installation (procrun/jsvc)
Dokumentation & Entwicklung:
- PlantUML – UML-Diagramme
- LaTeX – Projektdokumentation
- EmojiTerra – Emoji-Übersicht
- StackOverflow – Fragen/Antworten-Plattform für Softwareentwickler
- Hitchhiker’s Guide to PlantUML – Nomen est omen
Außerdem gilt mein Dank:
- Christian Schäfer – Java-Lehrgang und Projekt-Coaching
- Serap Kadam – Unterstützung, Freundschaft, alles rund um Java
- [Angelika Winder] – Unterstützung in allen Lebenslagen (außer bei Java)
Bei Fragen zur Abschlussarbeit oder technischen Details gerne ein Issue auf GitHub eröffnen.
🌐 SignalReport
Entwickelt mit ❤️ für alle, die wissen wollen, wie stabil ihre Internet-Verbindung ist.



