steveipw
Member
OP
- Joined:
- Jun 2024
- Posts:
- 163
- From:
- Denver, US
We all run status pages. UptimeRobot, self-hosted Cachet, whatever. But they're all islands. Customer sees my page green, your page green, never the pattern when Contabo has a core router issue affecting both of us.
Proposal: minimal federated status page protocol. Each of us hosts our own instance. Instances gossip incident state. User can view any instance and see composite status of all subscribed peers.
For that money you get:
- No central point of failure
- No single host seeing everyone else's data
- Network effect: more participants = better visibility
- Can still run independently if federation breaks
Hardware: anything. I run mine on auction server, Xeon E5-2680v4, 64GB, 4x 4TB HGST in RAIDZ2. Overkill but I had the drives.
Protocol sketch: JSON over HTTPS, signed updates, simple subscription model. Not blockchain, not activitypub, just status.
Who's in? I can draft spec this weekend if interest exists.
zfs send | zfs receive. repeat.
YuriDavid
Member
- Joined:
- May 2024
- Posts:
- 174
- From:
- Kyiv, Ukraine
---
- federation spec:
- minimal:
- MUST support HTTPS
- MUST sign all incident updates
- MUST tolerate 24h partition
- optional:
- push vs pull
- incident severity levels
- human-readable narrative field
- NOTE: I started implementation in go already
- WARNING: naming things is hard, currently calling it statusth
- implementation status:
- parser: done
- signature verification: done
- gossip: not started
- web ui: borrowing from upptime
- ---
- who else building:
- @torontoeng seems to have python sketch
- reykjavik_doc will write in c probably, actually docker is just not present
- steveipw has the hardware, does he have the code
- ---
- three implementations by end of month seems achievable
- interop test on my CloudCone VPS first
- NOTE: 1GB RAM enough for this, federation is light if you do not overengineer
indentation is not optional
YuriDavid
Member
- Joined:
- May 2024
- Posts:
- 174
- From:
- Kyiv, Ukraine
Your `statusth` name is terrible
Noted. Open to suggestions. `federated-status-protocol` is too long. `fsp` is taken by file servers. `stf` sounds like a disease.
Current go code is 400 lines. Parser handles my own YAML format because I hate JSON for config. Signature verification uses golang.org/x/crypto/ed25519 directly, no extra deps.
Gossip not started because I am deciding: do peers exchange full incident lists, or just deltas? Deltas need sequence numbers. Sequence numbers need consensus on ordering. This is how simple protocols die.
indentation is not optional
steveipw
Member
OP
- Joined:
- Jun 2024
- Posts:
- 163
- From:
- Denver, US
Static binary, config file, done.
This. My auction server runs Alpine, I compile static with musl. The whole thing is 12MB including the web UI borrowed from upptime (thanks @YuriDavid for admitting you borrowed too, I was going to).
On Contabo specifically: I have a VPS in their St. Louis DC and one in Nuremberg. When they had that routing issue last year I only knew because my own monitoring crossed paths with a friend's. Federation would have shown the pattern in minutes.
zfs send | zfs receive. repeat.