summaryrefslogtreecommitdiff
path: root/profcollectd/libprofcollectd/scheduler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'profcollectd/libprofcollectd/scheduler.rs')
-rw-r--r--profcollectd/libprofcollectd/scheduler.rs26
1 files changed, 22 insertions, 4 deletions
diff --git a/profcollectd/libprofcollectd/scheduler.rs b/profcollectd/libprofcollectd/scheduler.rs
index f58c4995..5558f581 100644
--- a/profcollectd/libprofcollectd/scheduler.rs
+++ b/profcollectd/libprofcollectd/scheduler.rs
@@ -25,7 +25,7 @@ use std::sync::Mutex;
use std::thread;
use std::time::{Duration, Instant};
-use crate::config::{Config, PROFILE_OUTPUT_DIR, TRACE_OUTPUT_DIR};
+use crate::config::{Config, LOG_FILE, PROFILE_OUTPUT_DIR, TRACE_OUTPUT_DIR};
use crate::trace_provider::{self, TraceProvider};
use anyhow::{anyhow, ensure, Context, Result};
@@ -41,6 +41,7 @@ pub struct Scheduler {
impl Scheduler {
pub fn new() -> Result<Self> {
let p = trace_provider::get_trace_provider()?;
+ p.lock().map_err(|e| anyhow!(e.to_string()))?.set_log_file(&LOG_FILE);
Ok(Scheduler {
termination_ch: None,
trace_provider: p,
@@ -68,11 +69,12 @@ impl Scheduler {
Ok(_) => break,
Err(_) => {
// Did not receive a termination signal, initiate trace event.
- if check_space_limit(*TRACE_OUTPUT_DIR, &config).unwrap() {
+ if check_space_limit(&TRACE_OUTPUT_DIR, &config).unwrap() {
trace_provider.lock().unwrap().trace(
&TRACE_OUTPUT_DIR,
"periodic",
&config.sampling_period,
+ &config.binary_filter,
);
}
}
@@ -94,8 +96,13 @@ impl Scheduler {
pub fn one_shot(&self, config: &Config, tag: &str) -> Result<()> {
let trace_provider = self.trace_provider.clone();
- if check_space_limit(*TRACE_OUTPUT_DIR, config)? {
- trace_provider.lock().unwrap().trace(&TRACE_OUTPUT_DIR, tag, &config.sampling_period);
+ if check_space_limit(&TRACE_OUTPUT_DIR, config)? {
+ trace_provider.lock().unwrap().trace(
+ &TRACE_OUTPUT_DIR,
+ tag,
+ &config.sampling_period,
+ &config.binary_filter,
+ );
}
Ok(())
}
@@ -158,6 +165,17 @@ impl Scheduler {
}
});
}
+
+ pub fn clear_trace_log(&self) -> Result<()> {
+ let provider = self.trace_provider.lock().map_err(|e| anyhow!(e.to_string()))?;
+ provider.reset_log_file();
+ let mut result = Ok(());
+ if LOG_FILE.exists() {
+ result = fs::remove_file(*LOG_FILE).map_err(|e| anyhow!(e));
+ }
+ provider.set_log_file(&LOG_FILE);
+ result
+ }
}
/// Run if space usage is under limit.