Skip to main content

max / makenotwork

3.7 KB · 73 lines History Blame Raw
1 # ops-viewer: which daemons to watch.
2 #
3 # Install at ~/.config/ops-viewer/viewer.toml, or pass a path as the first
4 # argument, or set $OPS_VIEWER_CONFIG.
5 #
6 # Adding a service is an edit to this file and nothing else. The viewer knows
7 # nothing about tiers, gates, apps or targets; it renders whatever the source
8 # emits at GET /status.json. A new daemon gets a UI by emitting the payload.
9 #
10 # The viewer is read-only until a source sets allow_actions = true. A source
11 # with it off still shows the actions its nodes declare; it just refuses to
12 # fire them. With it on, Enter on a node opens a picker of that node's actions;
13 # a plain action fires, a confirm action asks for 'y', and a danger action
14 # (sando's rollback-b) asks you to type its key. This keeps a viewer that is
15 # merely pointed at a daemon from ever moving it by accident.
16
17 # Age past which a source's answer stops counting as current, for any source
18 # that does not set its own. A source that answers with something hours old is
19 # reported as degraded no matter how green its contents: the failure this
20 # whole surface exists to catch is a check that kept saying "ok" about a
21 # snapshot nobody had refreshed in forty days.
22 stale_after_secs = 60
23
24 # Each URL below is the address that daemon's own deploy example binds, which is
25 # the file to check when a source reads as unreachable. A daemon bound to
26 # loopback is only visible to a viewer on the same host.
27 #
28 # A tailnet bind is necessary but not sufficient for a viewer on another machine:
29 # the tailnet ACL decides separately whether that machine may open the port. As
30 # of 2026-07-29 the ACL is one-directional between the user-owned hosts and the
31 # tagged ones, so a viewer on astra cannot reach fw13's daemons at any port even
32 # though both sit on the tailnet. Check the ACL, not just `listen`, when a source
33 # reads unreachable from one host and fine from another.
34 [[source]]
35 name = "sando"
36 # Matches `listen` in sando/deploy/sando-daemon.toml.example: fw13's tailnet
37 # address, deliberately not 0.0.0.0, and reachable from fw13 itself.
38 url = "http://100.103.89.95:7766"
39 # Sando gates its reads, so a token is required. The token is NAMED here, never
40 # pasted: this file describes topology and has every reason to be readable,
41 # while sandod already takes the same value from its environment.
42 token_env = "SANDO_API_TOKEN"
43 poll_secs = 5
44 # Sando declares promote and rollback actions that move production. Leave this
45 # off to watch read-only; turn it on deliberately to drive deploys from here.
46 # allow_actions = true
47
48 [[source]]
49 name = "bento"
50 # Matches `listen` in bento/deploy/bento-daemon.toml.example. Loopback, so this
51 # source only works for a viewer running on the same host as bentod. A viewer
52 # elsewhere needs bentod moved to its tailnet address, which turns its auth on.
53 url = "http://127.0.0.1:8765"
54 # Bento leaves its reads open, so no token is needed. Set token_env anyway if
55 # that ever changes; an unset variable is treated as no token.
56 poll_secs = 10
57
58 # PoM polls its own targets on a slower cycle, so hold it to a slower staleness
59 # limit rather than flagging it degraded between its own checks. Each target PoM
60 # watches is a node; the rollup shows the worst of them. PoM gates /status.json
61 # behind the same bearer token as its /api/* reads, so name the token here — it
62 # is the value in pom's serve.api_token, supplied to the viewer via the
63 # environment, never pasted into this file.
64 [[source]]
65 name = "pom"
66 # PoM listens on 9100, never 9000, and there is no host named "pom" to resolve.
67 # Point this at the instance you want: astra's tailnet address below, or
68 # 127.0.0.1:9100 for a pom running on this machine. See pom/deploy/pom-*.toml.
69 url = "http://100.106.221.39:9100"
70 token_env = "POM_API_TOKEN"
71 poll_secs = 30
72 stale_after_secs = 600
73