- Rust 67.8%
- JavaScript 25.7%
- Shell 4.6%
- Dockerfile 0.8%
- Awk 0.7%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .cargo | ||
| .forgejo/workflows | ||
| .githooks | ||
| assets | ||
| docs | ||
| examples | ||
| scripts | ||
| src | ||
| tests | ||
| vendor/chromey | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .updatarr.yaml | ||
| AGENTS.md | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| cliff.toml | ||
| deny.toml | ||
| Dockerfile | ||
| GEMINI.md | ||
| Justfile | ||
| README.md | ||
| rust-toolchain.toml | ||
| RUST_REBUILD.md | ||
Deltamon
Deltamon überwacht JavaScript-gerenderte Webseiten und RSS-/Atom-Feeds. CSS-Auswahl mit interaktivem visuellem Selektor, geordnete ECMAScript-Regex-Regeln, manueller Check, Zeitplanung, CSV-Import, Bulkaktionen und Historie gehören zur App. Änderungen können HTTP-JSON-Webhooks oder Matrix-Nachrichten auslösen. Die Rust-App verwendet Axum/Tokio, die veröffentlichte wuast-ui-Basis und SeaORM 2.x mit nativen PostgreSQL-Migrationen.
Betrieb
DATABASE_URL ist erforderlich. Lokaler Chromium ist der Standard; PUPPETEER_WS_ENDPOINT verbindet optional einen vorhandenen Browser. Beide Modi führen JavaScript aus. Die App schließt beim externen Anschluss ausschließlich ihre eigenen Seiten und lässt den Browser weiterlaufen.
| Variable | Default / Bedeutung |
|---|---|
HOST, PORT |
0.0.0.0, 3000; IP-Adresse und Port, 0 wählt einen freien Port |
DATABASE_URL |
Erforderliche eigene PostgreSQL-Datenbank; native TLS-URL-Parameter werden unterstützt |
PGSSLROOTCERT, PGSSLMODE |
Native PostgreSQL-Driveroptionen für die gemountete private CA und Zertifikatsprüfung |
DATABASE_MAX_CONNECTIONS |
10; mindestens zwei Verbindungen für Workerleitung und Domain |
DEPENDENCY_TIMEOUT_SECS |
5; unerreichbare Datenbank, Poolaufnahme und Readiness-Prüfung |
MIGRATION_TIMEOUT_SECS |
120; ausschließlich konkurrierender Migrationslock |
PUPPETEER_WS_ENDPOINT |
Optionaler ws://-/wss://-Browseranschluss |
CHROMIUM_EXECUTABLE |
Image: /usr/lib/chromium/chromium; alternativ PUPPETEER_EXECUTABLE_PATH oder CHROME_EXECUTABLE |
SEED_DATA |
false; ausdrücklich aktivierbare ursprüngliche Beispieldaten, nur bei leerer App |
SHUTDOWN_TIMEOUT_SECS |
10; HTTP-/Worker-Drain nach Signal, danach tatsächliche Cleanup-Joins und Poolclose |
BLOCKING_CPU_CONCURRENCY, BLOCKING_IO_CONCURRENCY |
Veröffentlichte Common-Kapazitäten; Blocking-Vertrag |
LOG_LEVEL, LOG_FORMAT, RUST_LOG |
Common-Logging; JSON bei Pipes/Containern, sichere Request-/Jobdiagnostik |
Checks und Zustellabsichten werden dauerhaft gespeichert. Pro Monitor läuft höchstens ein Check gleichzeitig. Check, Snapshot, Abschlusszeit und Benachrichtigungsauftrag committen atomar. Webmonitore melden den ersten Inhalt; RSS-Monitore bilden zunächst eine stille Baseline. Fehler ersetzen keine Baseline. HTTP-Versand mit verlorenem Ausgang bleibt uncertain und wird nicht blind wiederholt; Matrix verwendet eine stabile Transaktions-ID. Readiness und Shutdown folgen dem Runtimevertrag.
Das bestehende Imageziel ist harbor.wuastbude.de/webmon/deltamon. Die ausdrücklich genehmigte Deltamon-Runtime bleibt scratch, Nonroot und mit read-only Root betreibbar. Sie enthält den gepinnten Chromium und ausschließlich seine erforderlichen Bibliotheken, Fonts und Browserressourcen. /tmp muss beschreibbar sein. Probes erfolgen per HTTP; es gibt keine Runtime-Shell oder Package-Manager.
Entwicklung und Prüfung
Rustup mit Toolchain, just, Node, PostgreSQL-18-kompatible psql/pg_dump/pg_restore und Docker sind erforderlich. Browserwerkzeuge sind digest-gepinnt. Die vollständige Suite verwendet ausschließlich die Cargo-Produktionsdefaults und isolierte Testdatenbanken; normale App-URLs werden nie als Testziel verwendet.
just setup
DATABASE_URL='postgres://user:password@localhost/deltamon' just run
just fmt
just gate
just push
just gate prüft Formatierung, striktes Clippy, Rust-/Tooltests, echten nativen Datenrestore, native UI-Abläufe mit beiden Browsermodi, Schema, Advisories und Dependency-Nutzung. TEST_DATABASE_URL kann ausdrücklich einen dedizierten Testdienst vorgeben; sonst startet die Suite den kanonischen PostgreSQL-Container. Der Testbenutzer benötigt CREATE/DROP DATABASE. BROWSER_EXECUTABLE kann für lokale Browserwerkzeuge einen vorhandenen Chromium bestimmen.
Gemeinsamer S3-Compiler- und Docker-Layercache sind verbindlich. just push [Git-Argumente...] veröffentlicht und entfernt nach erfolgreichem tatsächlichem Push ausschließlich das eigene target/. Externe Caches und Anwendungsdaten bleiben erhalten. Cachevertrag, Agentenregeln.
HTTP und UI
| Pfade | Funktion |
|---|---|
/, /monitors/new, /monitors/{id}, /monitors/import |
Monitorliste, Editor, visueller Selektor, Bulk-/Importaktionen |
/monitors/{id}/history, /regexes/*, /webhooks/* |
Historie, Regex- und Webhookverwaltung |
/api/monitors/*, /api/regexes/*, /api/webhooks/* |
Native Verwaltungs-/Check-/Test-APIs |
/api/fetch-page, /api/tools/fetch-content, /api/rss-preview |
Gerenderte sichere Selektorvorschau, Extraktion und Feedvorschau |
/healthz, /ready, /api/health, /api/ready |
Gemeinsame Liveness/Readiness und bestehende Probe-Aliase |
/metrics, /api/metrics, /api/v1/status |
Common-HTTP-/Jobmetriken, native Prozessinformationen und Version |
Fehler liefern RFC9457-Problem-Details; Credentials und fremde Rohfehler erscheinen nicht in Logs. Die Selektorvorschau läuft in einem Sandbox-Iframe mit opaker Origin und prüft Nachrichtenquelle sowie Schema. App-Funktionen und API-Verträge stehen vollständig im Inventar.
Daten und Veröffentlichung
Die abgeschlossene Produktionsmigration ist im Migrationsnachweis dokumentiert. Die App verwendet ausschließlich ihre native PostgreSQL-Datenbank mit versionierten SeaORM-Migrationen. Der einmalige Alt-Datenimporter wurde nach der Umstellung entfernt; CSV-Monitorimport bleibt eine reguläre Appfunktion. Daten-/Restorevertrag.
Native Forgejo-CI prüft die Produktionskonfiguration und das tatsächliche Image mit beiden Browsermodi, PostgreSQL, UI, Nonroot/read-only und Shutdown. Release-Tags werden erst nach erfolgreicher Kandidatenabnahme und veröffentlichter, zurückgeprüfter unsignierter Harbor-SPDX-SBOM gesetzt. Die Produktionsumschaltung erfolgt ausschließlich über das bestehende GitOps-Deployment.