diff --git a/signal-gateway-client.py b/signal-gateway-client.py index 2e971db..cc611a6 100755 --- a/signal-gateway-client.py +++ b/signal-gateway-client.py @@ -2,40 +2,71 @@ import sys import argparse import requests +import os if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Send Notifications via Telegram HTTP-Gateway', + + parser = argparse.ArgumentParser(description='Send Notifications via Atlantis Dispatcher', formatter_class=argparse.ArgumentDefaultsHelpFormatter) - parser.add_argument('-4', '--ipv6', required=False, help="Address (v4)") - parser.add_argument('-6', '--ipv4', required=False, help="Address (v6)") - parser.add_argument('-b', '--author', required=False, help="Author") - parser.add_argument('-c', '--comment', required=False, help="Comment") - parser.add_argument('-d', '--date', required=False, help="Date") - parser.add_argument('-e', '--service-name', required=False, help="Service Name") - parser.add_argument('-f', '--from', required=False, help="From") - parser.add_argument('-i', '--icingaweb-url', required=False, help="Icingaweb URL") - parser.add_argument('-l', '--service-host', required=False, help="Hostname") - parser.add_argument('-n', '--service-host-alt', required=False, help="Hostdisplay Name") - parser.add_argument('-o', '--service-output', required=False, help="Service Output") - parser.add_argument('-r', '--user-email', required=False, help="User Email") - parser.add_argument('-s', '--service-state', required=False, help="Service State") - parser.add_argument('-t', '--service-type', required=False, help="Type") + # incident information # + parser.add_argument('-4', '--ipv6', required=False, help="Address (v4)") + parser.add_argument('-6', '--ipv4', required=False, help="Address (v6)") + parser.add_argument('-b', '--author', required=False, help="Author") + parser.add_argument('-c', '--comment', required=False, help="Comment") + parser.add_argument('-d', '--date', required=False, help="Date") + parser.add_argument('-e', '--service-name', required=False, help="Service Name") + parser.add_argument('-f', '--from', required=False, help="From") + parser.add_argument('-i', '--icingaweb-url', required=False, help="Icingaweb URL") + parser.add_argument('-l', '--service-host', required=False, help="Hostname") + parser.add_argument('-n', '--service-host-alt', required=False, help="Hostdisplay Name") + parser.add_argument('-o', '--service-output', required=False, help="Service Output") + parser.add_argument('-r', '--user-email', required=False, help="User Email") + parser.add_argument('-s', '--service-state', required=False, help="Service State") + parser.add_argument('-t', '--service-type', required=False, help="Type") parser.add_argument('-u', '--service-display-name', required=False, help="Service Display Name") - parser.add_argument('-v', required=False, help="Deprecated. Compability only. Has no Effect.") - parser.add_argument('-w', '--target-port', default=6000, help="Signal Gateway Port") - parser.add_argument('-x', '--target-host', default="localhost", help="Signal Gateway Address") - parser.add_argument('-y', '--target-proto', default="http", help="Signal proto") + # connection configuration # + parser.add_argument('-w', '--target-port', default=6000, help="Signal Gateway Port") + parser.add_argument('-x', '--target-host', default="localhost", help="Signal Gateway Address") + parser.add_argument('-y', '--target-proto', default="http", help="Signal proto") + + # deprecated compability options FIXME: remove after Q1/2024 # + parser.add_argument('-v', required=False, help="Deprecated. Compatibility only. Has no Effect.") + + # owners and groups to pass to smart send # + parser.add_argument('--owners', nargs='+', required=False) + parser.add_argument('--owner-groups', nargs='+', required=False) + parser.add_argument('--legacy-gateway', default=False, required=False) + + parser.add_argument('--dispatcher-pass-file', default="/etc/icinga2/dispatcher-pass-file.txt") + args = parser.parse_args() + # check pass file # + user, password = (None, None) + if os.path.isfile(args.dispatcher_pass_file) or os.path.islink(args.dispatcher_pass_file): + with open(args.dispatcher_pass_file) as f: + user, password = f.read().split() + # build message # serviceName = args.service_name if args.service_display_name: serviceName = args.service_display_name # create and send request # - url = "{proto}://{host}:{port}/send-all-icinga".format(host=args.target_host, \ - port=args.target_port,\ - proto=args.target_proto) - requests.post(url, json=vars(args)) + base_url = "{proto}://{host}:{port}/".format(host=args.target_host, + port=args.target_port, + proto=args.target_proto) + + if args.legacy_gateway: + url = base_url + "/send-all-icinga" + requests.post(url, json=vars(args)) + else: + url = base_url + "/smart-send" + struct = { + "users" : args.owners, + "groups" : args.owner_groups, + "data" : "testtest" #vars(args) + } + requests.post(url, json=struct, auth=(user, password))