mirror of
https://github.com/craigerl/aprsd.git
synced 2024-11-14 12:22:20 -05:00
Added rich output for dump-stats
this patch adds table formatted output for the stats in the aprsd dump-stats command. You can also show the stats in raw json/dict format by passing --raw. You can also limit the sections of the stats by passing --show-section aprsdstats
This commit is contained in:
parent
2fdc7b111d
commit
d0018a8cd3
@ -159,9 +159,35 @@ def fetch_stats(ctx, host, port):
|
|||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@cli_helper.add_options(cli_helper.common_options)
|
@cli_helper.add_options(cli_helper.common_options)
|
||||||
|
@click.option(
|
||||||
|
"--raw",
|
||||||
|
is_flag=True,
|
||||||
|
default=False,
|
||||||
|
help="Dump raw stats instead of formatted output.",
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"--show-section",
|
||||||
|
default=["All"],
|
||||||
|
help="Show specific sections of the stats. "
|
||||||
|
" Choices: All, APRSDStats, APRSDThreadList, APRSClientStats,"
|
||||||
|
" PacketList, SeenList, WatchList",
|
||||||
|
multiple=True,
|
||||||
|
type=click.Choice(
|
||||||
|
[
|
||||||
|
"All",
|
||||||
|
"APRSDStats",
|
||||||
|
"APRSDThreadList",
|
||||||
|
"APRSClientStats",
|
||||||
|
"PacketList",
|
||||||
|
"SeenList",
|
||||||
|
"WatchList",
|
||||||
|
],
|
||||||
|
case_sensitive=False,
|
||||||
|
),
|
||||||
|
)
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
@cli_helper.process_standard_options
|
@cli_helper.process_standard_options
|
||||||
def dump_stats(ctx):
|
def dump_stats(ctx, raw, show_section):
|
||||||
"""Dump the current stats from the running APRSD instance."""
|
"""Dump the current stats from the running APRSD instance."""
|
||||||
console = Console()
|
console = Console()
|
||||||
console.print(f"APRSD Dump-Stats started version: {aprsd.__version__}")
|
console.print(f"APRSD Dump-Stats started version: {aprsd.__version__}")
|
||||||
@ -170,4 +196,116 @@ def dump_stats(ctx):
|
|||||||
ss = StatsStore()
|
ss = StatsStore()
|
||||||
ss.load()
|
ss.load()
|
||||||
stats = ss.data
|
stats = ss.data
|
||||||
|
if raw:
|
||||||
|
if "All" in show_section:
|
||||||
console.print(stats)
|
console.print(stats)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
for section in show_section:
|
||||||
|
console.print(f"Dumping {section} section:")
|
||||||
|
console.print(stats[section])
|
||||||
|
return
|
||||||
|
|
||||||
|
t = Table(title="APRSD Stats")
|
||||||
|
t.add_column("Key")
|
||||||
|
t.add_column("Value")
|
||||||
|
for key, value in stats["APRSDStats"].items():
|
||||||
|
t.add_row(key, str(value))
|
||||||
|
|
||||||
|
if "All" in show_section or "APRSDStats" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
|
||||||
|
# Show the thread list
|
||||||
|
t = Table(title="Thread List")
|
||||||
|
t.add_column("Name")
|
||||||
|
t.add_column("Class")
|
||||||
|
t.add_column("Alive?")
|
||||||
|
t.add_column("Loop Count")
|
||||||
|
t.add_column("Age")
|
||||||
|
for name, value in stats["APRSDThreadList"].items():
|
||||||
|
t.add_row(
|
||||||
|
name,
|
||||||
|
value["class"],
|
||||||
|
str(value["alive"]),
|
||||||
|
str(value["loop_count"]),
|
||||||
|
str(value["age"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
if "All" in show_section or "APRSDThreadList" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
|
||||||
|
# Show the plugins
|
||||||
|
t = Table(title="Plugin List")
|
||||||
|
t.add_column("Name")
|
||||||
|
t.add_column("Enabled")
|
||||||
|
t.add_column("Version")
|
||||||
|
t.add_column("TX")
|
||||||
|
t.add_column("RX")
|
||||||
|
for name, value in stats["PluginManager"].items():
|
||||||
|
t.add_row(
|
||||||
|
name,
|
||||||
|
str(value["enabled"]),
|
||||||
|
value["version"],
|
||||||
|
str(value["tx"]),
|
||||||
|
str(value["rx"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
if "All" in show_section or "PluginManager" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
|
||||||
|
# Now show the client stats
|
||||||
|
t = Table(title="Client Stats")
|
||||||
|
t.add_column("Key")
|
||||||
|
t.add_column("Value")
|
||||||
|
for key, value in stats["APRSClientStats"].items():
|
||||||
|
t.add_row(key, str(value))
|
||||||
|
|
||||||
|
if "All" in show_section or "APRSClientStats" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
|
||||||
|
# now show the packet list
|
||||||
|
packet_list = stats.get("PacketList")
|
||||||
|
t = Table(title="Packet List")
|
||||||
|
t.add_column("Key")
|
||||||
|
t.add_column("Value")
|
||||||
|
t.add_row("Total Received", str(packet_list["rx"]))
|
||||||
|
t.add_row("Total Sent", str(packet_list["tx"]))
|
||||||
|
|
||||||
|
if "All" in show_section or "PacketList" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
|
||||||
|
# now show the seen list
|
||||||
|
seen_list = stats.get("SeenList")
|
||||||
|
sorted_seen_list = sorted(
|
||||||
|
seen_list.items(),
|
||||||
|
)
|
||||||
|
t = Table(title="Seen List")
|
||||||
|
t.add_column("Callsign")
|
||||||
|
t.add_column("Message Count")
|
||||||
|
t.add_column("Last Heard")
|
||||||
|
for key, value in sorted_seen_list:
|
||||||
|
t.add_row(
|
||||||
|
key,
|
||||||
|
str(value["count"]),
|
||||||
|
str(value["last"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
if "All" in show_section or "SeenList" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
|
||||||
|
# now show the watch list
|
||||||
|
watch_list = stats.get("WatchList")
|
||||||
|
sorted_watch_list = sorted(
|
||||||
|
watch_list.items(),
|
||||||
|
)
|
||||||
|
t = Table(title="Watch List")
|
||||||
|
t.add_column("Callsign")
|
||||||
|
t.add_column("Last Heard")
|
||||||
|
for key, value in sorted_watch_list:
|
||||||
|
t.add_row(
|
||||||
|
key,
|
||||||
|
str(value["last"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
if "All" in show_section or "WatchList" in show_section:
|
||||||
|
console.print(t)
|
||||||
|
Loading…
Reference in New Issue
Block a user