Uptime status page for Schulportal Hessen. A Dart process logs a liblanis test-login every minute, stores response times in SQLite (2-year retention), and serves a statically built Vue page plus a JSON API from one HTTP server.
See docs/API.md for endpoints, cache headers, and the Cloudflare Cache Rule.
cd frontend && npm ci && npm run build && cd ..
export LANIS_SCHOOL_ID=5151
export LANIS_USERNAME=...
export LANIS_PASSWORD=...
dart pub get
dart run bin/server.dartOpen http://127.0.0.1:8080.
Fixture mode (no live SPH / schulferien-api.de calls):
STATUSMONITOR_MODE=fixture STATUSMONITOR_NOW=1784116800 dart run bin/server.dartRegenerate committed fake series:
dart run tool/generate_fixtures.dartdart analyze
dart test
cd frontend && npm ci && npm run build
STATUSMONITOR_MODE=fixture STATUSMONITOR_NOW=1784116800 \
STATUSMONITOR_STATIC_DIR=frontend/dist dart run bin/server.dart
cd frontend && npx playwright install --with-deps && npm run test:e2edocker build -t statusmonitor .
docker run --rm -p 8080:8080 \
-e LANIS_SCHOOL_ID \
-e LANIS_USERNAME \
-e LANIS_PASSWORD \
-v statusmonitor-data:/data \
statusmonitorExample docker-compose.yml:
services:
statusmonitor:
image: ghcr.io/lanis-mobile/statusmonitor:v1.0.0
# or build locally: build: .
ports:
- "8080:8080"
environment:
LANIS_SCHOOL_ID: "5151"
LANIS_USERNAME: "${LANIS_USERNAME}"
LANIS_PASSWORD: "${LANIS_PASSWORD}"
volumes:
- statusmonitor-data:/data
restart: unless-stopped
volumes:
statusmonitor-data:Put credentials in a .env file next to docker-compose.yml:
LANIS_USERNAME=your-monitor-user
LANIS_PASSWORD=your-monitor-passwordImages are published to ghcr.io/lanis-mobile/statusmonitor when a GitHub release is created (tagged with the release name, e.g. v1.0.0).