From eb32373e3c77ff8b2aa53e7b29d6f7753e1b433e Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Thu, 26 Oct 2023 12:37:08 +0200 Subject: [PATCH] system report: group files by categories Signed-off-by: Thomas Lamprecht --- src/server/report.rs | 75 +++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/src/server/report.rs b/src/server/report.rs index 76e1cf3ed..ceddb5fc9 100644 --- a/src/server/report.rs +++ b/src/server/report.rs @@ -1,20 +1,45 @@ use std::path::Path; use std::process::Command; -fn files() -> Vec<&'static str> { +fn files() -> Vec<(&'static str, Vec<&'static str>)> { vec![ - "/etc/hostname", - "/etc/hosts", - "/etc/network/interfaces", - "/etc/proxmox-backup/datastore.cfg", - "/etc/proxmox-backup/user.cfg", - "/etc/proxmox-backup/acl.cfg", - "/etc/proxmox-backup/remote.cfg", - "/etc/proxmox-backup/sync.cfg", - "/etc/proxmox-backup/verification.cfg", - "/etc/proxmox-backup/tape.cfg", - "/etc/proxmox-backup/media-pool.cfg", - "/etc/proxmox-backup/traffic-control.cfg", + ( + "Host & Network", + vec!["/etc/hostname", "/etc/hosts", "/etc/network/interfaces"], + ), + ( + "Datastores & Remotes", + vec!["/etc/proxmox-backup/datastore.cfg"], + ), + ( + "User & Access", + vec![ + "/etc/proxmox-backup/user.cfg", + "/etc/proxmox-backup/acl.cfg", + ], + ), + ("Remotes", vec!["/etc/proxmox-backup/remote.cfg"]), + ( + "Jobs", + vec![ + "/etc/proxmox-backup/sync.cfg", + "/etc/proxmox-backup/verification.cfg", + ], + ), + ( + "Tape", + vec![ + "/etc/proxmox-backup/tape.cfg", + "/etc/proxmox-backup/media-pool.cfg", + ], + ), + ( + "Others", + vec![ + "/etc/proxmox-backup/node.cfg", + "/etc/proxmox-backup/traffic-control.cfg", + ], + ), ] } @@ -66,14 +91,22 @@ pub fn generate_report() -> String { let file_contents = files() .iter() - .map(|file_name| { - let content = match file_read_optional_string(Path::new(file_name)) { - Ok(Some(content)) => content, - Ok(None) => String::from("# file does not exist"), - Err(err) => err.to_string(), - }; - let content = content.trim_end(); - format!("`$ cat '{file_name}'`\n```\n{content}\n```") + .map(|group| { + let (group, files) = group; + let group_content = files + .iter() + .map(|file_name| { + let content = match file_read_optional_string(Path::new(file_name)) { + Ok(Some(content)) => content, + Ok(None) => String::from("# file does not exist"), + Err(err) => err.to_string(), + }; + format!("`$ cat '{file_name}'`\n```\n{}\n```", content.trim_end()) + }) + .collect::>() + .join("\n\n"); + + format!("### {group}\n\n{group_content}") }) .collect::>() .join("\n\n");