pikadick/commands/
cache_stats.rs1use crate::{
2 checks::ENABLED_CHECK,
3 ClientDataKey,
4};
5use serenity::{
6 builder::{
7 CreateEmbed,
8 CreateMessage,
9 },
10 framework::standard::{
11 macros::command,
12 Args,
13 CommandResult,
14 },
15 model::{
16 colour::Colour,
17 prelude::*,
18 },
19 prelude::*,
20};
21use std::fmt::Write;
22use tracing::info;
23
24#[command("cache-stats")]
25#[description("Get cache usage stats")]
26#[checks(Enabled)]
27#[bucket("default")]
28pub async fn cache_stats(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
29 let data_lock = ctx.data.read().await;
30 let client_data = data_lock.get::<ClientDataKey>().unwrap();
31 let stats = client_data.generate_cache_stats();
32 drop(data_lock);
33
34 info!("reporting all cache stats");
35
36 let mut embed_builder = CreateEmbed::new()
37 .title("Cache Stats")
38 .color(Colour::from_rgb(255, 0, 0));
39 for (stat_family_name, stat_family) in stats.into_iter() {
40 let mut output = String::with_capacity(stat_family.len() * 16);
42
43 for (stat_name, stat) in stat_family.iter() {
44 writeln!(&mut output, "**{stat_name}**: {stat} item(s)").unwrap();
45 }
46
47 embed_builder = embed_builder.field(stat_family_name, output, false);
48 }
49
50 let message_builder = CreateMessage::new().embed(embed_builder);
51
52 msg.channel_id
53 .send_message(&ctx.http, message_builder)
54 .await?;
55
56 Ok(())
57}