Add relative timestamp to syslog messages
This commit is contained in:
parent
f4ad6d177a
commit
262b6f74a4
19
src/main.rs
19
src/main.rs
@ -9,21 +9,24 @@ use std::os::mikros::syscalls::{get_initrd, new_process};
|
|||||||
use std::os::mikros::{ipc, syscalls};
|
use std::os::mikros::{ipc, syscalls};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
use std::time::{Duration, Instant};
|
||||||
use syslog_msg_ipc::Message;
|
use syslog_msg_ipc::Message;
|
||||||
use tar_no_std::TarArchiveRef;
|
use tar_no_std::TarArchiveRef;
|
||||||
|
|
||||||
struct SyslogMessageHandler {
|
struct SyslogMessageHandler {
|
||||||
registered_devices: Vec<String>,
|
registered_devices: Vec<String>,
|
||||||
waiting_text_msgs: Vec<Message>,
|
waiting_text_msgs: Vec<(Duration, Message)>,
|
||||||
msg_output_file: Option<File>,
|
msg_output_file: Option<File>,
|
||||||
|
start_time: Instant,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SyslogMessageHandler {
|
impl SyslogMessageHandler {
|
||||||
fn new() -> Self {
|
fn new(start_time: Instant) -> Self {
|
||||||
Self {
|
Self {
|
||||||
registered_devices: Vec::new(),
|
registered_devices: Vec::new(),
|
||||||
waiting_text_msgs: Vec::new(),
|
waiting_text_msgs: Vec::new(),
|
||||||
msg_output_file: None,
|
msg_output_file: None,
|
||||||
|
start_time,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,17 +53,18 @@ impl SyslogMessageHandler {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if let Some(text) = msg.text.as_ref() {
|
} else if let Some(text) = msg.text.as_ref() {
|
||||||
|
let dur = Instant::now() - self.start_time;
|
||||||
if let Some(file) = self.msg_output_file.as_mut() {
|
if let Some(file) = self.msg_output_file.as_mut() {
|
||||||
writeln!(file, "[{}] {}", msg.from, text).unwrap();
|
writeln!(file, "[{} {:?}] {}", msg.from, dur, text).unwrap();
|
||||||
} else {
|
} else {
|
||||||
self.waiting_text_msgs.push(msg.clone());
|
self.waiting_text_msgs.push((dur, msg.clone()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_output(&mut self, mut file: File) {
|
fn set_output(&mut self, mut file: File) {
|
||||||
for msg in &self.waiting_text_msgs {
|
for (dur, msg) in &self.waiting_text_msgs {
|
||||||
writeln!(file, "[{}] {}", msg.from, msg.text.as_ref().unwrap()).unwrap();
|
writeln!(file, "[{} {:?}] {}", msg.from, dur, msg.text.as_ref().unwrap()).unwrap();
|
||||||
}
|
}
|
||||||
self.msg_output_file = Some(file);
|
self.msg_output_file = Some(file);
|
||||||
self.waiting_text_msgs.clear();
|
self.waiting_text_msgs.clear();
|
||||||
@ -68,6 +72,7 @@ impl SyslogMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
let start_time = Instant::now();
|
||||||
syslog_msg_ipc::register_callback();
|
syslog_msg_ipc::register_callback();
|
||||||
let initrd = TarArchiveRef::new(get_initrd()).unwrap();
|
let initrd = TarArchiveRef::new(get_initrd()).unwrap();
|
||||||
let syslog_pid = run_initrd_proc(&initrd, "bin/syslog");
|
let syslog_pid = run_initrd_proc(&initrd, "bin/syslog");
|
||||||
@ -76,7 +81,7 @@ fn main() {
|
|||||||
syslog_client.subscribe_to_binary("devfs".to_string(), vec![0, 1]);
|
syslog_client.subscribe_to_binary("devfs".to_string(), vec![0, 1]);
|
||||||
syslog_client.subscribe_to_binary("tarfs".to_string(), vec![0]);
|
syslog_client.subscribe_to_binary("tarfs".to_string(), vec![0]);
|
||||||
syslog_client.subscribe_to_binary("tmpfs".to_string(), vec![0]);
|
syslog_client.subscribe_to_binary("tmpfs".to_string(), vec![0]);
|
||||||
let mut msg_handler = SyslogMessageHandler::new();
|
let mut msg_handler = SyslogMessageHandler::new(start_time);
|
||||||
let proc_man_pid = run_initrd_proc(&initrd, "bin/proc_man");
|
let proc_man_pid = run_initrd_proc(&initrd, "bin/proc_man");
|
||||||
let proc_man_client = proc_man_rpc::Client::new(proc_man_pid);
|
let proc_man_client = proc_man_rpc::Client::new(proc_man_pid);
|
||||||
proc_man_client.new_proc(0, None).unwrap();
|
proc_man_client.new_proc(0, None).unwrap();
|
||||||
|
Loading…
Reference in New Issue
Block a user