diff options
author | Nathan Ringo <nathan@remexre.com> | 2024-01-16 02:38:56 -0600 |
---|---|---|
committer | Nathan Ringo <nathan@remexre.com> | 2024-01-16 02:38:56 -0600 |
commit | 387087b3b2359ad7f434a16f5682ef781539e786 (patch) | |
tree | c3dd3f6df68a6bc53814b6de2b65f4d04d3b28e2 /src/handlers/x500_mapper.rs | |
parent | 1ef9e40795384b1fd9b5bcb0798f7f210068dd1f (diff) |
Finishes off plain recording of X.500s.
Diffstat (limited to 'src/handlers/x500_mapper.rs')
-rw-r--r-- | src/handlers/x500_mapper.rs | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/src/handlers/x500_mapper.rs b/src/handlers/x500_mapper.rs index debb7f1..31b888f 100644 --- a/src/handlers/x500_mapper.rs +++ b/src/handlers/x500_mapper.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use anyhow::{Context as _, Result}; use futures::{ future::{self, Either}, stream, FutureExt, Stream, StreamExt, TryStreamExt, @@ -35,7 +35,7 @@ impl X500Mapper { match result { Ok((have, total)) => log::info!("Now have users for {} / {} known X.500s", have, total), - Err(err) => log::error!("Failed to get stats about X.500s: {}", err), + Err(err) => log::error!("Failed to get stats about X.500s: {:?}", err), } } @@ -57,7 +57,7 @@ impl X500Mapper { // Handle each one. stream::iter(parsed_members) - .for_each(|(member, x500)| self.notice_x500(member.user.id, x500)) + .for_each(|(member, x500)| self.record_x500(member.user.id, x500)) .await; // Print some stats, everybody likes stats! @@ -78,8 +78,41 @@ impl X500Mapper { } } - async fn notice_x500(&self, uid: UserId, x500: String) { - dbg!((uid, x500)); + async fn record_x500(&self, uid: UserId, x500: String) { + let x500 = &x500; + let future = async move { + let uid = i64::from(uid); + + sqlx::query!( + "INSERT OR IGNORE INTO all_seen_uids_to_x500s (uid, x500) VALUES (?, ?)", + uid, + x500 + ) + .execute(&self.0) + .await + .context("failed to insert into all_seen_uids_to_x500s")?; + + sqlx::query!( + "INSERT OR IGNORE INTO uids_to_x500s_clean (uid, x500) VALUES (?, ?)", + uid, + x500 + ) + .execute(&self.0) + .await + .context("failed to insert into uids_to_x500s_clean")?; + + Ok::<_, anyhow::Error>(()) + }; + + match future.await { + Ok(()) => (), + Err(err) => log::error!( + "failed to record that the user with UID {} had the X.500 {}: {:?}", + uid, + x500, + err + ), + } } } @@ -98,7 +131,7 @@ impl EventHandler for X500Mapper { ) { if let Some(member) = new { if let Some(x500) = parse_out_x500(member.display_name()) { - self.notice_x500(member.user.id, x500.to_string()).await; + self.record_x500(member.user.id, x500.to_string()).await; self.log_stats().await; } } @@ -131,7 +164,7 @@ async fn get_all_members(http: &Http) -> Vec<Member> { .await; if let Some(err) = errs.first() { log::error!( - "failed to get a list of all members: {}; proceeding with {}", + "failed to get a list of all members: {:?}; proceeding with {}", err, members.len() ); |