From 33995b8cae5cfde73419b38436623b5879b1e1b3 Mon Sep 17 00:00:00 2001 From: Dalena Date: Fri, 17 Jan 2025 14:03:40 -0500 Subject: [PATCH] fix: cluster bot logs --- silverback/_cli.py | 22 +++++++++++++++------- silverback/cluster/client.py | 16 +++++++++++++--- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/silverback/_cli.py b/silverback/_cli.py index b3b65677..0d75030f 100644 --- a/silverback/_cli.py +++ b/silverback/_cli.py @@ -1068,13 +1068,14 @@ def list_bots(cluster: "ClusterClient"): @bots.command(name="info", section="Configuration Commands") -@click.argument("bot_name", metavar="BOT") +@click.option("-n", "--network") +@click.argument("name", metavar="BOT") @cluster_client -def bot_info(cluster: "ClusterClient", bot_name: str): +def bot_info(cluster: "ClusterClient", name: str, network: str): """Get configuration information of a BOT in a CLUSTER""" - if not (bot := cluster.bots.get(bot_name)): - raise click.UsageError(f"Unknown bot '{bot_name}'.") + if not (bot := cluster.get_bot(network=network, name=name)): + raise click.UsageError(f"Unknown bot '{name}'.") # NOTE: Skip machine `.id`, and we already know it is `.name` bot_dump = bot.model_dump( @@ -1265,15 +1266,22 @@ def stop_bot(cluster: "ClusterClient", name: str): help="Return logs since N ago.", callback=timedelta_callback, ) +@click.option("-n", "--network", required=True) @cluster_client -def show_bot_logs(cluster: "ClusterClient", name: str, log_level: str, since: timedelta | None): +def show_bot_logs( + cluster: "ClusterClient", + name: str, + network: str, + log_level: str, + since: timedelta | None +): """Show runtime logs for BOT in CLUSTER""" start_time = None if since: start_time = datetime.now(tz=timezone.utc) - since - if not (bot := cluster.bots.get(name)): + if not (bot := cluster.get_bot(network=network, name=name)): raise click.UsageError(f"Unknown bot '{name}'.") try: @@ -1281,7 +1289,7 @@ def show_bot_logs(cluster: "ClusterClient", name: str, log_level: str, since: ti except KeyError: level = LogLevel.INFO - for log in bot.filter_logs(log_level=level, start_time=start_time): + for log in bot.filter_logs(network=network, log_level=level, start_time=start_time): click.echo(log) diff --git a/silverback/cluster/client.py b/silverback/cluster/client.py index 0adb0399..757708a4 100644 --- a/silverback/cluster/client.py +++ b/silverback/cluster/client.py @@ -192,11 +192,12 @@ def errors(self) -> list[str]: def filter_logs( self, + network: str, log_level: LogLevel = LogLevel.INFO, start_time: datetime | None = None, end_time: datetime | None = None, ) -> list[BotLogEntry]: - query = {"log_level": log_level.name} + log_level = "INFO" if start_time: query["start_time"] = start_time.isoformat() @@ -204,9 +205,13 @@ def filter_logs( if end_time: query["end_time"] = end_time.isoformat() - response = self.cluster.get(f"/bots/{self.name}/logs", params=query, timeout=120) + response = self.cluster.get(f"/bots/network/{network}/name/{self.name}/logs", timeout=120) handle_error_with_response(response) - return [BotLogEntry.model_validate(log) for log in response.json()] + response_data = response.json() + logs_data = response.json().get('logs', {}) + log_query = [log for logs in logs_data.values() for log in logs if log.startswith(log_level)] + breakpoint() + return log_query @property def logs(self) -> list[BotLogEntry]: @@ -296,6 +301,11 @@ def bots(self) -> dict[str, Bot]: handle_error_with_response(response) return {bot.name: bot for bot in map(Bot.model_validate, response.json())} + def get_bot(self, name: str, network: str): + response = self.get(f"/bots/network/{network}/name/{name}") + handle_error_with_response(response) + return Bot.model_validate(response.json()) + def new_bot( self, name: str,