mod aggregate;
mod facets;
mod get;
mod search;
mod tail;
use clap::{Args, Subcommand};
use crate::cli::Ctx;
#[derive(Debug, Args)]
pub struct LogsArgs {
#[command(subcommand)]
pub command: LogsCommand,
}
#[derive(Debug, Subcommand)]
pub enum LogsCommand {
Search(search::SearchArgs),
Tail(tail::TailArgs),
Get(get::GetArgs),
Aggregate(aggregate::AggregateArgs),
Facets(facets::FacetsArgs),
}
pub async fn dispatch(ctx: Ctx, args: LogsArgs) -> anyhow::Result<()> {
match args.command {
LogsCommand::Search(a) => search::run(ctx, a).await,
LogsCommand::Tail(a) => tail::run(ctx, a).await,
LogsCommand::Get(a) => get::run(ctx, a).await,
LogsCommand::Aggregate(a) => aggregate::run(ctx, a).await,
LogsCommand::Facets(a) => facets::run(ctx, a).await,
}
}
pub fn parse_fields(raw: Option<String>) -> Vec<String> {
raw.map(|s| {
s.split(',')
.map(|p| p.trim().to_string())
.filter(|p| !p.is_empty())
.collect()
})
.unwrap_or_default()
}
pub fn parse_indexes(raw: Option<String>) -> Option<Vec<String>> {
raw.map(|s| {
s.split(',')
.map(|p| p.trim().to_string())
.filter(|p| !p.is_empty())
.collect()
})
}