From 7bee1f5bae27aeebc31332eea9ed613dfc6dc17f Mon Sep 17 00:00:00 2001 From: J-onasJones Date: Mon, 12 Feb 2024 03:46:08 +0100 Subject: [PATCH 1/2] added update runner thread --- src/main.rs | 35 ++++++++++++++- src/v1/mod.rs | 9 +++- src/v1/{update => run}/mod.rs | 84 +++++++++++++++++------------------ 3 files changed, 82 insertions(+), 46 deletions(-) rename src/v1/{update => run}/mod.rs (77%) diff --git a/src/main.rs b/src/main.rs index 86eb624..a55572c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,7 @@ use dotenv::dotenv; +use tokio::time::{sleep, Duration}; +use v1::{run_kcomebacks_command, run_likedsongs_command, run_projects_command}; +use std::fs; pub mod v1; pub mod logger; @@ -10,10 +13,38 @@ pub use logger::Logger; pub use tools::parse_ip; +async fn periodic_script_runner() { + loop { + Logger::info("Running periodic scripts..."); + // Run all Functions + let _ = run_kcomebacks_command(); + let _ = run_projects_command(); + let _ = run_likedsongs_command(); + + // Sleep for 6 hours + sleep(Duration::from_secs(6 * 60 * 60)).await; + } +} + #[tokio::main(flavor = "current_thread")] async fn main() { - // load .env file + // Load .env file dotenv().ok(); - server::serve().await; + // Start the api + let server_task = tokio::spawn(async { + server::serve().await; + }); + + // periodic script runner + let second_task = tokio::spawn(async { + // check if the local repository exists, if not, clone it + if !fs::metadata("./resources/turbo_octo_potato").is_ok() { + v1::run_setup().unwrap(); + }; + periodic_script_runner().await; + }); + + // Wait for both tasks to complete + let _ = tokio::try_join!(server_task, second_task); } diff --git a/src/v1/mod.rs b/src/v1/mod.rs index d0ff506..ff4bf8f 100644 --- a/src/v1/mod.rs +++ b/src/v1/mod.rs @@ -2,13 +2,18 @@ mod builtin; mod debug; mod kcomebacks; mod projects; -mod update; +mod run; + +pub use run::setup as run_setup; +pub use run::run_kcomebacks_command; +pub use run::run_projects_command; +pub use run::run_likedsongs_command; pub use builtin::get_builtin_routes as get_v1_builtin_routes; pub use debug::get_debug_routes as get_v1_debug_routes; pub use kcomebacks::get_kcomebacks_routes as get_v1_kcomebacks_routes; pub use projects::get_project_routes as get_v1_project_routes; -pub use update::get_run_routes as get_v1_updates_routes; +pub use run::get_run_routes as get_v1_updates_routes; use warp::Filter; diff --git a/src/v1/update/mod.rs b/src/v1/run/mod.rs similarity index 77% rename from src/v1/update/mod.rs rename to src/v1/run/mod.rs index 15a7f01..849c133 100644 --- a/src/v1/update/mod.rs +++ b/src/v1/run/mod.rs @@ -1,10 +1,10 @@ use std::fs; -use std::io::BufRead; +// use std::io::BufRead; use std::process::{Stdio, Command}; use serde::{Deserialize, Serialize}; use serde_json::json; -use tokio::sync::mpsc; +// use tokio::sync::mpsc; use tokio::task; use warp::Filter; use crate::error_responses::InternalServerError; @@ -80,7 +80,7 @@ async fn sync_liked_songs() -> Result { } -fn setup() -> Result<(), git2::Error> { +pub fn setup() -> Result<(), git2::Error> { let repository_url = "https://github.com/JonasunderscoreJones/turbo-octo-potato.git"; let local_directory = "resources/turbo_octo_potato"; @@ -131,8 +131,8 @@ fn setup() -> Result<(), git2::Error> { // run_command with python file and args as parameters -fn run_kcomebacks_command() -> Result<(), std::io::Error> { - let (tx, mut rx) = mpsc::channel(1); +pub fn run_kcomebacks_command() -> Result<(), std::io::Error> { + // let (tx, mut rx) = mpsc::channel(1); task::spawn_blocking(move || { let mut child = Command::new("python3") @@ -143,20 +143,20 @@ fn run_kcomebacks_command() -> Result<(), std::io::Error> { .spawn() .expect("failed to execute child"); - let stdout = child.stdout.as_mut().unwrap(); + // let stdout = child.stdout.as_mut().unwrap(); - let mut reader = std::io::BufReader::new(stdout); + // let mut reader = std::io::BufReader::new(stdout); - let mut line = String::new(); + // let mut line = String::new(); - loop { - let len = reader.read_line(&mut line).unwrap(); - if len == 0 { - break; - } - tx.blocking_send(line.clone()).unwrap(); - line.clear(); - } + // loop { + // let len = reader.read_line(&mut line).unwrap(); + // if len == 0 { + // break; + // } + // tx.blocking_send(line.clone()).unwrap(); + // line.clear(); + // } child.wait().unwrap(); }); @@ -171,8 +171,8 @@ fn run_kcomebacks_command() -> Result<(), std::io::Error> { Ok(()) } -fn run_projects_command() -> Result<(), std::io::Error> { - let (tx, mut rx) = mpsc::channel(1); +pub fn run_projects_command() -> Result<(), std::io::Error> { + // let (tx, mut rx) = mpsc::channel(1); task::spawn_blocking(move || { let mut child = Command::new("python3") @@ -183,20 +183,20 @@ fn run_projects_command() -> Result<(), std::io::Error> { .spawn() .expect("failed to execute child"); - let stdout = child.stdout.as_mut().unwrap(); + // let stdout = child.stdout.as_mut().unwrap(); - let mut reader = std::io::BufReader::new(stdout); + // let mut reader = std::io::BufReader::new(stdout); - let mut line = String::new(); + // let mut line = String::new(); - loop { - let len = reader.read_line(&mut line).unwrap(); - if len == 0 { - break; - } - tx.blocking_send(line.clone()).unwrap(); - line.clear(); - } + // loop { + // let len = reader.read_line(&mut line).unwrap(); + // if len == 0 { + // break; + // } + // tx.blocking_send(line.clone()).unwrap(); + // line.clear(); + // } child.wait().unwrap(); }); @@ -211,8 +211,8 @@ fn run_projects_command() -> Result<(), std::io::Error> { Ok(()) } -fn run_likedsongs_command() -> Result<(), std::io::Error> { - let (tx, mut rx) = mpsc::channel(1); +pub fn run_likedsongs_command() -> Result<(), std::io::Error> { + // let (tx, mut rx) = mpsc::channel(1); task::spawn_blocking(move || { let mut child = Command::new("python3") @@ -222,20 +222,20 @@ fn run_likedsongs_command() -> Result<(), std::io::Error> { .spawn() .expect("failed to execute child"); - let stdout = child.stdout.as_mut().unwrap(); + // let stdout = child.stdout.as_mut().unwrap(); - let mut reader = std::io::BufReader::new(stdout); + // let mut reader = std::io::BufReader::new(stdout); - let mut line = String::new(); + // let mut line = String::new(); - loop { - let len = reader.read_line(&mut line).unwrap(); - if len == 0 { - break; - } - tx.blocking_send(line.clone()).unwrap(); - line.clear(); - } + // loop { + // let len = reader.read_line(&mut line).unwrap(); + // if len == 0 { + // break; + // } + // tx.blocking_send(line.clone()).unwrap(); + // line.clear(); + // } child.wait().unwrap(); }); From 5e9ed3738c3418969d13ebb7916ec3b377eaad98 Mon Sep 17 00:00:00 2001 From: J-onasJones Date: Mon, 12 Feb 2024 03:49:41 +0100 Subject: [PATCH 2/2] fixed logs --- src/v1/run/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/v1/run/mod.rs b/src/v1/run/mod.rs index 849c133..9861d53 100644 --- a/src/v1/run/mod.rs +++ b/src/v1/run/mod.rs @@ -166,7 +166,7 @@ pub fn run_kcomebacks_command() -> Result<(), std::io::Error> { // Logger::info(&format!("[/v1/kcomebacks/update]: {}", line)); // } // }); - Logger::info("kcomebacks updated"); + Logger::info("Updating kcomebacks..."); Ok(()) } @@ -206,7 +206,7 @@ pub fn run_projects_command() -> Result<(), std::io::Error> { // Logger::info(&format!("[/v1/projects/update]: {}", line)); // } // }); - Logger::info("projects updated"); + Logger::info("Updating projects..."); Ok(()) } @@ -245,7 +245,7 @@ pub fn run_likedsongs_command() -> Result<(), std::io::Error> { // Logger::info(&format!("[/v1/synclikedsongs]: {}", line)); // } // }); - Logger::info("liked songs synced"); + Logger::info("Syncing liked songs..."); Ok(()) } \ No newline at end of file