Skip to content

Commit

Permalink
fix: cluster bot logs
Browse files Browse the repository at this point in the history
  • Loading branch information
dtdang committed Jan 17, 2025
1 parent d99cc72 commit 33995b8
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 10 deletions.
22 changes: 15 additions & 7 deletions silverback/_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -1265,23 +1266,30 @@ 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:
level = LogLevel.__dict__[log_level.upper()]
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)


Expand Down
16 changes: 13 additions & 3 deletions silverback/cluster/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,21 +192,26 @@ 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()

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]:
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 33995b8

Please sign in to comment.