diff --git a/Cargo.lock b/Cargo.lock index e3a5af0f..e77930a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3064,9 +3064,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru-slab" @@ -3227,6 +3227,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "nuid" version = "0.5.0" @@ -3402,9 +3411,9 @@ dependencies = [ [[package]] name = "owo-colors" -version = "4.2.1" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26995317201fa17f3656c36716aed4a7c81743a9634ac4c99c0eeda495db0cec" +checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" dependencies = [ "supports-color 2.1.0", "supports-color 3.0.2", @@ -4837,6 +4846,7 @@ dependencies = [ "sqlx", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -4888,6 +4898,7 @@ dependencies = [ "tempfile", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -4919,6 +4930,7 @@ dependencies = [ "tempfile", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -4941,6 +4953,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-tungstenite", + "tracing", "tungstenite", "url", ] @@ -4968,6 +4981,7 @@ dependencies = [ "sqlx", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -4995,6 +5009,7 @@ dependencies = [ "sqlx", "tokio", "tokio-stream", + "tracing", "uuid", ] @@ -5018,6 +5033,7 @@ dependencies = [ "sqlx", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -5034,6 +5050,7 @@ dependencies = [ "sqlx", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -5053,6 +5070,7 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", + "tracing", "uuid", ] @@ -5080,6 +5098,7 @@ dependencies = [ "sqlx", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -5089,6 +5108,7 @@ dependencies = [ "anyhow", "clap", "dotenv", + "owo-colors", "rocksky-analytics", "rocksky-dropbox", "rocksky-googledrive", @@ -5099,6 +5119,9 @@ dependencies = [ "rocksky-tracklist", "rocksky-webscrobbler", "tokio", + "tracing", + "tracing-log", + "tracing-subscriber", ] [[package]] @@ -5630,6 +5653,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -6440,6 +6472,15 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "time" version = "0.3.44" @@ -6780,6 +6821,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] @@ -6958,6 +7025,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vcpkg" version = "0.2.15" diff --git a/crates/analytics/Cargo.toml b/crates/analytics/Cargo.toml index b014274b..a81d1436 100644 --- a/crates/analytics/Cargo.toml +++ b/crates/analytics/Cargo.toml @@ -28,3 +28,4 @@ polars = "0.46.0" clap = "4.5.31" actix-web = "4.9.0" tokio-stream = { version = "0.1.17", features = ["full"] } +tracing = "0.1.41" diff --git a/crates/analytics/src/cmd/serve.rs b/crates/analytics/src/cmd/serve.rs index c04a185d..d4be3148 100644 --- a/crates/analytics/src/cmd/serve.rs +++ b/crates/analytics/src/cmd/serve.rs @@ -29,7 +29,7 @@ async fn call_method( req: HttpRequest, ) -> Result { let method = req.match_info().get("method").unwrap_or("unknown"); - println!("Method: {}", method.bright_green()); + tracing::info!(method = %method.bright_green(), "API call"); let conn = data.get_ref().clone(); handle(method, &mut payload, &req, conn) @@ -45,7 +45,7 @@ pub async fn serve(conn: Arc>) -> Result<(), Error> { let addr = format!("{}:{}", host, port); let url = format!("http://{}", addr); - println!("Listening on {}", url.bright_green()); + tracing::info!(url = %url.bright_green(), "Listening on"); let conn = conn.clone(); HttpServer::new(move || { diff --git a/crates/analytics/src/core.rs b/crates/analytics/src/core.rs index 4f67b565..a3f6d6a5 100644 --- a/crates/analytics/src/core.rs +++ b/crates/analytics/src/core.rs @@ -194,12 +194,7 @@ pub async fn load_tracks(conn: Arc>, pool: &Pool) -> .await?; for (i, track) in tracks.clone().into_iter().enumerate() { - println!( - "track {} - {} - {}", - i, - track.title.bright_green(), - track.artist - ); + tracing::info!(track = i, title = %track.title.bright_green(), artist = %track.artist); match conn.execute( "INSERT INTO tracks ( id, @@ -255,11 +250,11 @@ pub async fn load_tracks(conn: Arc>, pool: &Pool) -> ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting track"), } } - println!("tracks: {:?}", tracks.len()); + tracing::info!(tracks = tracks.len(), "Loaded tracks"); Ok(()) } @@ -277,7 +272,7 @@ pub async fn load_artists( .await?; for (i, artist) in artists.clone().into_iter().enumerate() { - println!("artist {} - {}", i, artist.name.bright_green()); + tracing::info!(artist = i, name = %artist.name.bright_green()); match conn.execute( "INSERT INTO artists ( id, @@ -323,11 +318,11 @@ pub async fn load_artists( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting artist"), } } - println!("artists: {:?}", artists.len()); + tracing::info!(artists = artists.len(), "Loaded artists"); Ok(()) } @@ -342,7 +337,7 @@ pub async fn load_albums(conn: Arc>, pool: &Pool) -> .await?; for (i, album) in albums.clone().into_iter().enumerate() { - println!("album {} - {}", i, album.title.bright_green()); + tracing::info!(album = i, title = %album.title.bright_green(), artist = %album.artist); match conn.execute( "INSERT INTO albums ( id, @@ -388,11 +383,11 @@ pub async fn load_albums(conn: Arc>, pool: &Pool) -> ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting album"), } } - println!("albums: {:?}", albums.len()); + tracing::info!(albums = albums.len(), "Loaded albums"); Ok(()) } @@ -407,7 +402,7 @@ pub async fn load_users(conn: Arc>, pool: &Pool) -> .await?; for (i, user) in users.clone().into_iter().enumerate() { - println!("user {} - {}", i, user.display_name.bright_green()); + tracing::info!(user = i, name = %user.display_name.bright_green()); match conn.execute( "INSERT INTO users ( id, @@ -429,11 +424,11 @@ pub async fn load_users(conn: Arc>, pool: &Pool) -> ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting user"), } } - println!("users: {:?}", users.len()); + tracing::info!(users = users.len(), "Loaded users"); Ok(()) } @@ -451,15 +446,7 @@ pub async fn load_scrobbles( .await?; for (i, scrobble) in scrobbles.clone().into_iter().enumerate() { - println!( - "scrobble {} - {}", - i, - match scrobble.uri.clone() { - Some(uri) => uri.to_string(), - None => "None".to_string(), - } - .bright_green() - ); + tracing::info!(scrobble = i, uri = %scrobble.uri.clone().unwrap_or_else(|| "None".to_string()).bright_green()); match conn.execute( "INSERT INTO scrobbles ( id, @@ -489,11 +476,11 @@ pub async fn load_scrobbles( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting scrobble"), } } - println!("scrobbles: {:?}", scrobbles.len()); + tracing::info!(scrobbles = scrobbles.len(), "Loaded scrobbles"); Ok(()) } @@ -511,12 +498,7 @@ pub async fn load_album_tracks( .await?; for (i, album_track) in album_tracks.clone().into_iter().enumerate() { - println!( - "album_track {} - {} - {}", - i, - album_track.album_id.bright_green(), - album_track.track_id - ); + tracing::info!(album_track = i, album_id = %album_track.album_id.bright_green(), track_id = %album_track.track_id); match conn.execute( "INSERT INTO album_tracks ( id, @@ -532,10 +514,11 @@ pub async fn load_album_tracks( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting album_track"), } } - println!("album_tracks: {:?}", album_tracks.len()); + + tracing::info!(album_tracks = album_tracks.len(), "Loaded album_tracks"); Ok(()) } @@ -553,12 +536,7 @@ pub async fn load_loved_tracks( .await?; for (i, loved_track) in loved_tracks.clone().into_iter().enumerate() { - println!( - "loved_track {} - {} - {}", - i, - loved_track.user_id.bright_green(), - loved_track.track_id - ); + tracing::info!(loved_track = i, user_id = %loved_track.user_id.bright_green(), track_id = %loved_track.track_id); match conn.execute( "INSERT INTO loved_tracks ( id, @@ -577,11 +555,11 @@ pub async fn load_loved_tracks( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting loved_track"), } } - println!("loved_tracks: {:?}", loved_tracks.len()); + tracing::info!(loved_tracks = loved_tracks.len(), "Loaded loved_tracks"); Ok(()) } @@ -599,12 +577,7 @@ pub async fn load_artist_tracks( .await?; for (i, artist_track) in artist_tracks.clone().into_iter().enumerate() { - println!( - "artist_track {} - {} - {}", - i, - artist_track.artist_id.bright_green(), - artist_track.track_id - ); + tracing::info!(artist_track = i, artist_id = %artist_track.artist_id.bright_green(), track_id = %artist_track.track_id); match conn.execute( "INSERT INTO artist_tracks (id, artist_id, track_id, created_at) VALUES (?, ?, ?, ?)", params![ @@ -615,11 +588,11 @@ pub async fn load_artist_tracks( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting artist_track"), } } - println!("artist_tracks: {:?}", artist_tracks.len()); + tracing::info!(artist_tracks = artist_tracks.len(), "Loaded artist_tracks"); Ok(()) } @@ -637,12 +610,7 @@ pub async fn load_artist_albums( .await?; for (i, artist_album) in artist_albums.clone().into_iter().enumerate() { - println!( - "artist_albums {} - {} - {}", - i, - artist_album.artist_id.bright_green(), - artist_album.album_id - ); + tracing::info!(artist_album = i, artist_id = %artist_album.artist_id.bright_green(), album_id = %artist_album.album_id); match conn.execute( "INSERT INTO artist_albums (id, artist_id, album_id, created_at) VALUES (?, ?, ?, ?)", params![ @@ -653,11 +621,11 @@ pub async fn load_artist_albums( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting artist_album"), } } - println!("artist_albums: {:?}", artist_albums.len()); + tracing::info!(artist_albums = artist_albums.len(), "Loaded artist_albums"); Ok(()) } @@ -675,12 +643,7 @@ pub async fn load_user_albums( .await?; for (i, user_album) in user_albums.clone().into_iter().enumerate() { - println!( - "user_album {} - {} - {}", - i, - user_album.user_id.bright_green(), - user_album.album_id - ); + tracing::info!(user_album = i, user_id = %user_album.user_id.bright_green(), album_id = %user_album.album_id); match conn.execute( "INSERT INTO user_albums (id, user_id, album_id, created_at) VALUES (?, ?, ?, ?)", params![ @@ -691,11 +654,11 @@ pub async fn load_user_albums( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting user_album"), } } - println!("user_albums: {:?}", user_albums.len()); + tracing::info!(user_albums = user_albums.len(), "Loaded user_albums"); Ok(()) } @@ -713,12 +676,7 @@ pub async fn load_user_artists( .await?; for (i, user_artist) in user_artists.clone().into_iter().enumerate() { - println!( - "user_artist {} - {} - {}", - i, - user_artist.user_id.bright_green(), - user_artist.artist_id - ); + tracing::info!(user_artist = i, user_id = %user_artist.user_id.bright_green(), artist_id = %user_artist.artist_id); match conn.execute( "INSERT INTO user_artists (id, user_id, artist_id, created_at) VALUES (?, ?, ?, ?)", params![ @@ -729,11 +687,11 @@ pub async fn load_user_artists( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting user_artist"), } } - println!("user_artists: {:?}", user_artists.len()); + tracing::info!(user_artists = user_artists.len(), "Loaded user_artists"); Ok(()) } @@ -751,12 +709,7 @@ pub async fn load_user_tracks( .await?; for (i, user_track) in user_tracks.clone().into_iter().enumerate() { - println!( - "user_track {} - {} - {}", - i, - user_track.user_id.bright_green(), - user_track.track_id - ); + tracing::info!(user_track = i, user_id = %user_track.user_id.bright_green(), track_id = %user_track.track_id); match conn.execute( "INSERT INTO user_tracks (id, user_id, track_id, created_at) VALUES (?, ?, ?, ?)", params![ @@ -767,10 +720,10 @@ pub async fn load_user_tracks( ], ) { Ok(_) => (), - Err(e) => println!("error: {}", e), + Err(e) => tracing::error!(error = %e, "Error inserting user_track"), } } - println!("user_tracks: {:?}", user_tracks.len()); + tracing::info!(user_tracks = user_tracks.len(), "Loaded user_tracks"); Ok(()) } diff --git a/crates/analytics/src/handlers/albums.rs b/crates/analytics/src/handlers/albums.rs index 6a71b9c3..3976ce3c 100644 --- a/crates/analytics/src/handlers/albums.rs +++ b/crates/analytics/src/handlers/albums.rs @@ -22,6 +22,7 @@ pub async fn get_albums( let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(20); let did = params.user_did; + tracing::info!(limit, offset, user_did = ?did, "Get albums"); let conn = conn.lock().unwrap(); let mut stmt = match did { @@ -118,6 +119,7 @@ pub async fn get_top_albums( let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(20); let did = params.user_did; + tracing::info!(limit, offset, user_did = ?did, "Get top albums"); let conn = conn.lock().unwrap(); let mut stmt = match did { @@ -237,6 +239,8 @@ pub async fn get_album_tracks( let body = read_payload!(payload); let params = serde_json::from_slice::(&body)?; let conn = conn.lock().unwrap(); + tracing::info!(album_id = %params.album_id, "Get album tracks"); + let mut stmt = conn.prepare(r#" SELECT t.id, diff --git a/crates/analytics/src/handlers/artists.rs b/crates/analytics/src/handlers/artists.rs index c6138b7d..0be49544 100644 --- a/crates/analytics/src/handlers/artists.rs +++ b/crates/analytics/src/handlers/artists.rs @@ -318,6 +318,7 @@ pub async fn get_artist_albums( let body = read_payload!(payload); let params = serde_json::from_slice::(&body)?; let conn = conn.lock().unwrap(); + tracing::info!(artist_id = %params.artist_id, "Get artist albums"); let mut stmt = conn.prepare(r#" SELECT @@ -376,6 +377,7 @@ pub async fn get_artist_listeners( let pagination = params.pagination.unwrap_or_default(); let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(10); + tracing::info!(artist_id = %params.artist_id, limit, offset, "Get artist listeners"); let conn = conn.lock().unwrap(); let mut stmt = diff --git a/crates/analytics/src/handlers/scrobbles.rs b/crates/analytics/src/handlers/scrobbles.rs index b752dd1b..ce4e9fed 100644 --- a/crates/analytics/src/handlers/scrobbles.rs +++ b/crates/analytics/src/handlers/scrobbles.rs @@ -19,6 +19,7 @@ pub async fn get_scrobbles( let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(20); let did = params.user_did; + tracing::info!(limit, offset, user_did = ?did, "Get scrobbles"); let conn = conn.lock().unwrap(); let mut stmt = match did { @@ -139,6 +140,7 @@ pub async fn get_distinct_scrobbles( let pagination = params.pagination.unwrap_or_default(); let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(10); + tracing::info!(limit, offset, user_did = ?params.user_did, "Get distinct scrobbles"); let conn = conn.lock().unwrap(); let mut stmt = conn.prepare( diff --git a/crates/analytics/src/handlers/stats.rs b/crates/analytics/src/handlers/stats.rs index 18c4153c..a2b2f764 100644 --- a/crates/analytics/src/handlers/stats.rs +++ b/crates/analytics/src/handlers/stats.rs @@ -23,6 +23,7 @@ pub async fn get_stats( let body = read_payload!(payload); let params = serde_json::from_slice::(&body)?; + tracing::info!(user_did = ?params.user_did, "Get stats"); let conn = conn.lock().unwrap(); let mut stmt = conn.prepare("SELECT COUNT(*) FROM scrobbles s LEFT JOIN users u ON s.user_id = u.id WHERE u.did = ? OR u.handle = ?")?; @@ -118,6 +119,7 @@ pub async fn get_scrobbles_per_day( .end .unwrap_or(GetScrobblesPerDayParams::default().end.unwrap()); let did = params.user_did; + tracing::info!(start = %start, end = %end, user_did = ?did, "Get scrobbles per day"); let conn = conn.lock().unwrap(); match did { @@ -190,6 +192,7 @@ pub async fn get_scrobbles_per_month( .end .unwrap_or(GetScrobblesPerDayParams::default().end.unwrap()); let did = params.user_did; + tracing::info!(start = %start, end = %end, user_did = ?did, "Get scrobbles per month"); let conn = conn.lock().unwrap(); match did { @@ -266,6 +269,7 @@ pub async fn get_scrobbles_per_year( .end .unwrap_or(GetScrobblesPerDayParams::default().end.unwrap()); let did = params.user_did; + tracing::info!(start = %start, end = %end, user_did = ?did, "Get scrobbles per year"); let conn = conn.lock().unwrap(); match did { @@ -338,6 +342,8 @@ pub async fn get_album_scrobbles( .end .unwrap_or(GetAlbumScrobblesParams::default().end.unwrap()); let conn = conn.lock().unwrap(); + tracing::info!(album_id = %params.album_id, start = %start, end = %end, "Get album scrobbles"); + let mut stmt = conn.prepare( r#" SELECT @@ -379,6 +385,7 @@ pub async fn get_artist_scrobbles( .end .unwrap_or(GetArtistScrobblesParams::default().end.unwrap()); let conn = conn.lock().unwrap(); + tracing::info!(artist_id = %params.artist_id, start = %start, end = %end, "Get artist scrobbles"); let mut stmt = conn.prepare( r#" @@ -426,6 +433,7 @@ pub async fn get_track_scrobbles( .end .unwrap_or(GetTrackScrobblesParams::default().end.unwrap()); let conn = conn.lock().unwrap(); + tracing::info!(track_id = %params.track_id, start = %start, end = %end, "Get track scrobbles"); let mut stmt = conn.prepare( r#" diff --git a/crates/analytics/src/handlers/tracks.rs b/crates/analytics/src/handlers/tracks.rs index 761dbc8c..98591520 100644 --- a/crates/analytics/src/handlers/tracks.rs +++ b/crates/analytics/src/handlers/tracks.rs @@ -19,6 +19,7 @@ pub async fn get_tracks( let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(20); let did = params.user_did; + tracing::info!(limit, offset, user_did = ?did, "Get tracks"); let conn = conn.lock().unwrap(); match did { @@ -178,6 +179,7 @@ pub async fn get_loved_tracks( let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(20); let did = params.user_did; + tracing::info!(limit, offset, user_did = ?did, "Get loved tracks"); let conn = conn.lock().unwrap(); let mut stmt = conn.prepare( @@ -261,6 +263,7 @@ pub async fn get_top_tracks( let offset = pagination.skip.unwrap_or(0); let limit = pagination.take.unwrap_or(20); let did = params.user_did; + tracing::info!(limit, offset, user_did = ?did, "Get top tracks"); let conn = conn.lock().unwrap(); match did { diff --git a/crates/analytics/src/subscriber/mod.rs b/crates/analytics/src/subscriber/mod.rs index 5f803335..abe7d6e7 100644 --- a/crates/analytics/src/subscriber/mod.rs +++ b/crates/analytics/src/subscriber/mod.rs @@ -16,7 +16,7 @@ pub async fn subscribe(conn: Arc>) -> Result<(), Error> { let addr = env::var("NATS_URL").unwrap_or_else(|_| "nats://localhost:4222".to_string()); let conn = conn.clone(); let nc = connect(&addr).await?; - println!("Connected to NATS server at {}", addr.bright_green()); + tracing::info!(server = %addr.bright_green(), "Connected to NATS"); let nc = Arc::new(Mutex::new(nc)); on_scrobble(nc.clone(), conn.clone()); @@ -652,7 +652,7 @@ pub async fn save_track( Ok(_) => (), Err(e) => { if !e.to_string().contains("violates primary key constraint") { - println!("[artist_albums] error: {}", e); + tracing::error!("[artist_albums] error: {}", e); return Err(e.into()); } } @@ -684,7 +684,7 @@ pub async fn like(conn: Arc>, payload: LikePayload) -> Result< Ok(_) => (), Err(e) => { if !e.to_string().contains("violates primary key constraint") { - println!("[likes] error: {}", e); + tracing::error!("[likes] error: {}", e); return Err(e.into()); } } @@ -700,7 +700,7 @@ pub async fn unlike(conn: Arc>, payload: UnlikePayload) -> Res ) { Ok(_) => (), Err(e) => { - println!("[unlikes] error: {}", e); + tracing::error!("[unlikes] error: {}", e); return Err(e.into()); } } @@ -740,7 +740,7 @@ pub async fn save_user(conn: Arc>, payload: UserPayload) -> Re Ok(_) => (), Err(e) => { if !e.to_string().contains("violates primary key constraint") { - println!("[users] error: {}", e); + tracing::error!("[users] error: {}", e); return Err(e.into()); } } @@ -921,8 +921,8 @@ mod tests { match serde_json::from_str::(data) { Err(e) => { - eprintln!("Error parsing payload: {}", e); - println!("{}", data); + tracing::error!("Error parsing payload: {}", e); + tracing::error!("{}", data); } Ok(_) => {} } diff --git a/crates/dropbox/Cargo.toml b/crates/dropbox/Cargo.toml index ceddae8c..30c688f0 100644 --- a/crates/dropbox/Cargo.toml +++ b/crates/dropbox/Cargo.toml @@ -43,3 +43,4 @@ symphonia = { version = "0.5.4", features = ["all"] } tempfile = "3.19.1" tokio = { version = "1.43.0", features = ["full"] } tokio-stream = { version = "0.1.17", features = ["full"] } +tracing = "0.1.41" diff --git a/crates/googledrive/Cargo.toml b/crates/googledrive/Cargo.toml index 464f26be..845e5456 100644 --- a/crates/googledrive/Cargo.toml +++ b/crates/googledrive/Cargo.toml @@ -44,3 +44,4 @@ symphonia = { version = "0.5.4", features = ["all"] } tempfile = "3.19.1" tokio = { version = "1.43.0", features = ["full"] } tokio-stream = { version = "0.1.17", features = ["full"] } +tracing = "0.1.41" diff --git a/crates/jetstream/Cargo.toml b/crates/jetstream/Cargo.toml index 3b545112..2c8216fa 100644 --- a/crates/jetstream/Cargo.toml +++ b/crates/jetstream/Cargo.toml @@ -38,3 +38,4 @@ reqwest = { version = "0.12.12", features = [ sha256 = "1.6.0" time = { version = "0.3.44", features = ["formatting", "macros"] } redis = { version = "0.29.0", features = ["aio", "tokio-comp"] } +tracing = "0.1.41" diff --git a/crates/playlists/Cargo.toml b/crates/playlists/Cargo.toml index b2f5aac9..a64a2413 100644 --- a/crates/playlists/Cargo.toml +++ b/crates/playlists/Cargo.toml @@ -37,3 +37,4 @@ reqwest = { version = "0.12.12", features = [ hex = "0.4.3" jsonwebtoken = "9.3.1" sha2 = "0.10.8" +tracing = "0.1.41" diff --git a/crates/rockskyd/Cargo.toml b/crates/rockskyd/Cargo.toml index 66eb6389..a4071daf 100644 --- a/crates/rockskyd/Cargo.toml +++ b/crates/rockskyd/Cargo.toml @@ -20,3 +20,7 @@ rocksky-scrobbler = { path = "../scrobbler" } rocksky-spotify = { path = "../spotify" } rocksky-tracklist = { path = "../tracklist" } rocksky-webscrobbler = { path = "../webscrobbler" } +tracing = "0.1.41" +tracing-subscriber = "0.3.20" +tracing-log = "0.2.0" +owo-colors = "4.2.2" diff --git a/crates/rockskyd/src/main.rs b/crates/rockskyd/src/main.rs index ef07ac1f..20b6310f 100644 --- a/crates/rockskyd/src/main.rs +++ b/crates/rockskyd/src/main.rs @@ -1,5 +1,6 @@ use clap::Command; use dotenv::dotenv; +use tracing_subscriber::fmt::format::Format; pub mod cmd; @@ -35,6 +36,17 @@ fn cli() -> Command { #[tokio::main] async fn main() -> Result<(), Box> { + let format = Format::default() + .with_level(true) + .with_target(true) + .with_ansi(true) + .compact(); + + tracing_subscriber::fmt() + .event_format(format) + .with_max_level(tracing::Level::INFO) + .init(); + dotenv().ok(); let args = cli().get_matches(); diff --git a/crates/scrobbler/Cargo.toml b/crates/scrobbler/Cargo.toml index dc5da3ae..6b6978a6 100644 --- a/crates/scrobbler/Cargo.toml +++ b/crates/scrobbler/Cargo.toml @@ -44,3 +44,4 @@ uuid = { version = "1.17.0", features = ["v4"] } actix-limitation = "0.5.1" actix-session = "0.10.1" tokio-stream = { version = "0.1.17", features = ["full"] } +tracing = "0.1.41" diff --git a/crates/spotify/Cargo.toml b/crates/spotify/Cargo.toml index 6f778df8..4aab6a8f 100644 --- a/crates/spotify/Cargo.toml +++ b/crates/spotify/Cargo.toml @@ -38,3 +38,4 @@ sqlx = { version = "0.8.3", features = [ ] } tokio = { version = "1.43.0", features = ["full"] } tokio-stream = { version = "0.1.17", features = ["full"] } +tracing = "0.1.41" diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 44c01e53..fb96cff6 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -26,3 +26,4 @@ sqlx = { version = "0.8.3", features = [ ] } actix-web = "4.9.0" tokio-stream = { version = "0.1.17", features = ["full"] } +tracing = "0.1.41" diff --git a/crates/tracklist/Cargo.toml b/crates/tracklist/Cargo.toml index 4ff6d2cf..3a5c1687 100644 --- a/crates/tracklist/Cargo.toml +++ b/crates/tracklist/Cargo.toml @@ -22,3 +22,4 @@ polars = "0.46.0" clap = "4.5.31" rand = "0.9.2" uuid = { version = "1.18.0", features = ["v4"] } +tracing = "0.1.41" diff --git a/crates/webscrobbler/Cargo.toml b/crates/webscrobbler/Cargo.toml index d7a0c5ac..fc7ba165 100644 --- a/crates/webscrobbler/Cargo.toml +++ b/crates/webscrobbler/Cargo.toml @@ -42,3 +42,4 @@ rand = "0.9.0" tokio-stream = { version = "0.1.17", features = ["full"] } actix-session = "0.10.1" actix-limitation = "0.5.1" +tracing = "0.1.41"