Initial public release — Inspector v0.7.0

Docker-watchdog with per-container restart rules, Gotify/Pushover
notifications, and an embedded dashboard + web settings page.

See README.md for an overview and INSTALL.md for the Docker quickstart.
This commit is contained in:
Europium 63 committed 2026-10-26 15:44:55 -07:00
commit ea1103f52b
35 files changed
+5579

No files matched your search

+137
View File
@@ -0,0 +1,137 @@
# Inspector example configuration.
# Copy to config.yml, edit, and mount into the container at /app/config.yml.
inspector:
interval_seconds: 60
log_level: INFO
dry_run: false
log_dir: /app/logs
log_filename: inspector.log
log_retention_days: 30
heartbeat: false
notifications:
# Gotify: https://gotify.net
gotify:
enabled: false
url: ""
token: ""
priority: 5
# Pushover: https://pushover.net
# Independent of Gotify — enable either, both, or neither. If both are
# enabled, every alert is sent to both. Inspector's priority is an
# integer on a Gotify-style scale (default 5) and is mapped to
# Pushover's -2..2 range at send time: <=2 -> -1, 3..4 -> 0,
# 5..6 -> 1, >=7 -> 2.
pushover:
enabled: false
token: "" # Pushover application API token
user_key: "" # Pushover user or group key
priority: 5
device: "" # optional target device; blank = all devices
sound: "" # optional sound name; blank = user default
# Persist a durable per-container event history to a local SQLite DB.
# Enables the /events page and the Health summary digest.
database:
enabled: false
path: /app/data/events.db
retention_days: 30
# Periodic digest of per-container events, delivered through the enabled
# notification channels. Requires database.enabled: true to have data.
health_summary:
enabled: false
interval_hours: 24
priority: 3
# Recurring daily maintenance window. Containers that opt in with
# `maintenance_window: true` are not acted on during this window.
maintenance:
enabled: false
start: "00:00"
end: "06:00"
dir: /app/data/maintenance
max_hours: 8
# Manual notification muting per container (toggled from the dashboard).
notification_mute:
enabled: false
dir: /app/data/muted
default_hours: 12
# Embedded web dashboard. Enable with a non-empty password.
# Visit http://<host>:<port>/ for status, /events for history,
# /settings to edit this file from the browser.
dashboard:
enabled: false
host: 0.0.0.0
port: 8080
username: admin
password: ""
# Optional external integrations.
integrations:
# Uptime Kuma: optionally use a public status page as an extra
# reachability check per container.
uptime_kuma:
enabled: false
url: "https://status.example.com"
status_page_slug: "default"
# Portainer API integration: used by the advanced recovery actions
# `portainer_stack_redeploy` and `restart_then_redeploy`, which can
# recover containers whose network namespace is tied to a VPN sidecar.
# Leave disabled unless you need it.
#
# Token options (pick one per environment):
# api_token_env: "ENV_VAR_NAME" — reads token from that env var at
# runtime (preferred; not stored in config)
# api_token: "ptr_..." — embed token directly in this file
portainer:
enabled: false
default_environment: local_docker
stack_redeploy_cooldown_seconds: 300
post_redeploy_wait_seconds: 90
environments:
local_docker:
base_url: "http://portainer.example.local:9000"
api_token_env: "PORTAINER_API_TOKEN"
endpoint_id: 1
verify_ssl: false
containers:
# Minimal entry: Inspector only acts on containers listed here.
# Each key is the Docker container name on your host.
example-web:
enabled: true
max_error_count: 5
cooldown_seconds: 300
grace_period_seconds: 120
max_restarts_per_hour: 3
restart_on:
- UNHEALTHY
- NOT RUNNING
- ERROR
# Example with an opt-in HTTP reachability check. Useful when Docker
# reports a container as healthy but it's not actually serving
# requests (common with VPN-routed containers whose tunnel drops).
example-api:
enabled: true
max_error_count: 5
cooldown_seconds: 300
grace_period_seconds: 120
max_restarts_per_hour: 3
color: "#60a5fa"
restart_on:
- UNHEALTHY
- NOT RUNNING
- ERROR
- UNREACHABLE
http_check:
enabled: true
url: "http://example-api:8080/health"
timeout_seconds: 5
expected_status: 200