Skip to content

Commit

Permalink
Add support for collecting Aperf Run logs
Browse files Browse the repository at this point in the history
  • Loading branch information
janaknat committed Sep 23, 2024
1 parent bc0fa31 commit 2e14350
Show file tree
Hide file tree
Showing 12 changed files with 348 additions and 16 deletions.
173 changes: 168 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ rustix = { version = "0.38.28", features = ["system"] }
serde_yaml = "0.9"
thiserror = "1.0"
log = "0.4.21"
env_logger = "0.10.0"
lazy_static = "1.4.0"
timerfd = "1.6.0"
procfs = "0.12.0"
Expand All @@ -53,3 +52,4 @@ indexmap = "2.1.0"
cfg-if = "1.0"
tempfile = "3"
serial_test = "3.1.1"
log4rs = "1.3.0"
42 changes: 35 additions & 7 deletions src/bin/aperf.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
use anyhow::Result;
use aperf_lib::record::{record, Record};
use aperf_lib::report::{report, Report};
use aperf_lib::{PDError, APERF_TMP};
use aperf_lib::{PDError, APERF_RUNLOG, APERF_TMP};
use clap::{Parser, Subcommand};
use env_logger::Builder;
use log::LevelFilter;
use std::{fs, os::unix::fs::PermissionsExt};
use log4rs::{
append::console::ConsoleAppender,
append::file::FileAppender,
config::{Appender, Config, Root},
encode::pattern::PatternEncoder,
};
use std::{fs, os::unix::fs::PermissionsExt, path::PathBuf};
use tempfile::Builder as TempBuilder;

#[derive(Parser)]
Expand Down Expand Up @@ -35,14 +40,36 @@ enum Commands {
Report(Report),
}

fn init_logger(verbose: u8) -> Result<()> {
fn init_logger(verbose: u8, runlog: &PathBuf) -> Result<()> {
let level = match verbose {
0 => LevelFilter::Info,
1 => LevelFilter::Debug,
2 => LevelFilter::Trace,
_ => return Err(PDError::InvalidVerboseOption.into()),
};
Builder::new().filter_level(level).init();
let stdout = ConsoleAppender::builder()
.encoder(Box::new(PatternEncoder::new(
"[{d(%Y-%m-%dT%H:%M:%SZ)} {h({l}):5.5} {M}] {m}{n}",
)))
.build();

let fileout = FileAppender::builder()
.encoder(Box::new(PatternEncoder::new(
"[{d(%Y-%m-%dT%H:%M:%SZ)} {h({l}):5.5} {M}] {m}{n}",
)))
.build(runlog)?;

let config = Config::builder()
.appender(Appender::builder().build("stdout", Box::new(stdout)))
.appender(Appender::builder().build("aperflog", Box::new(fileout)))
.build(
Root::builder()
.appender("stdout")
.appender("aperflog")
.build(level),
)?;

log4rs::init_config(config)?;
Ok(())
}

Expand All @@ -54,11 +81,12 @@ fn main() -> Result<()> {
.tempdir_in(&cli.tmp_dir)?;
fs::set_permissions(&tmp_dir, fs::Permissions::from_mode(0o1777))?;
let tmp_dir_path_buf = tmp_dir.path().to_path_buf();
let runlog = tmp_dir_path_buf.join(APERF_RUNLOG);

init_logger(cli.verbose)?;
init_logger(cli.verbose, &runlog)?;

match cli.command {
Commands::Record(r) => record(&r, &tmp_dir_path_buf),
Commands::Record(r) => record(&r, &tmp_dir_path_buf, &runlog),
Commands::Report(r) => report(&r, &tmp_dir_path_buf),
}?;
fs::remove_dir_all(tmp_dir_path_buf)?;
Expand Down
Loading

0 comments on commit 2e14350

Please sign in to comment.