Files
status-indicators/sites/ws/config.json
T
christianandClaude Opus 5.5 afd2758d87 PC set-up: one line per PC (/setup/<name>.ps1), the admin laptop always let in, and the admin check no longer breaks the script
- the inserted administrator check split the header comment, leaving '} for ... run ONCE' as code: WS and SC
  join.ps1 failed to parse (Windows' parser: Missing opening '(' after keyword 'for'); now after the whole line
- site.admin_ips / admin_keys (laptop 10.6.7.38, fixed in UniFi) go into every PC script's firewall rule and key
  files, and into the Mac join line, so running a set-up again never shuts the laptop out
- scripts verified by Windows' own PowerShell parser on the NA Lighting PC

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:29:36 -04:00

607 lines
15 KiB
JSON

{
"auto_fix": {
"after_seconds": 20,
"fixes": [
"superrack_ws_foh",
"x32edit_ws_foh",
"vista_ws_lights",
"ableton_ws_tracks",
"propresenter_ingest",
"midi_reconnect"
],
"max_tries": 2,
"pause_after_network_seconds": 60,
"restart_connections": true,
"retry_seconds": 90,
"windows": [
{
"days": [
"tue"
],
"end": "22:00",
"start": "14:00"
},
{
"days": [
"wed"
],
"end": "21:00",
"start": "09:00"
},
{
"days": [
"sun"
],
"end": "14:00",
"start": "05:00"
}
]
},
"companion": {
"host": "127.0.0.1",
"port": 8000
},
"debounce_seconds": 3,
"discover": {
"auto": true
},
"fixes": {
"ableton_ws_tracks": {
"host": "ws_tracks",
"kind": "ssh",
"label": "start Ableton on WS Tracks if it is not running",
"params": {
"app": "Ableton Live 11 Suite",
"host": "ws_tracks",
"restart": false,
"wait_seconds": 15
},
"run": "pgrep -xq Live || { L=$(ls -td ~/Library/Preferences/Ableton/Live*/ | head -1); S=$(grep -a 'info: Loading document \"' \"${L}Log.txt\" | grep -v '/Templates/' | tail -1 | sed -E 's/^.*Loading document \"(.*)\"[^\"]*$/\\1/'); if [ -n \"$S\" ] && [ -f \"$S\" ]; then open -a 'Ableton Live 11 Suite' \"$S\"; else open -a 'Ableton Live 11 Suite'; fi; }",
"short": "ABLETON",
"template": "ableton"
},
"midi_reconnect": {
"kind": "midi_connect",
"label": "reconnect the peer to the network MIDI session it dropped out of (like Connect in Audio MIDI Setup), at its wired address",
"params": {},
"short": "RECONNECT",
"template": "midi_connect"
},
"propresenter_ingest": {
"kind": "local",
"label": "start ProPresenter on this Mac if it is not running",
"params": {
"app": "$APP",
"host": "ingest",
"process": "ProPresenter",
"newest_of": "/Applications/ProPresenter*.app"
},
"short": "PROP",
"template": "mac_start",
"run": "pgrep -xq ProPresenter || { APP=$(for a in /Applications/ProPresenter*.app; do [ -d \"$a\" ] && printf '%s|%s\\n' \"$(defaults read \"$a/Contents/Info\" CFBundleShortVersionString 2>/dev/null)\" \"$a\"; done | sort -t '|' -k1,1V | tail -1 | cut -d '|' -f2-); open \"$APP\"; }"
},
"restart_ableton_ws_tracks": {
"host": "ws_tracks",
"kind": "ssh",
"label": "restart Ableton on WS Tracks (closes it first)",
"params": {
"app": "Ableton Live 11 Suite",
"host": "ws_tracks",
"restart": true,
"wait_seconds": 15
},
"run": "L=$(ls -td ~/Library/Preferences/Ableton/Live*/ | head -1); S=$(grep -a 'info: Loading document \"' \"${L}Log.txt\" | grep -v '/Templates/' | tail -1 | sed -E 's/^.*Loading document \"(.*)\"[^\"]*$/\\1/'); pkill -TERM -x Live; i=0; while pgrep -xq Live && [ $i -lt 30 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq Live && pkill -KILL -x Live; sleep 1; if [ -n \"$S\" ] && [ -f \"$S\" ]; then open -a 'Ableton Live 11 Suite' \"$S\"; else open -a 'Ableton Live 11 Suite'; fi",
"short": "ABLETON",
"template": "ableton"
},
"restart_propresenter_ingest": {
"kind": "local",
"label": "restart ProPresenter on this Mac (closes it first)",
"params": {
"app": "$APP",
"background": false,
"force": true,
"host": "ingest",
"newest_of": "/Applications/ProPresenter*.app",
"process": "ProPresenter",
"stop_children": false,
"wait_seconds": 10
},
"short": "PROP",
"template": "mac_restart",
"run": "APP=$(for a in /Applications/ProPresenter*.app; do [ -d \"$a\" ] && printf '%s|%s\\n' \"$(defaults read \"$a/Contents/Info\" CFBundleShortVersionString 2>/dev/null)\" \"$a\"; done | sort -t '|' -k1,1V | tail -1 | cut -d '|' -f2-); pkill -TERM -x ProPresenter; i=0; while pgrep -xq ProPresenter && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProPresenter && pkill -KILL -x ProPresenter; sleep 1; open \"$APP\""
},
"restart_superrack_ws_foh": {
"host": "ws_foh",
"kind": "ssh",
"label": "restart SuperRack on WS FOH (closes it first)",
"params": {
"app": "/Applications/Waves/SuperRack SoundGrid/SuperRack SoundGrid.app",
"background": false,
"force": true,
"host": "ws_foh",
"newest_of": "",
"process": "SuperRack SoundGrid",
"stop_children": false,
"wait_seconds": 10
},
"run": "pkill -TERM -x 'SuperRack SoundGrid'; i=0; while pgrep -xq 'SuperRack SoundGrid' && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq 'SuperRack SoundGrid' && pkill -KILL -x 'SuperRack SoundGrid'; sleep 1; open '/Applications/Waves/SuperRack SoundGrid/SuperRack SoundGrid.app'",
"short": "SUPERRACK",
"template": "mac_restart"
},
"restart_vista_ws_lights": {
"host": "ws_lights",
"kind": "ssh",
"label": "restart Vista on WS Lights (closes it first)",
"params": {
"app": "/Applications/Vista.app",
"background": false,
"force": true,
"host": "ws_lights",
"newest_of": "",
"process": "Vista",
"stop_children": false,
"wait_seconds": 10
},
"run": "pkill -TERM -x Vista; i=0; while pgrep -xq Vista && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq Vista && pkill -KILL -x Vista; sleep 1; open /Applications/Vista.app",
"short": "VISTA",
"template": "mac_restart"
},
"superrack_ws_foh": {
"host": "ws_foh",
"kind": "ssh",
"label": "start SuperRack on WS FOH if it is not running",
"params": {
"app": "/Applications/Waves/SuperRack SoundGrid/SuperRack SoundGrid.app",
"host": "ws_foh",
"process": "SuperRack SoundGrid"
},
"run": "pgrep -xq 'SuperRack SoundGrid' || open '/Applications/Waves/SuperRack SoundGrid/SuperRack SoundGrid.app'",
"short": "SUPERRACK",
"template": "mac_start"
},
"vista_ws_lights": {
"host": "ws_lights",
"kind": "ssh",
"label": "start Vista on WS Lights if it is not running",
"params": {
"app": "/Applications/Vista.app",
"host": "ws_lights",
"process": "Vista"
},
"run": "pgrep -xq Vista || open /Applications/Vista.app",
"short": "VISTA",
"template": "mac_start"
},
"x32edit_ws_foh": {
"host": "ws_foh",
"kind": "ssh",
"label": "start X32-Edit on WS FOH if it is not running",
"params": {
"app": "/Applications/X32-Edit.app",
"host": "ws_foh",
"process": "X32-Edit"
},
"run": "pgrep -xq X32-Edit || open /Applications/X32-Edit.app",
"short": "X32 EDIT",
"template": "mac_start"
}
},
"gear": {},
"hosts": {
"ingest": {
"name": "WS ProPresenter",
"networks": [],
"os": "mac",
"role": "the watchdog, Companion, the settings page",
"runs": [
{
"kind": "launchagent",
"label": "org.waterschurch.status-panel",
"name": "the watchdog"
},
{
"kind": "launchagent",
"label": "org.waterschurch.status-settings",
"name": "the settings page"
},
{
"http": "http://127.0.0.1:8000/api/connections",
"kind": "app",
"name": "Companion",
"process": "Companion"
}
],
"self": true
},
"ws_foh": {
"name": "WS FOH",
"os": "mac",
"role": "found by auto-setup",
"runs": [
{
"kind": "sshd"
}
],
"ssh": "watersmedia@10.2.1.12"
},
"ws_lights": {
"name": "WS Lights",
"os": "mac",
"role": "found by auto-setup",
"runs": [
{
"kind": "sshd"
}
],
"ssh": "wslighting@10.2.2.2"
},
"ws_tracks": {
"name": "WS Tracks",
"os": "mac",
"role": "found by auto-setup",
"runs": [
{
"kind": "sshd"
}
],
"ssh": "wstracks@10.2.1.219"
}
},
"nav_hold_ms": 1000,
"nav_keys": [
"pagenum"
],
"nav_tap_page": 1,
"network": {
"burst_connections": 4,
"burst_groups": 3,
"burst_window_seconds": 10,
"gateway": "10.2.0.1",
"interface": "en14",
"remember_seconds": 300
},
"page": 19,
"page_hold_ms": 2000,
"page_name": "19\\nStatus",
"restart_page": {
"back_pos": [
3,
0
],
"jump_pos": [
3,
6
],
"keys": [
{
"fix": "restart_superrack_ws_foh",
"id": "rs_superrack",
"label": "SUPERRACK",
"pos": [
0,
1
]
},
{
"fix": "restart_vista_ws_lights",
"id": "rs_vista",
"label": "VISTA",
"pos": [
0,
2
]
},
{
"fix": "restart_ableton_ws_tracks",
"id": "rs_ableton",
"label": "ABLETON",
"pos": [
0,
3
]
},
{
"fix": "restart_propresenter_ingest",
"id": "rs_prop",
"label": "PROP",
"pos": [
0,
4
]
}
],
"page": 20,
"page_name": "20\\nRestart"
},
"service_windows": [
{
"days": [
"mon",
"tue",
"wed",
"thu",
"fri",
"sat",
"sun"
],
"end": "23:59",
"start": "00:00"
}
],
"site": {
"contacts": "",
"editing_code": "9248",
"id": "ws",
"ingest_hostname": "WS-ProPresenter-3.local",
"ingest_ips": [
"10.2.2.210",
"169.254.104.16"
],
"ingest_name": "WS ProPresenter",
"live_services": [],
"name": "Woonsocket",
"admin_ips": [
"10.6.7.38"
],
"admin_keys": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPKCGDLncJQfNPpoZUy/5BQWGNtyaU1/xKXwHQWx3ETa christian-laptop@waters"
]
},
"tiles": [
{
"id": "all",
"kind": "master",
"label": "ALL",
"pos": [
0,
1
]
},
{
"id": "service",
"kind": "service",
"label": "ALARMS",
"pos": [
3,
0
]
},
{
"id": "net",
"kind": "network",
"label": "NET",
"pos": [
3,
7
]
},
{
"checks": [
{
"cmd": "pgrep -xq 'SuperRack SoundGrid'",
"fix": "superrack_ws_foh",
"host": "ws_foh",
"msg": "SUPERRACK NOT RUNNING",
"params": {
"host": "ws_foh",
"process": "SuperRack SoundGrid"
},
"template": "mac_program",
"type": "remote"
},
{
"cmd": "lsof -nP -iTCP -sTCP:ESTABLISHED -a -c SuperRack 2>/dev/null | grep -q ':19000 (ESTABLISHED)'",
"host": "ws_foh",
"msg": "SOUNDGRID LOST",
"params": {
"host": "ws_foh"
},
"template": "soundgrid",
"type": "remote"
}
],
"id": "superrack",
"label": "SUPERRACK",
"pos": [
0,
2
]
},
{
"checks": [
{
"cmd": "pgrep -xq X32-Edit",
"fix": "x32edit_ws_foh",
"host": "ws_foh",
"msg": "X32 EDIT NOT RUNNING",
"params": {
"host": "ws_foh",
"process": "X32-Edit"
},
"template": "mac_program",
"type": "remote"
}
],
"id": "x32_edit",
"label": "X32 EDIT",
"pos": [
0,
3
]
},
{
"checks": [
{
"conn": "m32",
"type": "conn"
}
],
"id": "m32",
"label": "M32",
"pos": [
0,
4
]
},
{
"checks": [
{
"cmd": "pgrep -xq Vista",
"fix": "vista_ws_lights",
"host": "ws_lights",
"msg": "VISTA NOT RUNNING",
"params": {
"host": "ws_lights",
"process": "Vista"
},
"template": "mac_program",
"type": "remote"
}
],
"id": "vista",
"label": "VISTA",
"pos": [
0,
5
]
},
{
"checks": [
{
"cmd": "pgrep -xq Live",
"fix": "ableton_ws_tracks",
"host": "ws_tracks",
"msg": "ABLETON NOT RUNNING",
"params": {
"host": "ws_tracks",
"process": "Live"
},
"template": "mac_program",
"type": "remote"
}
],
"id": "ableton",
"label": "ABLETON",
"pos": [
0,
6
]
},
{
"checks": [
{
"conn": "Propresenter-API",
"type": "conn",
"ignore_warning": true
},
{
"fix": "propresenter_ingest",
"match": "/Applications/ProPresenter[^/]*\\.app/Contents/MacOS/ProPresenter$",
"name": "PROP",
"type": "process"
}
],
"id": "prop",
"label": "PROP",
"pos": [
0,
7
]
},
{
"checks": [
{
"address": "10.2.1.219:5004",
"fix": "midi_reconnect",
"host": "ws_foh",
"peer": "WS Tracks",
"session": "WS FOH Mac mini",
"tag": "WS TRACKS",
"type": "midi_peer"
},
{
"address": "10.2.1.219:5004",
"fix": "midi_reconnect",
"host": "ws_lights",
"peer": "WS Tracks",
"session": "Lighting",
"tag": "WS TRACKS",
"type": "midi_peer"
},
{
"address": "10.2.2.2:5004",
"fix": "midi_reconnect",
"peer": "Lighting",
"session": "ProPresenter",
"tag": "PROP LIGHTS",
"type": "midi_peer"
},
{
"fix": "midi_reconnect",
"nets": [
"10.2.0.0/16"
],
"type": "midi_wired"
}
],
"id": "midi",
"label": "MIDI",
"pos": [
1,
1
]
},
{
"checks": [
{
"conn": "ATEM",
"type": "conn"
}
],
"id": "atem",
"label": "ATEM",
"pos": [
1,
2
]
},
{
"checks": [
{
"conn": "Resi",
"type": "conn"
},
{
"conn": "Resi",
"type": "ping"
}
],
"id": "resi",
"label": "RESI",
"pos": [
1,
3
]
},
{
"id": "autofix",
"label": "AUTO-FIX",
"kind": "autofix",
"pos": [
3,
1
]
}
],
"timing": {
"alert_after_seconds": 30,
"fix_cooldown_seconds": 60
},
"variables": {
"command": "sp_cmd",
"heartbeat": "sp_hb",
"state": "sp_state"
}
}