Add the date and time of the latest backup.
[valheim_web.git] / backend / src / main.rs
index 84485c2..8ea0819 100644 (file)
@@ -7,6 +7,7 @@ use actix_web::{ get, web, Responder, middleware, App, HttpServer };
 use askama::Template;
 use ron::{ de::from_reader, ser::{ to_string_pretty, PrettyConfig } };
 use serde::{ Deserialize, Serialize };
+use cached::proc_macro::cached;
 
 mod consts;
 mod tests;
@@ -21,15 +22,21 @@ struct MainTemplate {
     uptime: String,
     world_size: String,
     nb_of_players: u32,
+    last_backup: String,
 }
 
 const VALUE_UNKNOWN: &str = "-";
 
+#[cached(size = 1, time = 10)]
+fn get_valheim_executable_information_cached(world_path: String, backup_path: String) -> Option<valheim_controller::ValheimExe> {
+    valheim_controller::get_valheim_executable_information(&world_path, &backup_path)
+}
+
 #[get("/")]
 async fn main_page(config_shared: web::Data<Mutex<Config>>) -> impl Responder {
     let config = config_shared.lock().unwrap();
 
-    match valheim_controller::get_valheim_executable_information(&config.world_path) {
+    match get_valheim_executable_information_cached(config.world_path.clone(), config.backup_path.clone()) {
         Some(info) =>
             MainTemplate {
                 text_status: String::from("Valheim server is up and running :)"),
@@ -37,11 +44,12 @@ async fn main_page(config_shared: web::Data<Mutex<Config>>) -> impl Responder {
                 load_average: info.format_load_average(),
                 uptime: info.format_uptime(),
                 world_size: info.format_world_size(),
-                nb_of_players: info.get_nb_of_player()
+                nb_of_players: info.get_nb_of_player(),
+                last_backup: info.format_last_backup()
             },
         None => {
             let value_unknown = String::from(VALUE_UNKNOWN);
-            MainTemplate { text_status: String::from("Valheim server is down :("), memory: value_unknown.clone(), load_average: value_unknown.clone(), uptime: value_unknown.clone(), world_size: value_unknown.clone(), nb_of_players: 0 }
+            MainTemplate { text_status: String::from("Valheim server is down :("), memory: value_unknown.clone(), load_average: value_unknown.clone(), uptime: value_unknown.clone(), world_size: value_unknown.clone(), nb_of_players: 0, last_backup: value_unknown.clone() }
         }
     }
 }
@@ -49,15 +57,19 @@ async fn main_page(config_shared: web::Data<Mutex<Config>>) -> impl Responder {
 #[derive(Debug, Deserialize, Serialize)]
 struct Config {
     port: u16,
+
     #[serde(default = "empty_string")]
     world_path: String,
+
+    #[serde(default = "empty_string")]
+    backup_path: String,
 }
 
 fn empty_string() -> String { "".to_owned() }
 
 impl Config {
     fn default() -> Self {
-        Config { port: 8082, world_path: String::from("") }
+        Config { port: 8082, world_path: String::from(""), backup_path: String::from("") }
     }
 }
 
@@ -122,7 +134,7 @@ fn process_args(config: &Config) -> bool {
         print_usage();
         return true
     } else if args.iter().any(|arg| arg == "--status") {
-        println!("{:?}", valheim_controller::get_valheim_executable_information(&config.world_path));
+        println!("{:?}", valheim_controller::get_valheim_executable_information(&config.world_path, &config.backup_path));
         return true
     }