From 4553a1b65f1a9e43615438c503d39c7d98f103db Mon Sep 17 00:00:00 2001 From: n0m1s Date: Mon, 18 Sep 2023 22:25:26 -0700 Subject: [PATCH] added logging --- Cargo.lock | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 4 +- src/main.rs | 59 +++++++++++++++++++++++---- src/mqtt.rs | 6 ++- 4 files changed, 166 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 46dd0b4..7caf121 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -174,6 +174,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" + [[package]] name = "equivalent" version = "1.0.1" @@ -352,6 +358,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + [[package]] name = "libc" version = "0.2.147" @@ -381,12 +393,23 @@ name = "mqtt2statsd" version = "0.1.0" dependencies = [ "clap", + "log", "paho-mqtt", "serde", + "simplelog", "statsd", "toml", ] +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -545,6 +568,17 @@ dependencies = [ "serde", ] +[[package]] +name = "simplelog" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acee08041c5de3d5048c8b3f6f13fafb3026b24ba43c6a695a0c76179b844369" +dependencies = [ + "log", + "termcolor", + "time", +] + [[package]] name = "slab" version = "0.4.9" @@ -580,6 +614,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thiserror" version = "1.0.48" @@ -600,11 +643,41 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +dependencies = [ + "deranged", + "itoa", + "libc", + "num_threads", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +dependencies = [ + "time-core", +] + [[package]] name = "toml" -version = "0.7.8" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "c226a7bba6d859b63c92c4b4fe69c5b6b72d0cb897dbc8e6012298e6154cb56e" dependencies = [ "serde", "serde_spanned", @@ -623,9 +696,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "8ff63e60a958cefbb518ae1fd6566af80d9d4be430a33f3723dfc47d1d411d95" dependencies = [ "indexmap", "serde", @@ -658,6 +731,37 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/Cargo.toml b/Cargo.toml index 277c015..0849a38 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,6 @@ clap = { version = "4.3", features = [ "derive", "cargo" ]} paho-mqtt = "0.12" serde = { version = "1.0", features = ["derive"] } statsd = "0.16" -toml = "0.7" +toml = "0.8" +simplelog = "0.12" +log = "0.4" diff --git a/src/main.rs b/src/main.rs index 501b4c4..94b9c4c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,26 +1,44 @@ use std::error::Error; +extern crate log; +use log::{error, info, debug}; + +use simplelog::{ TermLogger, LevelFilter, ConfigBuilder, TerminalMode, ColorChoice}; + +use paho_mqtt::Message; + mod cli_args; mod config; mod mqtt; -fn main() -> Result<(), Box> { - let args = cli_args::parse(); - let config = config::from_file(&args.configuration)?; +fn handle_msg( msg: &Message ) +{ + info!("New message: {}", msg) +} + +//------------------------------------------------------------------------------ - println!("{:#?}", config); //TODO: remove +fn main_impl( args: &cli_args::Args ) -> Result<(), Box> { + let config = config::from_file(&args.configuration)?; + debug!("Config: {:?}", config); + // init MQTT let mqtt = mqtt::create( &config.mqtt )?; let rx = mqtt.start_consuming(); mqtt::subscribe( &mqtt, &config.topics, args.verbose ); + // main event loop for msg in rx.iter() { - if let Some(msg) = msg { - println!("{}", msg); - } else if !mqtt.is_connected() { - println!("disconnected"); + if !mqtt.is_connected() { + if args.verbose { + println!( ) + } break; } + + if let Some(msg) = msg { + handle_msg(&msg) + } } if mqtt.is_connected() { @@ -30,3 +48,28 @@ fn main() -> Result<(), Box> { Ok(()) } + +//------------------------------------------------------------------------------ + +fn main() { + let args = cli_args::parse(); + + // set up logging + TermLogger::init( + match args.verbose { + true => LevelFilter::Debug, + false => LevelFilter::Info + }, + ConfigBuilder::new() + .set_time_format_rfc3339() + .set_time_offset_to_local().unwrap() + .build(), + TerminalMode::Mixed, + ColorChoice::Auto + ).unwrap(); + + // actually run the program + if let Err(e) = main_impl(&args) { + error!("Error: {}", e) + } +} diff --git a/src/mqtt.rs b/src/mqtt.rs index fcb3d89..940d7f6 100644 --- a/src/mqtt.rs +++ b/src/mqtt.rs @@ -1,5 +1,7 @@ extern crate paho_mqtt as paho; +use log::{warn, info}; + use crate::config::MqttConfig; use crate::config::Topic; @@ -30,9 +32,9 @@ pub fn subscribe( mqtt: &paho::Client, topics: &Vec, verbose: bool ) { for topic in topics { let e = mqtt.subscribe(topic.mqtt_topic.as_str(), 1); if e.is_ok() { - println!( "Subscribed to {}", topic.mqtt_topic ); + info!( "Topic subscribed: \"{}\"", topic.mqtt_topic ); } else if verbose { - println!( "Cannot subscribe to {} (error: {e:?})", topic.mqtt_topic ); + warn!( "Cannot subscribe to topic \"{}\" (error: {e:?})", topic.mqtt_topic ); } } }