From bb2c4e3a9461878ff541a6be6dd1f3e788e0efee Mon Sep 17 00:00:00 2001 From: Ben Burdette <> Date: Sat, 8 Feb 2025 10:06:35 -0700 Subject: [PATCH 1/4] writing all 'from' messages to log file --- server-lib/src/interfaces.rs | 81 ++++++++++++++++++++++++++++++-- server-lib/src/jobs.rs | 35 +++++++++++--- server-lib/src/lib.rs | 6 +++ server-lib/src/sqldata.rs | 90 ++++++++++++++++++++++++++++++++++++ server-lib/src/sync.rs | 87 +++++++++++++++++----------------- 5 files changed, 243 insertions(+), 56 deletions(-) diff --git a/server-lib/src/interfaces.rs b/server-lib/src/interfaces.rs index 63447e9e..98c82c41 100644 --- a/server-lib/src/interfaces.rs +++ b/server-lib/src/interfaces.rs @@ -4,8 +4,12 @@ use crate::jobs::GirlbossMonitor; use crate::jobs::JobId; use crate::jobs::JobMonitor; use crate::jobs::LogMonitor; +use crate::jobs::ReportFileMonitor; use crate::search; use crate::sqldata; +use crate::sqldata::make_file_entry; +use crate::sqldata::make_file_note; +use crate::sqldata::set_zknote_file; use crate::sqldata::zknotes_callbacks; use crate::state::new_jobid; use crate::state::State; @@ -13,15 +17,19 @@ use crate::sync; use actix_session::Session; use actix_web::HttpResponse; use futures_util::StreamExt; -use log::info; +use log::{error, info}; use orgauth; use orgauth::data::UserId; use orgauth::endpoints::Tokener; use rusqlite::Connection; +use std::env; use std::error::Error; +use std::fs::File; use std::path::PathBuf; use std::sync::Arc; +use std::sync::Mutex; use std::time::Duration; +use uuid::Uuid; use zkprotocol::constants::PrivateStreamingRequests; use zkprotocol::content::JobState; use zkprotocol::content::JobStatus; @@ -287,14 +295,77 @@ pub async fn zk_interface_loggedin( }) .unwrap() .start(jid, move |mon| async move { - let gbm = GirlbossMonitor { monitor: mon }; + // job log file. + let mut lfn = env::temp_dir(); + let uuidname = Uuid::new_v4().to_string(); + lfn.push(uuidname.clone()); + let jlf = match File::create_new(lfn.clone()) { + Ok(f) => { + info!("sync log file: {:?}", lfn); + f + } + Err(e) => { + error!("err creating sync log file: {:?}", e); + actix_rt::System::current().stop(); + return; + } + }; + let gbm = ReportFileMonitor { + monitor: mon, + outf: Mutex::new(jlf), + }; let mut callbacks = &mut zknotes_callbacks(); write!(gbm, "starting sync"); - let r = sync::sync(&dbpath, &file_path, uid, &mut callbacks, &gbm).await; + + let r: Result<(), Box> = async { + let c = sqldata::connection_open(dbpath.as_path())?; + let conn = Arc::new(c); + let snid = sync::sync(&conn, &file_path, uid, &mut callbacks, &gbm).await?; + write!(gbm, "sync completed"); + let fid = make_file_entry( + &*conn, + file_path.as_path(), + uid, + &uuidname, + lfn.as_path(), + false, + )?; + // PrivateReply::PvySyncComplete + + set_zknote_file(&*conn, snid, fid)?; + + // conn.commit()?; + Ok(()) + } + .await; + match r { - Ok(_) => write!(gbm, "sync completed"), + Ok(()) => (), Err(e) => write!(gbm, "sync err: {:?}", e), - }; + } + // add the log to the sync note. + + // match sqldata::connection_open(dbpath.as_path()) { + // Err(e) => write!(gbm, "sync err: {:?}", e), + // Ok(c) => { + // let conn = Arc::new(c); + // match sync::sync(&conn, &file_path, uid, &mut callbacks, &gbm).await { + // Err(e) => write!(gbm, "sync err: {:?}", e), + // Ok(snid) => + // { + // write!(gbm, "sync completed"); + // let fid = make_file_entry(&*conn, file_path.as_path(), uid, nam, lfn.as_path(), false)?; + // // PrivateReply::PvySyncComplete + + // set_zknote_file(&*conn, snid, fid) + // // let syncnoteid = save_sync(&conn, user.id, unote, CompletedSync { after, now }).await?; + + // conn.commit()?; + // } + // }; + + // // add the log to the sync note. + actix_rt::System::current().stop(); }) .map_err(|e| { diff --git a/server-lib/src/jobs.rs b/server-lib/src/jobs.rs index f29e642f..15e45df3 100644 --- a/server-lib/src/jobs.rs +++ b/server-lib/src/jobs.rs @@ -1,7 +1,7 @@ -use std::fmt; +use std::{fmt, fs::File, io::Write, sync::Mutex}; use girlboss::Monitor; -use log::{logger, Record}; +use log::{error, logger, Record}; #[derive(Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd, Debug)] pub struct JobId { @@ -10,10 +10,6 @@ pub struct JobId { } pub trait JobMonitor { - // pub fn report(&self, status: impl Into) { - // self.0.set_status(status.into()); - // } - /// Implementation to allow use with [`write!`]. fn write_fmt(&self, args: fmt::Arguments<'_>); } @@ -32,7 +28,32 @@ pub struct LogMonitor {} impl JobMonitor for LogMonitor { fn write_fmt(&self, args: fmt::Arguments<'_>) { - let r = Record::builder().args(args).level(log::Level::Info).build(); + let r = Record::builder() + .args(args) + .level(log::Level::Debug) + .build(); logger().log(&r); } } + +pub struct ReportFileMonitor { + pub monitor: Monitor, + pub outf: Mutex, +} + +impl JobMonitor for ReportFileMonitor { + fn write_fmt(&self, args: fmt::Arguments<'_>) { + if let Ok(mut f) = self.outf.lock() { + let mut r = || { + f.write_fmt(args)?; + write!(f, "\n")?; + Ok::<(), Box>(()) + }; + match r() { + Ok(_) => (), + Err(e) => error!("{}", e.to_string()), + } + } + self.monitor.write_fmt(args); + } +} diff --git a/server-lib/src/lib.rs b/server-lib/src/lib.rs index 91d18be9..1b6c53ab 100644 --- a/server-lib/src/lib.rs +++ b/server-lib/src/lib.rs @@ -26,6 +26,7 @@ use clap::Arg; use config::Config; use futures_util::TryStreamExt as _; use girlboss::Girlboss; +use jobs::LogMonitor; use log::{error, info}; pub use orgauth; use orgauth::{data::UserId, util}; @@ -559,6 +560,10 @@ async fn zk_interface_check_upstreaming( let mut br = StreamReader::new(rstream); + let lm = LogMonitor {}; + + // TODO: make a sync note? + Ok( HttpResponse::Ok().json( sync::sync_from_stream( @@ -569,6 +574,7 @@ async fn zk_interface_check_upstreaming( None, &mut sqldata::zknotes_callbacks(), &mut br, + &lm, ) .await?, ), diff --git a/server-lib/src/sqldata.rs b/server-lib/src/sqldata.rs index 84070f0a..83dd5442 100644 --- a/server-lib/src/sqldata.rs +++ b/server-lib/src/sqldata.rs @@ -2273,6 +2273,81 @@ pub fn save_importzknotes( Ok(()) } +pub fn make_file_entry( + conn: &Connection, + files_dir: &Path, + uid: UserId, + name: &String, + fpath: &Path, + copy: bool, +) -> Result { + // compute hash. + let fh = sha256::try_digest(fpath)?; + let size = std::fs::metadata(fpath)?.len(); + let hashpath = files_dir.join(Path::new(fh.as_str())); + + // file exists? + if hashpath.exists() { + // file already exists. don't need the new one. + std::fs::remove_file(fpath)?; + } else { + if copy { + // move into hashed-files dir. + std::fs::copy(fpath, hashpath)?; + } else { + // move into hashed-files dir. + std::fs::rename(fpath, hashpath)?; + } + } + + // table entry exists? + let oid: Option = + match conn.query_row("select id from file where hash = ?1", params![fh], |row| { + Ok(row.get(0)?) + }) { + Ok(v) => Ok(Some(v)), + Err(rusqlite::Error::QueryReturnedNoRows) => Ok(None), + Err(x) => Err(x), + }?; + + // use existing file.id, or create new + let fid = match oid { + Some(fid) => fid, + None => { + let now = now()?; + // add table entry + conn.execute( + "insert into file (hash, createdate, size) + values (?1, ?2, ?3)", + params![fh, now, size], + )?; + conn.last_insert_rowid() + } + }; + + Ok(fid) + + // // make a new note. + // let (id, sn) = save_zknote( + // &conn, + // uid, + // &SaveZkNote { + // id: None, + // title: name.to_string(), + // pubid: None, + // content: "".to_string(), + // editable: false, + // showtitle: false, + // deleted: false, + // }, + // )?; + + // // set the file id in that note. + // set_zknote_file(&conn, id, fid)?; + + // Ok((id, sn.id, fid)) +} + pub fn make_file_note( conn: &Connection, files_dir: &Path, @@ -2281,6 +2356,7 @@ pub fn make_file_note( fpath: &Path, copy: bool, ) -> Result<(i64, ZkNoteId, i64), zkerr::Error> { + /* // compute hash. let fh = sha256::try_digest(fpath)?; let size = std::fs::metadata(fpath)?.len(); @@ -2335,6 +2411,20 @@ pub fn make_file_note( conn.last_insert_rowid() } }; + */ + + let fid = make_file_entry(conn, files_dir, uid, name, fpath, copy)?; + + // note exists too, for this user? + match conn.query_row_and_then( + "select id, uuid from zknote where file = ?1 and user = ?2", + params![fid, uid.to_i64()], + |row| Ok((row.get(0)?, row.get::(1)?)), + ) { + Ok((id, uuid)) => return Ok((id, Uuid::parse_str(uuid.as_str())?.into(), fid)), + Err(rusqlite::Error::QueryReturnedNoRows) => (), + Err(e) => Err(e)?, + } // make a new note. let (id, sn) = save_zknote( diff --git a/server-lib/src/sync.rs b/server-lib/src/sync.rs index 7a8f53c9..b5e1ef5d 100644 --- a/server-lib/src/sync.rs +++ b/server-lib/src/sync.rs @@ -196,13 +196,12 @@ pub fn temp_tables(conn: &Connection) -> Result { } pub async fn sync( - dbpath: &Path, + conn: &Arc, file_path: &Path, uid: UserId, callbacks: &mut Callbacks, monitor: &dyn JobMonitor, -) -> Result> { - let conn = Arc::new(sqldata::connection_open(dbpath)?); +) -> Result> { let user = orgauth::dbfun::read_user_by_id(&conn, uid)?; // TODO pass this in from calling ftn? let extra_login_data = sqldata::read_extra_login_data(&conn, user.id)?; // let mut callbacks = &mut zknotes_callbacks(); @@ -221,7 +220,7 @@ pub async fn sync( write!(monitor, "starting sync from remote"); // TODO: pass in 'now'? - let res = sync_from_remote( + sync_from_remote( &conn, &user, after, @@ -234,33 +233,28 @@ pub async fn sync( ) .await?; - match res { - PrivateReply::PvySyncComplete => { - write!(monitor, "starting sync to remote"); - let remres = sync_to_remote( - conn.clone(), - file_path, - &user, - Some(ttn.notetemp.clone()), - Some(ttn.linktemp.clone()), - Some(ttn.archivelinktemp.clone()), - after, - callbacks, - monitor, - ) - .await?; + write!(monitor, "starting sync to remote"); + sync_to_remote( + conn.clone(), + file_path, + &user, + Some(ttn.notetemp.clone()), + Some(ttn.linktemp.clone()), + Some(ttn.archivelinktemp.clone()), + after, + callbacks, + monitor, + ) + .await?; - let unote = user_note_id(&conn, user.id)?; - save_sync(&conn, user.id, unote, CompletedSync { after, now }).await?; + let unote = user_note_id(&conn, user.id)?; + let syncnoteid = save_sync(&conn, user.id, unote, CompletedSync { after, now }).await?; - tr.commit()?; + tr.commit()?; - write!(monitor, "sync completed"); + write!(monitor, "sync completed"); - Ok(remres) - } - _ => Ok(res), - } + Ok(syncnoteid) } #[derive(Deserialize, Serialize, Debug, PartialEq)] @@ -559,7 +553,7 @@ pub async fn sync_from_remote( archivelinktemp: &String, callbacks: &mut Callbacks, monitor: &dyn JobMonitor, -) -> Result> { +) -> Result<(), Box> { let (c, url) = match (user.cookie.clone(), user.remote_url.clone()) { (Some(c), Some(url)) => (c, url), _ => return Err("can't remote sync - not a remote user".into()), @@ -596,14 +590,17 @@ pub async fn sync_from_remote( Some(archivelinktemp), callbacks, &mut sr, + monitor, ) .await?; + Ok(reply) } pub async fn read_sync_message( line: &mut String, br: &mut StreamReader, + monitor: &dyn JobMonitor, ) -> Result> where S: Stream> + Unpin, @@ -616,6 +613,7 @@ where } let sm = serde_json::from_str(line.trim())?; debug!("syncmessage : {:?}", sm); + write!(monitor, "{:?}", sm); Ok(sm) } @@ -627,7 +625,8 @@ pub async fn sync_from_stream( archivelinktemp: Option<&str>, callbacks: &mut Callbacks, br: &mut StreamReader, -) -> Result> + monitor: &dyn JobMonitor, +) -> Result<(), Box> where S: Stream> + Unpin, { @@ -639,7 +638,7 @@ where let mut sm; - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; let (_after, remotenow) = match sm { SyncMessage::SyncStart(after, rn) => (after, rn), @@ -657,7 +656,7 @@ where ); } - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; match sm { SyncMessage::PhantomUserHeader => (), @@ -672,7 +671,7 @@ where } } - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; let mut userhash = HashMap::::new(); while let SyncMessage::PhantomUser(ref pu) = sm { @@ -697,7 +696,7 @@ where }; } }; - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; } // ---------------------------------------------------------------------------------- @@ -715,7 +714,7 @@ where ); } - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; while let SyncMessage::ZkNote(ref note, ref mbf) = sm { let uid = UserId::Uid( @@ -851,7 +850,7 @@ where )?; } - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; } // ---------------------------------------------------------------------------------- @@ -869,7 +868,7 @@ where ); } - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; while let SyncMessage::ZkNote(ref note, ref _mbf) = sm { // TODO: make file source record (?) @@ -911,7 +910,7 @@ where params![id], )?; } - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; } if let SyncMessage::ArchiveZkLinkHeader = sm { @@ -928,7 +927,7 @@ where // ---------------------------------------------------------------------------------- // archive links // ---------------------------------------------------------------------------------- - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; let mut count = 0; let mut saved = 0; @@ -973,7 +972,7 @@ where count = count + 1; saved = saved + mbid.map_or(0, |_| 1); // bytes = bytes + nc; - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; } // ---------------------------------------------------------------------------------- @@ -992,7 +991,7 @@ where count = 0; saved = 0; - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; while let SyncMessage::UuidZkLink(ref l) = sm { let ins = match conn.execute( @@ -1057,7 +1056,7 @@ where count = count + 1; saved = saved + ins; // bytes = bytes + nc; - sm = read_sync_message(&mut line, br).await?; + sm = read_sync_message(&mut line, br, monitor).await?; } // drop zklinks which have a zklinkarchive with newer deletedate let _dropped = conn.execute( @@ -1071,7 +1070,7 @@ where params![], )?; - Ok(PrivateReply::PvySyncComplete) + Ok(()) } // Make a stream of all the records needed to sync the remote. @@ -1085,7 +1084,7 @@ pub async fn sync_to_remote( after: Option, callbacks: &mut Callbacks, monitor: &dyn JobMonitor, -) -> Result { +) -> Result<(), zkerr::Error> { // TODO: get time on remote system, bail if too far out. let (c, url) = match (user.cookie.clone(), user.remote_url.clone()) { @@ -1147,7 +1146,7 @@ pub async fn sync_to_remote( // TODO: send back Sync results... how many records and etc. - Ok(PrivateReply::PvySyncComplete) + Ok(()) } pub fn bytesify( From 9b54ac2fa8b04fdd20a655a91e33c11e7cf08777 Mon Sep 17 00:00:00 2001 From: Ben Burdette <> Date: Sat, 8 Feb 2025 10:40:00 -0700 Subject: [PATCH 2/4] code cleanup --- server-lib/src/interfaces.rs | 26 +---------- server-lib/src/jobs.rs | 3 +- server-lib/src/sqldata.rs | 84 +++--------------------------------- 3 files changed, 8 insertions(+), 105 deletions(-) diff --git a/server-lib/src/interfaces.rs b/server-lib/src/interfaces.rs index 98c82c41..e22fe0c2 100644 --- a/server-lib/src/interfaces.rs +++ b/server-lib/src/interfaces.rs @@ -321,7 +321,7 @@ pub async fn zk_interface_loggedin( let c = sqldata::connection_open(dbpath.as_path())?; let conn = Arc::new(c); let snid = sync::sync(&conn, &file_path, uid, &mut callbacks, &gbm).await?; - write!(gbm, "sync completed"); + let fid = make_file_entry( &*conn, file_path.as_path(), @@ -330,11 +330,9 @@ pub async fn zk_interface_loggedin( lfn.as_path(), false, )?; - // PrivateReply::PvySyncComplete set_zknote_file(&*conn, snid, fid)?; - // conn.commit()?; Ok(()) } .await; @@ -343,28 +341,6 @@ pub async fn zk_interface_loggedin( Ok(()) => (), Err(e) => write!(gbm, "sync err: {:?}", e), } - // add the log to the sync note. - - // match sqldata::connection_open(dbpath.as_path()) { - // Err(e) => write!(gbm, "sync err: {:?}", e), - // Ok(c) => { - // let conn = Arc::new(c); - // match sync::sync(&conn, &file_path, uid, &mut callbacks, &gbm).await { - // Err(e) => write!(gbm, "sync err: {:?}", e), - // Ok(snid) => - // { - // write!(gbm, "sync completed"); - // let fid = make_file_entry(&*conn, file_path.as_path(), uid, nam, lfn.as_path(), false)?; - // // PrivateReply::PvySyncComplete - - // set_zknote_file(&*conn, snid, fid) - // // let syncnoteid = save_sync(&conn, user.id, unote, CompletedSync { after, now }).await?; - - // conn.commit()?; - // } - // }; - - // // add the log to the sync note. actix_rt::System::current().stop(); }) diff --git a/server-lib/src/jobs.rs b/server-lib/src/jobs.rs index 15e45df3..c5144631 100644 --- a/server-lib/src/jobs.rs +++ b/server-lib/src/jobs.rs @@ -10,7 +10,7 @@ pub struct JobId { } pub trait JobMonitor { - /// Implementation to allow use with [`write!`]. + // Implementation to allow use with [`write!`]. fn write_fmt(&self, args: fmt::Arguments<'_>); } @@ -44,6 +44,7 @@ pub struct ReportFileMonitor { impl JobMonitor for ReportFileMonitor { fn write_fmt(&self, args: fmt::Arguments<'_>) { if let Ok(mut f) = self.outf.lock() { + // block returning Result. Works better in async! let mut r = || { f.write_fmt(args)?; write!(f, "\n")?; diff --git a/server-lib/src/sqldata.rs b/server-lib/src/sqldata.rs index 83dd5442..2b11e2ee 100644 --- a/server-lib/src/sqldata.rs +++ b/server-lib/src/sqldata.rs @@ -2326,26 +2326,6 @@ pub fn make_file_entry( }; Ok(fid) - - // // make a new note. - // let (id, sn) = save_zknote( - // &conn, - // uid, - // &SaveZkNote { - // id: None, - // title: name.to_string(), - // pubid: None, - // content: "".to_string(), - // editable: false, - // showtitle: false, - // deleted: false, - // }, - // )?; - - // // set the file id in that note. - // set_zknote_file(&conn, id, fid)?; - - // Ok((id, sn.id, fid)) } pub fn make_file_note( @@ -2356,72 +2336,18 @@ pub fn make_file_note( fpath: &Path, copy: bool, ) -> Result<(i64, ZkNoteId, i64), zkerr::Error> { - /* - // compute hash. - let fh = sha256::try_digest(fpath)?; - let size = std::fs::metadata(fpath)?.len(); - let hashpath = files_dir.join(Path::new(fh.as_str())); - - // file exists? - if hashpath.exists() { - // file already exists. don't need the new one. - std::fs::remove_file(fpath)?; - } else { - if copy { - // move into hashed-files dir. - std::fs::copy(fpath, hashpath)?; - } else { - // move into hashed-files dir. - std::fs::rename(fpath, hashpath)?; - } - } - - // table entry exists? - let oid: Option = - match conn.query_row("select id from file where hash = ?1", params![fh], |row| { - Ok(row.get(0)?) - }) { - Ok(v) => Ok(Some(v)), - Err(rusqlite::Error::QueryReturnedNoRows) => Ok(None), - Err(x) => Err(x), - }?; - - // use existing file.id, or create new - let fid = match oid { - Some(fid) => { - // note exists too, for this user? - match conn.query_row_and_then( - "select id, uuid from zknote where file = ?1 and user = ?2", - params![fid, uid.to_i64()], - |row| Ok((row.get(0)?, row.get::(1)?)), - ) { - Ok((id, uuid)) => return Ok((id, Uuid::parse_str(uuid.as_str())?.into(), fid)), - Err(rusqlite::Error::QueryReturnedNoRows) => fid, - Err(e) => Err(e)?, - } - } - None => { - let now = now()?; - // add table entry - conn.execute( - "insert into file (hash, createdate, size) - values (?1, ?2, ?3)", - params![fh, now, size], - )?; - conn.last_insert_rowid() - } - }; - */ - let fid = make_file_entry(conn, files_dir, uid, name, fpath, copy)?; - // note exists too, for this user? + // note already exists, for this user? match conn.query_row_and_then( "select id, uuid from zknote where file = ?1 and user = ?2", params![fid, uid.to_i64()], |row| Ok((row.get(0)?, row.get::(1)?)), ) { - Ok((id, uuid)) => return Ok((id, Uuid::parse_str(uuid.as_str())?.into(), fid)), + Ok((id, uuid)) => { + // return existing note. + return Ok((id, Uuid::parse_str(uuid.as_str())?.into(), fid)); + } Err(rusqlite::Error::QueryReturnedNoRows) => (), Err(e) => Err(e)?, } From 5864152d7d0504e6ccdc5bcc86df5245386f3830 Mon Sep 17 00:00:00 2001 From: Ben Burdette <> Date: Sat, 8 Feb 2025 13:18:48 -0700 Subject: [PATCH 3/4] more compact log format --- Cargo.lock | 185 +++--------------------------------- server-lib/src/sync.rs | 4 +- zkprotocol/src/sync_data.rs | 56 ++++++++++- 3 files changed, 70 insertions(+), 175 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0182089..dde516b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rand 0.8.5", - "sha1 0.10.5", + "sha1", "smallvec", "tokio", "tokio-util", @@ -296,7 +296,7 @@ dependencies = [ "serde_urlencoded", "smallvec", "socket2 0.4.9", - "time 0.3.36", + "time 0.3.37", "url", ] @@ -611,12 +611,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad9e605929a6964efbec5ac0884bd0fe93f12a3b1eb271f52c251316640c68d9" -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - [[package]] name = "base64" version = "0.13.1" @@ -790,12 +784,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "const_fn" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" - [[package]] name = "convert_case" version = "0.4.0" @@ -816,7 +804,7 @@ dependencies = [ "rand 0.8.5", "sha2", "subtle", - "time 0.3.36", + "time 0.3.37", "version_check", ] @@ -833,7 +821,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "time 0.3.36", + "time 0.3.37", "url", ] @@ -944,7 +932,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", + "rustc_version", "syn 1.0.109", ] @@ -959,12 +947,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "either" version = "1.8.1" @@ -1835,7 +1817,7 @@ dependencies = [ "serde_json", "sha256", "simple-error", - "time 0.2.27", + "time 0.3.37", "timer", "tokio", "toml", @@ -1945,12 +1927,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" version = "1.0.87" @@ -2180,22 +2156,13 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver", ] [[package]] @@ -2288,27 +2255,12 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" version = "1.0.193" @@ -2361,15 +2313,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - [[package]] name = "sha1" version = "0.10.5" @@ -2381,12 +2324,6 @@ dependencies = [ "digest", ] -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - [[package]] name = "sha2" version = "0.10.7" @@ -2470,64 +2407,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "standback" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] - -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version 0.2.3", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn 1.0.109", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1 0.6.1", - "syn 1.0.109", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "strsim" version = "0.8.0" @@ -2665,24 +2544,9 @@ dependencies = [ [[package]] name = "time" -version = "0.2.27" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" -dependencies = [ - "const_fn", - "libc", - "standback", - "stdweb", - "time-macros 0.1.1", - "version_check", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2690,7 +2554,7 @@ dependencies = [ "powerfmt", "serde", "time-core", - "time-macros 0.2.18", + "time-macros", ] [[package]] @@ -2701,37 +2565,14 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - -[[package]] -name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] -[[package]] -name = "time-macros-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn 1.0.109", -] - [[package]] name = "timer" version = "0.2.0" @@ -3355,7 +3196,7 @@ dependencies = [ "serde_json", "sha256", "simple-error", - "time 0.3.36", + "time 0.3.37", "timer", "tokio", "tokio-util", diff --git a/server-lib/src/sync.rs b/server-lib/src/sync.rs index b5e1ef5d..c67d9f8d 100644 --- a/server-lib/src/sync.rs +++ b/server-lib/src/sync.rs @@ -38,7 +38,7 @@ use zkprotocol::private::{PrivateReply, PrivateRequest}; use zkprotocol::search::{ AndOr, OrderDirection, OrderField, Ordering, ResultType, SearchMod, TagSearch, ZkNoteSearch, }; -use zkprotocol::sync_data::SyncMessage; +use zkprotocol::sync_data::{show_syncmsg_logformat, SyncMessage}; use zkprotocol::upload::UploadReply; fn convert_payloaderr(err: PayloadError) -> std::io::Error { @@ -613,7 +613,7 @@ where } let sm = serde_json::from_str(line.trim())?; debug!("syncmessage : {:?}", sm); - write!(monitor, "{:?}", sm); + write!(monitor, "{:?}", show_syncmsg_logformat(&sm)); Ok(sm) } diff --git a/zkprotocol/src/sync_data.rs b/zkprotocol/src/sync_data.rs index 254834c5..3780061b 100644 --- a/zkprotocol/src/sync_data.rs +++ b/zkprotocol/src/sync_data.rs @@ -1,4 +1,4 @@ -use orgauth::data::UserId; +use orgauth::{data::UserId, util::show_time}; use uuid::Uuid; use crate::{ @@ -62,3 +62,57 @@ impl From for SyncMessage { SyncMessage::UuidZkLink(a) } } + +pub fn show_syncmsg_logformat(sm: &SyncMessage) -> String { + // TODO: add time on first msg. + match sm { + SyncMessage::SyncStart(from, to) => { + format!( + "SyncStart from {}, to {}", + from + .and_then(|x| show_time(x / 1000)) + .unwrap_or("".to_string()), + show_time(*to / 1000).unwrap_or("".to_string()) + ) + } + SyncMessage::PhantomUserHeader => { + format!("PhantomUserHeader") + } + SyncMessage::PhantomUser(zpu) => { + format!("PhantomUser {} {}", zpu.uuid, zpu.name) + } + SyncMessage::ZkSearchResultHeader(_zksearchresultheader) => { + format!("ZkSearchResultHeader") + } + SyncMessage::ZkNoteId(str) => { + format!("ZkNoteId {}", str) + } + SyncMessage::ZkNote(zknote, _mbfileinfo) => { + format!("ZkNote {}, {}", zknote.title, zknote.id) + } + SyncMessage::ArchiveZkLinkHeader => { + format!("ArchiveZkLinkHeader") + } + SyncMessage::ArchiveZkLink(archivezklink) => { + format!( + "ArchiveZkLink from {}, to {}", + archivezklink.fromUuid, archivezklink.toUuid + ) + } + SyncMessage::UuidZkLinkHeader => { + format!("UuidZkLinkHeader") + } + SyncMessage::UuidZkLink(uuidzklink) => { + format!( + "UuidZkLink from {}, to {}", + uuidzklink.fromUuid, uuidzklink.toUuid + ) + } + SyncMessage::SyncError(string) => { + format!("SyncError: {}", string) + } + SyncMessage::SyncEnd => { + format!("SyncEnd") + } + } +} From 99fe0369d8aab97bffc854058543c463d3baf685 Mon Sep 17 00:00:00 2001 From: Ben Burdette <> Date: Sat, 8 Feb 2025 18:46:40 -0700 Subject: [PATCH 4/4] bump orgauth --- orgauth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orgauth b/orgauth index 3f54aba5..35152388 160000 --- a/orgauth +++ b/orgauth @@ -1 +1 @@ -Subproject commit 3f54aba5af6fd8c93777cf19b2acf0ff2592b347 +Subproject commit 351523880ed77d21016cf4d2863d064ad4f40f97