{ "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": "/Applications/ProPresenter.app", "host": "ingest", "process": "ProPresenter" }, "run": "pgrep -xq ProPresenter || open /Applications/ProPresenter.app", "short": "PROP", "template": "mac_start" }, "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": "/Applications/ProPresenter.app", "background": false, "force": true, "host": "ingest", "newest_of": "", "process": "ProPresenter", "stop_children": false, "wait_seconds": 10 }, "run": "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 /Applications/ProPresenter.app", "short": "PROP", "template": "mac_restart" }, "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" }, "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" }, { "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 ] } ], "timing": { "alert_after_seconds": 30, "fix_cooldown_seconds": 60 }, "variables": { "command": "sp_cmd", "heartbeat": "sp_hb", "state": "sp_state" } }