From 9deef63b608b62780a4dfed031410c25e10e477a Mon Sep 17 00:00:00 2001
From: Greg Burri 
Date: Tue, 16 Mar 2021 19:13:02 +0100
Subject: [PATCH] Adding information about backup (WIP)
---
 Cargo.lock                        |  1 +
 backend/Cargo.toml                |  2 ++
 backend/src/main.rs               | 14 ++++++++++----
 backend/src/valheim_controller.rs | 15 +++++++++++++--
 backend/style.scss                |  4 ++--
 backend/templates/main.html       |  1 +
 6 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 0f9f90f..d013294 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2035,6 +2035,7 @@ dependencies = [
  "actix-web",
  "askama",
  "cached",
+ "chrono",
  "common",
  "futures",
  "itertools",
diff --git a/backend/Cargo.toml b/backend/Cargo.toml
index 351f710..2dbae9f 100644
--- a/backend/Cargo.toml
+++ b/backend/Cargo.toml
@@ -13,6 +13,8 @@ serde = { version = "1.0", features = ["derive"] }
 ron = "0.6" # Rust object notation, to load configuration files.
 itertools = "0.10"
 
+chrono = "0.4"
+
 sysinfo = "0.16"
 
 cached = "0.23"
diff --git a/backend/src/main.rs b/backend/src/main.rs
index 03963c1..a2201d4 100644
--- a/backend/src/main.rs
+++ b/backend/src/main.rs
@@ -22,6 +22,7 @@ struct MainTemplate {
     uptime: String,
     world_size: String,
     nb_of_players: u32,
+    last_backup: String,
 }
 
 const VALUE_UNKNOWN: &str = "-";
@@ -43,11 +44,12 @@ async fn main_page(config_shared: web::Data>) -> 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() }
         }
     }
 }
@@ -55,15 +57,19 @@ async fn main_page(config_shared: web::Data>) -> 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("") }
     }
 }
 
@@ -128,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
     }
 
diff --git a/backend/src/valheim_controller.rs b/backend/src/valheim_controller.rs
index 3c2bab6..3d99033 100644
--- a/backend/src/valheim_controller.rs
+++ b/backend/src/valheim_controller.rs
@@ -1,4 +1,5 @@
 use sysinfo::{ ProcessExt, SystemExt };
+use chrono::{ DateTime, Datelike, Timelike, Utc };
 
 #[cfg(target_os = "unix")]
 use systemd::journal;
@@ -10,6 +11,7 @@ pub struct ValheimExe {
     uptime: u64, // [s].
     world_size: u64, // [B].
     nb_of_players: u32,
+    last_backup: DateTime,
 }
 
 impl ValheimExe {
@@ -35,6 +37,10 @@ impl ValheimExe {
     pub fn get_nb_of_player(&self) -> u32 {
         self.nb_of_players
     }
+
+    pub fn format_last_backup(&self) -> String {
+        string::from("")
+    }
 }
 
 const BINARY_PREFIXES: [&str; 8] = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"];
@@ -90,7 +96,11 @@ fn get_number_of_players() -> u32 {
     0
 }
 
-pub fn get_valheim_executable_information(world_path : &str) -> Option {
+fn get_last_backup_datetime(backup_path: &str) -> DateTime {
+
+}
+
+pub fn get_valheim_executable_information(world_path: &str, backup_path: &str) -> Option {
     let mut system = sysinfo::System::new_all();
     system.refresh_system();
     let processes = system.get_process_by_name(VALHEIM_PROCESS_NAME);
@@ -106,7 +116,8 @@ pub fn get_valheim_executable_information(world_path : &str) -> OptionMemory used: {{ memory }}
             Load average (5 min): {{ load_average }}
             Uptime: {{ uptime }}
+            Last backup: {{ last_backup }}