diff options
Diffstat (limited to 'crates/turtle/src/command/client/stats.rs')
| -rw-r--r-- | crates/turtle/src/command/client/stats.rs | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/crates/turtle/src/command/client/stats.rs b/crates/turtle/src/command/client/stats.rs deleted file mode 100644 index 9ea5e283..00000000 --- a/crates/turtle/src/command/client/stats.rs +++ /dev/null @@ -1,82 +0,0 @@ -use clap::Parser; -use eyre::Result; -use interim::parse_date_string; -use time::{Duration, OffsetDateTime, Time}; - -use crate::atuin_client::database::ClientSqlite; -use crate::atuin_client::{database::current_context, settings::Settings}; - -use crate::atuin_history::stats::{compute, pretty_print}; - -fn parse_ngram_size(s: &str) -> Result<usize, String> { - let value = s - .parse::<usize>() - .map_err(|_| format!("'{s}' is not a valid window size"))?; - - if value == 0 { - return Err("ngram window size must be at least 1".to_string()); - } - - Ok(value) -} - -#[derive(Parser, Debug)] -#[command(infer_subcommands = true)] -pub(crate) struct Cmd { - /// Compute statistics for the specified period, leave blank for statistics since the beginning. See [this](https://docs.atuin.sh/reference/stats/) for more details. - period: Vec<String>, - - /// How many top commands to list - #[arg(long, short, default_value = "10")] - count: usize, - - /// The number of consecutive commands to consider - #[arg(long, short, default_value = "1", value_parser = parse_ngram_size)] - ngram_size: usize, -} - -impl Cmd { - pub(crate) async fn run(&self, db: &ClientSqlite, settings: &Settings) -> Result<()> { - let context = current_context().await?; - let words = if self.period.is_empty() { - String::from("all") - } else { - self.period.join(" ") - }; - - let now = OffsetDateTime::now_utc().to_offset(settings.timezone.0); - let last_night = now.replace_time(Time::MIDNIGHT); - - let history = if words.as_str() == "all" { - db.list(&[], &context, None, false, false).await? - } else if words.trim() == "today" { - let start = last_night; - let end = start + Duration::days(1); - db.range(start, end).await? - } else if words.trim() == "month" { - let end = last_night; - let start = end - Duration::days(31); - db.range(start, end).await? - } else if words.trim() == "week" { - let end = last_night; - let start = end - Duration::days(7); - db.range(start, end).await? - } else if words.trim() == "year" { - let end = last_night; - let start = end - Duration::days(365); - db.range(start, end).await? - } else { - let start = parse_date_string(&words, now, settings.dialect.into())?; - let end = start + Duration::days(1); - db.range(start, end).await? - }; - - let stats = compute(settings, &history, self.count, self.ngram_size); - - if let Some(stats) = stats { - pretty_print(stats, self.ngram_size); - } - - Ok(()) - } -} |
