commit 8896b9f9f73bb4d15926691d4390691d71f8c3fe
parent 6b8bf613d5e96b4bcb0175c51722797b2a21f593
Author: Marcel <mtrnord1@gmail.com>
Date: Mon, 17 Feb 2020 22:03:54 +0100
Add more accurate logging
Took 35 minutes
Diffstat:
5 files changed, 96 insertions(+), 20 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,3 +1,4 @@
/target
**/*.rs.bk
config.yaml
+output.log
diff --git a/Cargo.lock b/Cargo.lock
@@ -22,9 +22,12 @@ dependencies = [
name = "auto-invite-matrix-bot"
version = "0.1.0"
dependencies = [
+ "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 3.0.0-beta.1 (git+https://github.com/clap-rs/clap/)",
+ "fern 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"ruma-client 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -66,6 +69,16 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "chrono"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "clap"
version = "3.0.0-beta.1"
source = "git+https://github.com/clap-rs/clap/#bbb14f8bd47ef201b315d367922343577ee60718"
@@ -114,6 +127,15 @@ version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "fern"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "fnv"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -434,6 +456,23 @@ dependencies = [
]
[[package]]
+name = "num-integer"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "openssl"
version = "0.10.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1040,11 +1079,13 @@ dependencies = [
"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01"
"checksum clap 3.0.0-beta.1 (git+https://github.com/clap-rs/clap/)" = "<none>"
"checksum clap_derive 3.0.0-beta.1 (git+https://github.com/clap-rs/clap/)" = "<none>"
"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3"
+"checksum fern 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e69ab0d5aca163e388c3a49d284fed6c3d0810700e77c5ae2756a50ec1a4daaa"
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
@@ -1081,6 +1122,8 @@ dependencies = [
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e"
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
+"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
+"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
"checksum openssl 0.10.28 (registry+https://github.com/rust-lang/crates.io-index)" = "973293749822d7dd6370d6da1e523b0d1db19f06c459134c658b2a4261378b52"
"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
"checksum openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)" = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986"
diff --git a/Cargo.toml b/Cargo.toml
@@ -15,6 +15,10 @@ url = "2.1.1"
clap = { git = "https://github.com/clap-rs/clap/" }
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.8"
+log = "0.4.8"
+fern = "0.5"
+chrono = "0.4.10"
+
[patch.crates-io]
ruma-identifiers = { git = 'https://github.com/ruma/ruma-identifiers.git' }
diff --git a/src/logger.rs b/src/logger.rs
@@ -0,0 +1,21 @@
+use log::LevelFilter;
+pub fn setup_logger(crate_level: LevelFilter) -> Result<(), fern::InitError> {
+ fern::Dispatch::new()
+ .format(|out, message, record| {
+ out.finish(format_args!(
+ "{}[{}][{}] {}",
+ chrono::Local::now().format("[%Y-%m-%d][%H:%M:%S]"),
+ record.target(),
+ record.level(),
+ message
+ ))
+ })
+ // output all messages
+ .level(log::LevelFilter::Warn)
+ .level_for("auto_invite_matrix_bot", crate_level)
+ .level_for("ruma_client", crate_level)
+ .chain(std::io::stdout())
+ .chain(fern::log_file("output.log")?)
+ .apply()?;
+ Ok(())
+}
diff --git a/src/main.rs b/src/main.rs
@@ -3,27 +3,31 @@ use std::convert::TryFrom;
use clap::Clap;
use futures_util::future::join_all;
use futures_util::stream::TryStreamExt as _;
-use ruma_client::api::r0::membership::invite_user;
-use ruma_client::api::r0::membership::join_room_by_id;
-use ruma_client::api::r0::message::create_message_event;
-use ruma_client::api::r0::sync::sync_events::IncomingResponse;
-use ruma_client::identifiers::UserId;
use ruma_client::{
self,
events::{
- room::message::{MessageEventContent, NoticeMessageEventContent},
EventType,
+ room::message::{MessageEventContent, NoticeMessageEventContent},
},
HttpsClient, Session,
};
+use ruma_client::api::r0::membership::invite_user;
+use ruma_client::api::r0::membership::join_room_by_id;
+use ruma_client::api::r0::message::create_message_event;
+use ruma_client::api::r0::sync::sync_events::IncomingResponse;
+use ruma_client::identifiers::UserId;
use url::Url;
-use crate::config::{load_config, Config, Homeserver};
+use log::{debug, error, info};
+
+use crate::config::{Config, Homeserver, load_config};
+use crate::logger::setup_logger;
mod config;
+mod logger;
async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_client::Error> {
- println!("Starting session as {}", server.mxid);
+ info!("Starting session as {}", server.mxid);
let session: Session;
let mut client: HttpsClient = HttpsClient::https(
@@ -59,7 +63,7 @@ async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_clien
)
.await?;
} else {
- println!("Please provide either a password or an access_token!");
+ error!("Please provide either a password or an access_token!");
}
let mut sync_stream = Box::pin(client.sync(None, None, false));
@@ -69,21 +73,21 @@ async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_clien
let res: IncomingResponse = response;
for (room_id, _room) in res.rooms.invite {
// Auto join rooms
- println!("Invited to {:?}", room_id.clone());
+ debug!("Invited to {:?}", room_id.clone());
client
.request(join_room_by_id::Request {
room_id: room_id.clone(),
third_party_signed: None,
})
.await?;
- println!("Joined {:?}", room_id.clone());
+ debug!("Joined {:?}", room_id.clone());
let response = client
.request(invite_user::Request {
room_id: room_id.clone(),
user_id: UserId::try_from(target_user.clone().as_str()).unwrap(),
})
.await?;
- println!("Invited correct user {:?}", response);
+ debug!("Invited correct user {:?}", response);
client
.request(create_message_event::Request {
room_id,
@@ -96,7 +100,7 @@ async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_clien
})
.await?;
- println!("Sent a message about what happened");
+ debug!("Sent a message about what happened");
}
}
@@ -117,13 +121,16 @@ struct Opts {
async fn main() -> Result<(), ruma_client::Error> {
let opts: Opts = Opts::parse();
- // TODO actually implement logger
- match opts.verbose {
- 0 => println!("No verbose info"),
- 1 => println!("Some verbose info"),
- 2 => println!("Tons of verbose info"),
- 3 | _ => println!("Don't be crazy"),
- }
+
+ let log_level = match opts.verbose {
+ 0 => log::LevelFilter::Info, // default
+ 1 => log::LevelFilter::Error, // -v
+ 2 => log::LevelFilter::Warn, // -vv
+ 3 => log::LevelFilter::Debug, // -vvv
+ _ => log::LevelFilter::Trace, // -vvvv and above
+ };
+
+ setup_logger(log_level).expect("unable to setup logger");
let config = load_config(opts.config).expect("unable to read config");
let mut futures = vec![];