bingo: add a reachability monitor for the status page
datacenterbingo gets a public page showing whether each datacenter's network answers. The probing lives here, next to the schema and the admin, since the public site only has a read-only role. bin/monitor runs as a second container from the same image. Once a minute it opens one TCP connection to every active target (a handshake or a refusal both count as answered) and folds the results into 5-minute rows per datacenter, plus a per-bucket row for control hosts in Russia, so a lost vantage point isn't mistaken for dark sites. Rows are kept 30 days. Targets are managed at /admin/bingo/monitor; only hosts a public source ties to that one site belong there. Migration 017 also grants the new tables to the bingo role, so the public site can read them without a storage redeploy. Assisted-by: Claude:opus-5-5
This commit is contained in:
parent
e0038ef3a4
commit
0cc3e1dece
10 changed files with 415 additions and 1 deletions
|
|
@ -19,6 +19,25 @@ services:
|
|||
- "traefik.http.routers.asxpio.service=asxpio"
|
||||
- "traefik.http.services.asxpio.loadbalancer.server.port=3000"
|
||||
|
||||
# Reachability worker for datacenterbingo's status page (bin/monitor).
|
||||
# Same image; the deploy's sed sets both image lines.
|
||||
asxpio-monitor:
|
||||
image: asxpio:latest
|
||||
container_name: asxpio-monitor
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
command: ["ruby", "bin/monitor"]
|
||||
networks:
|
||||
- storage # postgres; not internal, so probes reach the internet
|
||||
mem_limit: 256m
|
||||
healthcheck:
|
||||
# The worker touches its heartbeat after every round (60 s).
|
||||
test: ["CMD", "ruby", "-e", "exit(Time.now - File.mtime('/tmp/monitor.heartbeat') < 300 ? 0 : 1)"]
|
||||
interval: 60s
|
||||
timeout: 10s
|
||||
start_period: 120s
|
||||
retries: 3
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue