valeriansaliou / vigil

🚦 Microservices Status Page. Monitors a distributed infrastructure and sends alerts (Slack, SMS, etc.).
https://crates.io/crates/vigil-server
Mozilla Public License 2.0
1.7k stars 125 forks source link

XMPP notifier uses deprecated APIs #112

Closed kauron closed 1 year ago

kauron commented 2 years ago

It seems that src/notifier/xmpp.rs is outdated w.r.t. the time and libstrophe libraries.

With my limited Rust knowledge, I created a patch, but there are still errors that escape my comprehension. Can anyone help me complete this fix?

Patch ```patch @@ -5,8 +5,7 @@ // License: Mozilla Public License v2.0 (MPL v2.0) use std::sync::RwLock; -use std::time::Duration; -use time; +use std::time::{SystemTime, UNIX_EPOCH, Duration}; use libstrophe::{Connection, ConnectionEvent, Context, Stanza, StreamError}; @@ -46,13 +45,16 @@ _error: i32, _stream_error: Option| { match event { - ConnectionEvent::XMPP_CONN_CONNECT => { + ConnectionEvent::Connect => { debug!("connected to XMPP account: {}", &xmpp.from); // Send status message let mut message_stanza = Stanza::new_message( Some("chat"), - Some(&format!("vigil-{}", time::now().to_timespec().sec)), + Some(&format!("vigil-{}", SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards") + .as_secs())), Some(&xmpp.to), ); @@ -69,7 +71,7 @@ // Disconnect immediately connection.disconnect(); } - ConnectionEvent::XMPP_CONN_DISCONNECT | ConnectionEvent::XMPP_CONN_FAIL => { + ConnectionEvent::Disconnect(..) => { debug!( "disconnected from XMPP account: {} ({:?})", &xmpp.from, event ```
Error * Vigil version: 1.22.5 * Apply patch and run: `cargo build --frozen --release --all-features` * Rust version: 1.59.0 * Error: ``` error[E0593]: closure is expected to take 3 arguments, but it takes 5 arguments --> src/notifier/xmpp.rs:99:83 | 42 | let fn_handle = |context: &Context, | _____________________________- 43 | | connection: &mut Connection, 44 | | event: ConnectionEvent, 45 | | _error: i32, 46 | | _stream_error: Option| { | |________________________________________________________________- takes 5 arguments ... 99 | if let Ok(connection_context) = connection.connect_client(None, None, &fn_handle) { | -------------- ^^^^^^^^^^ expected closure that takes 3 arguments | | | required by a bound introduced by this call | = note: required because of the requirements on the impl of `for<'r, 's, 't0, 't1> FnMut<(&'r libstrophe::Context<'_, '_>, &'s mut Connection<'_, '_>, ConnectionEvent<'t0, 't1>)>` for `&[closure@src/notifier/xmpp.rs:42:29: 84:14]` note: required by a bound in `Connection::<'cb, 'cx>::connect_client` --> $HOME/.cargo/registry/src/github.com-1285ae84e5963aae/libstrophe-0.16.1/src/connection.rs:336:8 | 336 | CB: FnMut(&Context<'cx, 'cb>, &mut Connection<'cb, 'cx>, ConnectionEvent) + Send + 'cb, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Connection::<'cb, 'cx>::connect_client` For more information about this error, try `rustc --explain E0593`. error: could not compile `vigil-server` due to previous error ```
valeriansaliou commented 2 years ago

Hello there! Do you mean that the current libstrophe v0.16.x has different APIs than those implemented in Vigil, therefore leading to failing compilation?

kauron commented 2 years ago

Yes, exactly. There are some changes that I don't understand due to lack of knowledge of Rust, so I couldn't fix them all.

valeriansaliou commented 1 year ago

Working for me using libstrophe 0.12.2 from Homebrew on macOS, w/ the following environment variable set during the build of Vigil:

export RUSTFLAGS="-L /opt/homebrew/Cellar/libstrophe/0.12.2/lib/"
cargo run --all-features

Should work w/o passing the library path on Linux systems w/ libstrophe installed.