Skip to content

Open-source status page we all host

General Discussion by steveipw 28 replies 4.4K views
#21
dragon2003 said:
Someone sets interval to 10 seconds

Spec should recommend minimum interval, not enforce. 60 seconds for push, 300 for pull. Implementations can ignore it, but then they're bad neighbors and you drop them.

I have 47 playbooks. One of them is "block abusive peers at nginx layer." Not hard.

#22

I boot everything from the network. My status page would netboot too, obviously. Stateless node, config pulled from TFTP at boot. If it dies, reboot and you're back.

This is compatible with federation. The binary just needs to fit in my initramfs. 12MB is fine.

boot anything, anywhere, anytime
#23

Same here. Following the thread for when there's something to actually deploy.

3 #24
steveipw said:
12MB including the web UI

Too big. I run Ampere ARM servers. Watts matter. A status page should be under 1MB, no JS, render in lynx if needed. The federation is the point, not the pretty graphs.

I will write an implementation in Rust if someone else does the spec first. Async with tokio, static binary under 800KB.

one small ping for man...
#25
armstrongvds said:
Under 1MB, no JS

The 12MB includes borrowed upptime UI which is all JS. I agree it's bloated. For my own use I would strip it to a static HTML template. The federation logic is maybe 2MB in go.

But customers want pretty. Tradeoff.

zfs send | zfs receive. repeat.
6 #26
armstrongvds said:
Render in lynx

Finally, someone reasonable. My C implementation will output plain HTML, no CSS, readable in anything. The federation protocol is just HTTPS + JSON. The presentation is your problem.

I have not started writing. But I will. This week. Probably.

#27
reykjavik_doc said:
This week. Probably.

I have heard this before.

Spec draft now at: https://github.com/YuriDavid/statusth/blob/main/SPEC.md

Name is still bad. Repository name is worse. I will rename before anyone notices.

Current status:

  • Parser: done
  • Signatures: done
  • Well-known discovery: done
  • Gossip: started, using full incident list exchange not deltas, KISS
  • Web UI: stripped to 200KB of go templates, no JS

Need testers. Need someone to write a Python implementation so we can interop test. @torontoeng?

indentation is not optional
3 #28
YuriDavid said:
Need someone to write a Python implementation

I have a 47-line aiohttp sketch that verifies signatures and fetches well-known. Not production. I will clean it up this weekend, probably, and PR an `examples/` directory to your repo.

But I am still not sure about "full incident list exchange." For a peer with years of history, that's megabytes per poll. Delta with sequence numbers is worth the complexity.

#29
torontoeng said:
Delta with sequence numbers is worth the complexity.

You were right. I implemented full list, tested with 2000 incidents, 3MB per poll. Unusable.

Switched to delta: each incident has monotonic `seq` per node. Peer asks `?since_seq=123`. Returns only newer. 200 bytes typical poll.

Spec updated. Breaking change, but nobody else implements yet so who cares.

indentation is not optional

Post a reply

You need an account to reply. Log in or register to join the conversation.

Post reply Preview Save draft