No description
  • Rust 67.8%
  • JavaScript 25.7%
  • Shell 4.6%
  • Dockerfile 0.8%
  • Awk 0.7%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
wuast94 cf8b27d0b6
Some checks failed
Release / Check if release needed (push) Successful in 24s
Release / Build (push) Failing after 9m36s
Release / Release (push) Has been skipped
feat(ci): separate PR verification from release publication and reuse daemon compiler caches
2026-10-16 20:53:40 +02:00
.cargo perf: buffer Linux links in RAM and reduce test debug data 2026-10-14 22:41:10 +02:00
.forgejo/workflows feat(ci): separate PR verification from release publication and reuse daemon compiler caches 2026-10-16 20:53:40 +02:00
.githooks feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
assets feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
docs feat(ci): separate PR verification from release publication and reuse daemon compiler caches 2026-10-16 20:53:40 +02:00
examples feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
scripts feat(ci): separate PR verification from release publication and reuse daemon compiler caches 2026-10-16 20:53:40 +02:00
src chore: remove completed legacy data conversion [skip ci] 2026-10-12 11:20:03 +02:00
tests chore: remove completed legacy data conversion [skip ci] 2026-10-12 11:20:03 +02:00
vendor/chromey chore(migration): add verified one-time legacy worker handoff 2026-10-11 23:02:19 +02:00
.dockerignore docs: complete verified Rust migration and remove unused remnants [skip ci] 2026-10-12 04:34:19 +02:00
.gitattributes chore: preserve original vendored license bytes [skip ci] 2026-10-11 23:01:13 +02:00
.gitignore docs: complete verified Rust migration and remove unused remnants [skip ci] 2026-10-12 04:34:19 +02:00
.updatarr.yaml docs: complete verified Rust migration and remove unused remnants [skip ci] 2026-10-12 04:34:19 +02:00
AGENTS.md feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
build.rs feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
Cargo.lock feat(ci): separate PR verification from release publication and reuse daemon compiler caches 2026-10-16 20:53:40 +02:00
Cargo.toml perf: buffer Linux links in RAM and reduce test debug data 2026-10-14 22:41:10 +02:00
CLAUDE.md feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
cliff.toml feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
deny.toml feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
Dockerfile feat(ci): separate PR verification from release publication and reuse daemon compiler caches 2026-10-16 20:53:40 +02:00
GEMINI.md feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
Justfile feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
README.md chore: remove completed legacy data conversion [skip ci] 2026-10-12 11:20:03 +02:00
rust-toolchain.toml feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00
RUST_REBUILD.md feat: migrate Deltamon monitoring and shared UI to Rust 2026-10-11 23:00:19 +02:00

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.