From 1ba407fe25fa17deccb2fa9ac9b581397ed7d305 Mon Sep 17 00:00:00 2001 From: theMackabu Date: Thu, 4 Jul 2024 01:43:33 -0700 Subject: [PATCH] add remote reset_env --- src/cli/internal.rs | 8 ++++++-- src/cli/mod.rs | 10 ++++------ src/daemon/api/routes.rs | 5 +++++ src/process/http.rs | 7 +++++++ src/process/mod.rs | 9 ++++++++- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/cli/internal.rs b/src/cli/internal.rs index c89052a..d41cada 100644 --- a/src/cli/internal.rs +++ b/src/cli/internal.rs @@ -67,7 +67,7 @@ impl<'i> Internal<'i> { return self.runner; } - pub fn restart(mut self, name: &Option, watch: &Option, silent: bool) -> Runner { + pub fn restart(mut self, name: &Option, watch: &Option, reset_env: bool, silent: bool) -> Runner { then!(!silent, println!("{} Applying {}action restartProcess on ({})", *helpers::SUCCESS, self.kind, self.id)); if matches!(self.server_name, "internal" | "local") { @@ -78,6 +78,8 @@ impl<'i> Internal<'i> { None => item.disable_watch(), } + then!(reset_env, item.clear_env()); + name.as_ref().map(|n| item.rename(n.trim().replace("\n", ""))); item.restart(); @@ -92,6 +94,8 @@ impl<'i> Internal<'i> { Some(remote) => { let mut item = remote.get(self.id); + then!(reset_env, item.clear_env()); + name.as_ref().map(|n| item.rename(n.trim().replace("\n", ""))); item.restart(); } @@ -480,7 +484,7 @@ impl<'i> Internal<'i> { kind: kind.clone(), runner: runner.clone(), } - .restart(&None, &None, true); + .restart(&None, &None, false, true); } }); diff --git a/src/cli/mod.rs b/src/cli/mod.rs index a2e792d..facc74a 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -6,7 +6,7 @@ pub(crate) mod internal; pub(crate) mod server; use internal::Internal; -use macros_rs::{crashln, string, ternary, then}; +use macros_rs::{crashln, string, ternary}; use pmc::{helpers, process::Runner}; use std::env; @@ -46,20 +46,18 @@ pub fn start(name: &Option, args: &Args, watch: &Option, reset_e kind: kind.clone(), runner: runner.clone(), } - .restart(&None, &None, true); + .restart(&None, &None, false, true); }), None => println!("{} Cannot start all, no processes found", *helpers::FAIL), } } else { match args { Args::Id(id) => { - then!(*reset_env, runner.clear_env(*id)); - Internal { id: *id, runner, server_name, kind }.restart(name, watch, false); + Internal { id: *id, runner, server_name, kind }.restart(name, watch, *reset_env, false); } Args::Script(script) => match runner.find(&script, server_name) { Some(id) => { - then!(*reset_env, runner.clear_env(id)); - Internal { id, runner, server_name, kind }.restart(name, watch, false); + Internal { id, runner, server_name, kind }.restart(name, watch, *reset_env, false); } None => { Internal { id: 0, runner, server_name, kind }.create(script, name, watch, false); diff --git a/src/daemon/api/routes.rs b/src/daemon/api/routes.rs index e5435de..b1b7db4 100644 --- a/src/daemon/api/routes.rs +++ b/src/daemon/api/routes.rs @@ -754,6 +754,11 @@ pub async fn action_handler(id: usize, body: Json, _t: Token) -> Res timer.observe_duration(); Ok(Json(attempt(true, method))) } + "reset_env" | "clear_env" => { + runner.get(id).clear_env(); + timer.observe_duration(); + Ok(Json(attempt(true, method))) + } "remove" | "delete" => { runner.remove(id); timer.observe_duration(); diff --git a/src/process/http.rs b/src/process/http.rs index ffd04c1..25bf84c 100644 --- a/src/process/http.rs +++ b/src/process/http.rs @@ -107,3 +107,10 @@ pub fn flush(Remote { address, token, .. }: &Remote, id: usize) -> Result Result { + let (client, headers) = sync::client(token); + let content = ActionBody { method: string!("clear_env") }; + + Ok(client.post(fmtstr!("{address}/process/{id}/action")).json(&content).headers(headers).send()?) +} diff --git a/src/process/mod.rs b/src/process/mod.rs index 64e1fa4..d3e2c36 100644 --- a/src/process/mod.rs +++ b/src/process/mod.rs @@ -381,7 +381,14 @@ impl Runner { } pub fn clear_env(&mut self, id: usize) -> &mut Self { - self.process(id).env = BTreeMap::new(); + if let Some(remote) = &self.remote { + if let Err(err) = http::clear_env(remote, id) { + crashln!("{} Failed to clear environment on {id}\nError: {:#?}", *helpers::FAIL, err); + }; + } else { + self.process(id).env = BTreeMap::new(); + } + return self; } -- GitLab