pikadick/commands/
cache_stats.rs

1use 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        // Low ball, but better than nothing
41        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}