buildlog-consultant 0.1.3

buildlog parser and analyser
Documentation
use clap::Parser;
use std::io::BufRead;

#[derive(Parser)]
struct Args {
    #[clap(short, long)]
    debug: bool,
    path: std::path::PathBuf,
}

fn main() {
    let args: Args = Args::parse();

    env_logger::builder()
        .filter_level(if args.debug {
            log::LevelFilter::Debug
        } else {
            log::LevelFilter::Info
        })
        .init();

    let f = std::fs::File::open(&args.path).expect("Failed to open file");

    let reader = std::io::BufReader::new(f);

    let lines = reader
        .lines()
        .map(|l| l.expect("Failed to read line"))
        .collect::<Vec<_>>();

    let openai_key = std::env::var("OPENAI_API_KEY").expect("OPENAI_KEY not set");

    let runtime = tokio::runtime::Runtime::new().unwrap();

    let m = runtime.block_on(buildlog_consultant::chatgpt::analyze(
        openai_key,
        lines.iter().map(|l| l.as_str()).collect::<Vec<_>>(),
    ));

    match m {
        Ok(Some(m)) => log::info!("match: {}", m),
        Ok(None) => log::info!("No match found"),
        Err(e) => {
            log::error!("Failed to analyze log: {}", e);
            std::process::exit(1);
        }
    }
}