class EndpointDiagnosticCLI(object): log = Logger() def __init__(self, sysargs, use_files=True): args = self._load_args(sysargs, use_files) self._settings = AutopushSettings( crypto_key=args.crypto_key, router_tablename=args.router_tablename, storage_tablename=args.storage_tablename, message_tablename=args.message_tablename, ) self._endpoint = args.endpoint self._pp = pprint.PrettyPrinter(indent=4) def _load_args(self, sysargs, use_files): if use_files: config_files = shared_config_files + [ # pragma: nocover '/etc/autopush_endpoint.ini', '~/.autopush_endpoint.ini', '.autopush_endpoint.ini' ] else: config_files = [] # pragma: nocover parser = configargparse.ArgumentParser( description='Runs endpoint diagnostics.', default_config_files=config_files) parser.add_argument('endpoint', help="Endpoint to parse") add_shared_args(parser) return parser.parse_args(sysargs) def run(self): match = PUSH_RE.search(self._endpoint) if not match: return "Not a valid endpoint" md = match.groupdict() api_ver, token = md.get("api_ver", "v1"), md["token"] parsed = self._settings.parse_endpoint( token=token, version=api_ver, ) uaid, chid = parsed["uaid"], parsed["chid"] print("UAID: {}\nCHID: {}\n".format(uaid, chid)) rec = self._settings.router.get_uaid(uaid) print("Router record:") self._pp.pprint(rec._data) print("\n") mess_table = rec["current_month"] chans = self._settings.message_tables[mess_table].all_channels(uaid) print("Channels in message table:") self._pp.pprint(chans)