66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from __future__ import print_function
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
|
|
from urllib.request import Request, urlopen
|
|
from urllib.error import URLError, HTTPError
|
|
|
|
|
|
def parse_args():
|
|
p = argparse.ArgumentParser(description="Report named reload/start failures to Windmill")
|
|
p.add_argument("--url", required=True)
|
|
p.add_argument("--token", required=True)
|
|
p.add_argument("--action", required=True)
|
|
p.add_argument("--hostname", required=True)
|
|
p.add_argument("--ip", required=True)
|
|
p.add_argument("--failed-domains-csv", default="")
|
|
p.add_argument("--raw", default="")
|
|
p.add_argument("--timeout", type=int, default=10)
|
|
return p.parse_args()
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
|
|
failed = [z for z in (args.failed_domains_csv or "").split(",") if z]
|
|
|
|
payload = {
|
|
"action": args.action,
|
|
"hostname": args.hostname,
|
|
"ip_address": args.ip,
|
|
"failed_domains": failed,
|
|
}
|
|
|
|
data = json.dumps(payload).encode("utf-8")
|
|
headers = {
|
|
"Content-Type": "application/json",
|
|
"Authorization": "Bearer %s" % args.token,
|
|
}
|
|
|
|
req = Request(args.url, data=data, headers=headers)
|
|
try:
|
|
resp = urlopen(req, timeout=args.timeout)
|
|
resp.read()
|
|
return 0
|
|
except HTTPError as e:
|
|
body = ""
|
|
try:
|
|
body = e.read()
|
|
except Exception:
|
|
pass
|
|
print("WARN: windmill HTTP error: %s body=%r" % (e, body), file=sys.stderr)
|
|
return 0
|
|
except URLError as e:
|
|
print("WARN: windmill URL error: %s" % (e,), file=sys.stderr)
|
|
return 0
|
|
except Exception as e:
|
|
print("WARN: windmill report failed: %s" % (e,), file=sys.stderr)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main()) |