#!/usr/bin/env python3 """Flip the fake Frame's fault switches and read its state; `fakeframe-ctl help`. Talks to the supervisor's control port, so it works the same over SSH (`ssh frame fakeframe-ctl steam off`) and from the host container with FAKEFRAME_CTL=http://fakeframe:9999. """ import json import os import sys import urllib.error import urllib.request url = os.environ.get('FAKEFRAME_CTL', 'http://127.0.0.1:9999').rstrip('/') req = urllib.request.Request(url + '/ctl', data=json.dumps({'args': sys.argv[1:]}).encode(), headers={'Content-Type': 'application/json'}) try: with urllib.request.urlopen(req, timeout=60) as r: out = json.load(r) except urllib.error.HTTPError as e: out = json.load(e) except OSError as e: sys.exit(f'fakeframe-ctl: control port not answering ({e})') if 'usage' in out: print(out['usage']) elif 'error' in out: sys.exit(f"fakeframe-ctl: {out['error']}") else: print(json.dumps(out, indent=1)) if sys.argv[1:2] == ['ping'] and not out.get('ok'): sys.exit(1)