From bdcf5f884b341856cfb476fedb963b95d6d46ace Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Mon, 3 Aug 2020 21:31:56 -0400 Subject: [PATCH] Add `services` cmd for monitoring actors --- piker/brokers/questrade.py | 2 +- piker/cli/__init__.py | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/piker/brokers/questrade.py b/piker/brokers/questrade.py index 7d6c971b..57865c53 100644 --- a/piker/brokers/questrade.py +++ b/piker/brokers/questrade.py @@ -1135,7 +1135,7 @@ async def stream_quotes( loglevel: str = None, # feed_type: str = 'stock', ) -> AsyncGenerator[str, Dict[str, Any]]: - # XXX: why do we need this again? + # XXX: required to propagate ``tractor`` loglevel to piker logging get_console_log(tractor.current_actor().loglevel) async with get_cached_client('questrade') as client: diff --git a/piker/cli/__init__.py b/piker/cli/__init__.py index 76c707fd..8dd45ddc 100644 --- a/piker/cli/__init__.py +++ b/piker/cli/__init__.py @@ -6,9 +6,8 @@ import os import click import tractor -from ..log import get_console_log, get_logger +from ..log import get_console_log, get_logger, colorize_json from ..brokers import get_brokermod, config -from ..data import maybe_spawn_brokerd log = get_logger('cli') DEFAULT_BROKER = 'questrade' @@ -72,11 +71,38 @@ def cli(ctx, broker, loglevel, tl, configdir): ctx.obj.update({'tractorloglevel': loglevel}) +@cli.command() +@click.option('--tl', is_flag=True, help='Enable tractor logging') +@click.argument('names', nargs=-1, required=False) +@click.pass_obj +def services(config, tl, names): + + async def list_services(): + async with tractor.get_arbiter( + *tractor.current_actor()._arb_addr + ) as portal: + registry = await portal.run('self', 'get_registry') + json_d = {} + for uid, socket in registry.items(): + name, uuid = uid + host, port = socket + json_d[f'{name}.{uuid}'] = f'{host}:{port}' + click.echo( + f"Available `piker` services:\n{colorize_json(json_d)}" + ) + + tractor.run( + list_services, + name='service_query', + loglevel=config['loglevel'] if tl else None, + ) + + def _load_clis() -> None: from ..data import cli as _ - from ..brokers import cli as _ - from ..ui import cli as _ - from ..watchlists import cli as _ + from ..brokers import cli as _ # noqa + from ..ui import cli as _ # noqa + from ..watchlists import cli as _ # noqa # load downstream cli modules