rhit/
csv.rs

1use {
2    crate::*,
3    std::{
4        path::PathBuf,
5    },
6};
7
8/// A printer writing lines as a CSV file
9struct CsvPrinter {}
10
11impl LineConsumer for CsvPrinter {
12    fn start_eating(
13        &mut self,
14        _first_date: Date,
15    ) {
16        println!("date,time,remote address,method,path,status,bytes sent,referer");
17    }
18    fn eat_line(
19        &mut self,
20        line: LogLine,
21        _raw_line: &str,
22        filtered_out: bool,
23    ) {
24        if filtered_out { return; }
25        println!(
26            r#"{},{},{},{},"{}",{},{},"{}""#,
27            line.date(),
28            line.time(),
29            line.remote_addr,
30            line.method,
31            line.path,
32            line.status,
33            line.bytes_sent,
34            line.referer,
35        );
36    }
37}
38
39pub fn print_csv_lines(
40    path: &[PathBuf],
41    args: &args::Args,
42) -> Result<(), RhitError> {
43    let mut printer = CsvPrinter{};
44    let mut file_reader = FileReader::new(path, args, &mut printer)?;
45    time!("reading files", file_reader.read_all_files())?;
46    Ok(())
47}
48