add fern logging support

This commit is contained in:
Robin Müller 2023-02-15 22:30:32 +01:00
parent cea5b3eeb1
commit 1ad04e8744
4 changed files with 48 additions and 14 deletions

View File

@ -6,6 +6,9 @@ authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"]
default-run = "satrs-example" default-run = "satrs-example"
[dependencies] [dependencies]
fern = "0.6"
chrono = "0.4"
log = "0.4"
crossbeam-channel = "0.5" crossbeam-channel = "0.5"
delegate = "0.9" delegate = "0.9"
zerocopy = "0.6" zerocopy = "0.6"

View File

@ -0,0 +1,16 @@
pub fn setup_logger() -> Result<(), fern::InitError> {
fern::Dispatch::new()
.format(|out, message, record| {
out.finish(format_args!(
"{}[{}][{}] {}",
chrono::Local::now().format("[%Y-%m-%d][%H:%M:%S]"),
std::thread::current().name().expect("unnamed_thread"),
record.level(),
message
))
})
.level(log::LevelFilter::Debug)
.chain(std::io::stdout())
.apply()?;
Ok(())
}

View File

@ -1,10 +1,14 @@
mod ccsds; mod ccsds;
mod hk; mod hk;
mod logging;
mod pus; mod pus;
mod requests; mod requests;
mod tmtc; mod tmtc;
use log::{info, warn};
use crate::hk::AcsHkIds; use crate::hk::AcsHkIds;
use crate::logging::setup_logger;
use crate::requests::{Request, RequestWithToken}; use crate::requests::{Request, RequestWithToken};
use crate::tmtc::{ use crate::tmtc::{
core_tmtc_task, OtherArgs, PusTcSource, TcArgs, TcStore, TmArgs, TmFunnel, TmStore, PUS_APID, core_tmtc_task, OtherArgs, PusTcSource, TcArgs, TcStore, TmArgs, TmFunnel, TmStore, PUS_APID,
@ -66,6 +70,7 @@ impl EcssTmSenderCore for EventTmSender {
} }
fn main() { fn main() {
setup_logger().expect("setting up logging with fern failed");
println!("Running OBSW example"); println!("Running OBSW example");
let tm_pool = LocalPool::new(PoolCfg::new(vec![ let tm_pool = LocalPool::new(PoolCfg::new(vec![
(30, 32), (30, 32),
@ -151,12 +156,12 @@ fn main() {
let aocs_to_funnel = tm_funnel_tx.clone(); let aocs_to_funnel = tm_funnel_tx.clone();
let mut aocs_tm_store = tm_store.clone(); let mut aocs_tm_store = tm_store.clone();
println!("Starting TMTC task"); info!("Starting TMTC task");
let jh0 = thread::spawn(move || { let jh0 = thread::spawn(move || {
core_tmtc_task(core_args, tc_args, tm_args); core_tmtc_task(core_args, tc_args, tm_args);
}); });
println!("Starting TM funnel task"); info!("Starting TM funnel task");
let jh1 = thread::spawn(move || { let jh1 = thread::spawn(move || {
let tm_funnel = TmFunnel { let tm_funnel = TmFunnel {
tm_server_tx, tm_server_tx,
@ -172,7 +177,7 @@ fn main() {
} }
}); });
println!("Starting event handling task"); info!("Starting event handling task");
let jh2 = thread::spawn(move || { let jh2 = thread::spawn(move || {
let mut timestamp: [u8; 7] = [0; 7]; let mut timestamp: [u8; 7] = [0; 7];
let mut sender = EventTmSender::new(tm_store, tm_funnel_tx); let mut sender = EventTmSender::new(tm_store, tm_funnel_tx);
@ -211,14 +216,14 @@ fn main() {
} }
}); });
println!("Starting AOCS thread"); info!("Starting AOCS thread");
let jh3 = thread::spawn(move || { let jh3 = thread::spawn(move || {
let mut timestamp: [u8; 7] = [0; 7]; let mut timestamp: [u8; 7] = [0; 7];
let mut time_provider = TimeProvider::new_with_u16_days(0, 0); let mut time_provider = TimeProvider::new_with_u16_days(0, 0);
loop { loop {
match acs_thread_rx.try_recv() { match acs_thread_rx.try_recv() {
Ok(request) => { Ok(request) => {
println!("ACS thread: Received HK request {:?}", request.0); info!("ACS thread: Received HK request {:?}", request.0);
update_time(&mut time_provider, &mut timestamp); update_time(&mut time_provider, &mut timestamp);
match request.0 { match request.0 {
Request::HkRequest(hk_req) => match hk_req { Request::HkRequest(hk_req) => match hk_req {
@ -246,7 +251,7 @@ fn main() {
HkRequest::ModifyCollectionInterval(_, _) => {} HkRequest::ModifyCollectionInterval(_, _) => {}
}, },
Request::ModeRequest(_mode_req) => { Request::ModeRequest(_mode_req) => {
println!("mode request handling not implemented yet") warn!("mode request handling not implemented yet")
} }
} }
let started_token = reporter_aocs let started_token = reporter_aocs
@ -259,7 +264,7 @@ fn main() {
Err(e) => match e { Err(e) => match e {
TryRecvError::Empty => {} TryRecvError::Empty => {}
TryRecvError::Disconnected => { TryRecvError::Disconnected => {
println!("ACS thread: Message Queue TX disconnected!") warn!("ACS thread: Message Queue TX disconnected!")
} }
}, },
} }

View File

@ -186,7 +186,8 @@ impl PusReceiver {
.expect("Error sending completion success"); .expect("Error sending completion success");
} }
128 => { 128 => {
self.tc_args.event_sender self.tc_args
.event_sender
.send((TEST_EVENT.into(), None)) .send((TEST_EVENT.into(), None))
.expect("Sending test event failed"); .expect("Sending test event failed");
let start_token = self let start_token = self
@ -247,7 +248,11 @@ impl PusReceiver {
return; return;
} }
let addressable_id = AddressableId::from_raw_be(user_data).unwrap(); let addressable_id = AddressableId::from_raw_be(user_data).unwrap();
if !self.tc_args.request_map.contains_key(&addressable_id.target_id) { if !self
.tc_args
.request_map
.contains_key(&addressable_id.target_id)
{
self.tm_args self.tm_args
.verif_reporter .verif_reporter
.start_failure( .start_failure(
@ -262,7 +267,11 @@ impl PusReceiver {
return; return;
} }
let send_request = |request: HkRequest| { let send_request = |request: HkRequest| {
let sender = self.tc_args.request_map.get(&addressable_id.target_id).unwrap(); let sender = self
.tc_args
.request_map
.get(&addressable_id.target_id)
.unwrap();
sender sender
.send(RequestWithToken(Request::HkRequest(request), token)) .send(RequestWithToken(Request::HkRequest(request), token))
.unwrap_or_else(|_| panic!("Sending HK request {request:?} failed")); .unwrap_or_else(|_| panic!("Sending HK request {request:?} failed"));
@ -338,7 +347,8 @@ impl PusReceiver {
&mut self.tm_args.verif_reporter, &mut self.tm_args.verif_reporter,
self.stamp_helper.stamp(), self.stamp_helper.stamp(),
); );
self.tc_args.event_request_tx self.tc_args
.event_request_tx
.send(EventRequestWithToken { .send(EventRequestWithToken {
request: EventRequest::Enable(event_id), request: EventRequest::Enable(event_id),
token: start_token, token: start_token,
@ -350,7 +360,8 @@ impl PusReceiver {
&mut self.tm_args.verif_reporter, &mut self.tm_args.verif_reporter,
self.stamp_helper.stamp(), self.stamp_helper.stamp(),
); );
self.tc_args.event_request_tx self.tc_args
.event_request_tx
.send(EventRequestWithToken { .send(EventRequestWithToken {
request: EventRequest::Disable(event_id), request: EventRequest::Disable(event_id),
token: start_token, token: start_token,
@ -530,8 +541,7 @@ impl PusReceiver {
&tmtc_err::NOT_ENOUGH_APP_DATA, &tmtc_err::NOT_ENOUGH_APP_DATA,
Some( Some(
format!( format!(
"expected {} bytes, found {}", "expected {min_len} bytes, found {app_data_len}"
min_len, app_data_len
) )
.as_bytes(), .as_bytes(),
), ),