Backfills knoebels."LZ_open_meteo_hourly" from 2024-05-15 (start of queue
collection) and keeps it current. Imperial units; timestamps stored as naive
America/New_York to line up with the rest of the knoebels schema.
- weather_logger.py: --backfill uses the ERA5 Archive API; default mode does a
self-healing recent sync via the Forecast API (past_days=7, upsert on conflict)
- docker-compose.yml: add `weather` oneshot service (also align scraper to its
live `oneshot` profile)
- systemd/knb-weather.{service,timer}: nox user timer, every 6h (linger enabled)
- queries/dm_knb_queue_weather.sql: dm_knb_queue_weather view joining the full
queue-time series to hourly weather (hour-bucketed), with a WMO code decode
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
1.5 KiB
YAML
60 lines
1.5 KiB
YAML
services:
|
|
scraper:
|
|
build: .
|
|
image: kuh-no-bowls:latest
|
|
container_name: kuh-no-bowls-scraper
|
|
profiles: ["oneshot"]
|
|
env_file: .env
|
|
environment:
|
|
LOG_PATH: /var/log/kuh-no-bowls/kuh-no-bowls.log
|
|
TZ: America/New_York
|
|
volumes:
|
|
- knb_logs:/var/log/kuh-no-bowls
|
|
networks:
|
|
- services_net
|
|
|
|
# Hourly Open-Meteo weather -> knoebels."LZ_open_meteo_hourly".
|
|
# Oneshot, run from cron. Default mode does the recent sync; pass --backfill
|
|
# once to load history: docker compose --profile oneshot run --rm weather --backfill
|
|
weather:
|
|
build: .
|
|
image: kuh-no-bowls:latest
|
|
container_name: kuh-no-bowls-weather
|
|
profiles: ["oneshot"]
|
|
entrypoint: ["python", "-u", "weather_logger.py"]
|
|
env_file: .env
|
|
environment:
|
|
LOG_PATH: /var/log/kuh-no-bowls/weather.log
|
|
TZ: America/New_York
|
|
volumes:
|
|
- knb_logs:/var/log/kuh-no-bowls
|
|
networks:
|
|
- services_net
|
|
|
|
dashboard:
|
|
build: .
|
|
image: kuh-no-bowls:latest
|
|
container_name: kuh-no-bowls-dashboard
|
|
restart: unless-stopped
|
|
env_file: .env
|
|
entrypoint: ["streamlit", "run", "app.py", "--server.port=8502", "--server.address=0.0.0.0"]
|
|
ports:
|
|
- "8502:8502"
|
|
volumes:
|
|
- ./app.py:/app/app.py:ro
|
|
- ./.streamlit:/app/.streamlit:ro
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://localhost:8502/_stcore/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
networks:
|
|
- services_net
|
|
|
|
volumes:
|
|
knb_logs:
|
|
|
|
networks:
|
|
services_net:
|
|
external: true
|