From 139d4f8f2578c0b7b560d0f7582fad346b1ec36f Mon Sep 17 00:00:00 2001 From: wHoIsDReAmer Date: Sun, 30 Jun 2024 13:55:14 +0900 Subject: [PATCH] feat: add flush command --- Cargo.toml | 6 ++++++ src/cli/internal.rs | 6 ++++++ src/cli/mod.rs | 13 +++++++++++++ src/main.rs | 14 +++++++++++++- src/process/mod.rs | 21 +++++++++++++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a5f5215..746afa5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,12 @@ license = "MIT" repository = "https://lab.themackabu.dev/self/pmc" description = "PMC is a simple and easy to use PM2 alternative" +[profile.release] +lto = true +codegen-units = 1 +opt-level = "z" +panic = "abort" + [build-dependencies] tar = "0.4.40" chrono = "0.4.31" diff --git a/src/cli/internal.rs b/src/cli/internal.rs index 3f5a6e3..986ee43 100644 --- a/src/cli/internal.rs +++ b/src/cli/internal.rs @@ -161,6 +161,12 @@ impl<'i> Internal<'i> { log!("process removed (id={})", self.id); } + pub fn flush(&mut self) { + self.runner.flush(self.id); + println!("{} Log Flushed {}({}) ✓", *helpers::SUCCESS, self.kind, self.id); + log!("process log flushed (id={})", self.id); + } + pub fn info(&self, format: &String) { #[derive(Clone, Debug, Tabled)] struct Info { diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 7b91bab..6d2553c 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -159,3 +159,16 @@ pub fn env(item: &Item, server_name: &String) { }, } } + +pub fn flush(item: &Item, server_name: &String) { + let runner: Runner = Runner::new(); + let (kind, _) = format(server_name); + + match item { + Item::Id(id) => Internal { id: *id, runner, server_name, kind }.flush(), + Item::Name(name) => match runner.find(&name, server_name) { + Some(id) => Internal { id, runner, server_name, kind }.flush(), + None => crashln!("{} Process ({name}) not found", *helpers::FAIL), + }, + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 06d1b3a..4f7ffb1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,7 +68,7 @@ enum Server { format: String, }, /// Remove server - #[command(visible_alias = "rm", visible_alias = "delete")] + #[command(visible_alias = "rm")] Remove { /// Server name name: String, @@ -181,6 +181,17 @@ enum Commands { server: Option, }, + /// Flush a process log + #[command(visible_alias = "flush")] + Flush { + #[clap(value_parser = cli::validate::)] + item: Item, + /// Server + #[arg(short, long)] + server: Option, + }, + + /// Daemon management #[command(visible_alias = "agent", visible_alias = "bgd")] Daemon { @@ -219,6 +230,7 @@ fn main() { Commands::Details { item, format, server } => cli::info(item, format, &defaults(server)), Commands::List { format, server } => Internal::list(format, &defaults(server)), Commands::Logs { item, lines, server } => cli::logs(item, lines, &defaults(server)), + Commands::Flush { item, server } => cli::flush(item, &defaults(server)), Commands::Daemon { command } => match command { Daemon::Stop => daemon::stop(), diff --git a/src/process/mod.rs b/src/process/mod.rs index 9fd98ce..b028828 100644 --- a/src/process/mod.rs +++ b/src/process/mod.rs @@ -173,6 +173,18 @@ impl Status { } } +impl LogInfo { + pub fn flush(&self) { + if let Err(err) = std::fs::remove_file(&self.out) { + crashln!("Failed to remove log {0} file: {err}", self.out); + } + + if let Err(err) = std::fs::remove_file(&self.error) { + crashln!("Failed to remove log {0} file: {err}", self.error); + } + } +} + macro_rules! lock { ($runner:expr) => {{ match $runner.lock() { @@ -494,6 +506,15 @@ impl Runner { return processes; } + + pub fn flush(&mut self, id: usize) -> &mut Self { + match self.info(id) { + Some(item) => item.logs().flush(), + None => crashln!("{} Process ({id}) not found", *helpers::FAIL), + }; + + self + } } impl Process { -- GitLab