atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: xtask/src/log/mod.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
mod overview;
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
mod sync;
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
mod timer;
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
use std::path::PathBuf;
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
use clap::{Args, Subcommand};
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
use crate::{Result, sh, workspace};
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
#[derive(Args)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
pub struct LogArgs {
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
    #[clap(subcommand)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
    cmd: LogCommand,
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
/// Analysis around logs (formatted by `matrix-sdk-ffi`).
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
#[derive(Subcommand)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
enum LogCommand {
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
    /// Overview the logs as a tree where each node is a target and each leaf is
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
    /// a log location with occurrences, spans and fields.
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
    Overview {
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
        /// The file containing the logs to analyse.
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
        log_file: PathBuf,
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
        /// The output file that will receive the HTML report.
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
        html_output_file: PathBuf,
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
    /// Visualise the sync requests and responses with a table and a duration
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
    /// graph.
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
    Sync {
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
        /// The file containing the logs to analyse.
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
        log_file: PathBuf,
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
        /// The output file that will receive the HTML report.
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
        html_output_file: PathBuf,
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
    /// Visualise the timers to detect bottlenecks.
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
    Timer {
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
        /// The file containing the logs to analyse.
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
        log_file: PathBuf,
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
        /// The output file that will receive the HTML report.
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
        #[clap(long)]
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
        html_output_file: PathBuf,
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
    },
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
impl LogArgs {
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
    pub fn run(self) -> Result<()> {
7ff8adafe9e4atagen2026-10-22 12:30 UTC58
        let sh = sh();
7ff8adafe9e4atagen2026-10-22 12:30 UTC59
        let _p = sh.push_dir(workspace::root_path()?);
7ff8adafe9e4atagen2026-10-22 12:30 UTC60
7ff8adafe9e4atagen2026-10-22 12:30 UTC61
        match self.cmd {
7ff8adafe9e4atagen2026-10-22 12:30 UTC62
            LogCommand::Overview { log_file, html_output_file } => {
7ff8adafe9e4atagen2026-10-22 12:30 UTC63
                overview::run(log_file, html_output_file)?
7ff8adafe9e4atagen2026-10-22 12:30 UTC64
            }
7ff8adafe9e4atagen2026-10-22 12:30 UTC65
            LogCommand::Sync { log_file, html_output_file } => {
7ff8adafe9e4atagen2026-10-22 12:30 UTC66
                sync::run(log_file, html_output_file)?
7ff8adafe9e4atagen2026-10-22 12:30 UTC67
            }
7ff8adafe9e4atagen2026-10-22 12:30 UTC68
            LogCommand::Timer { log_file, html_output_file } => {
7ff8adafe9e4atagen2026-10-22 12:30 UTC69
                timer::run(log_file, html_output_file)?
7ff8adafe9e4atagen2026-10-22 12:30 UTC70
            }
7ff8adafe9e4atagen2026-10-22 12:30 UTC71
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC72
7ff8adafe9e4atagen2026-10-22 12:30 UTC73
        Ok(())
7ff8adafe9e4atagen2026-10-22 12:30 UTC74
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC75
}