From 3d3d63fdf44549d8fe997906900f42fbf51ff0df Mon Sep 17 00:00:00 2001 From: Jason Volk <jason@zemos.net> Date: Sun, 16 Jun 2024 01:44:41 +0000 Subject: [PATCH] admin commands for shutdown/reload Signed-off-by: Jason Volk <jason@zemos.net> --- src/admin/mod.rs | 2 ++ src/admin/server/mod.rs | 15 +++++++++++---- src/admin/server/server_commands.rs | 15 +++++++++++++++ src/service/admin/console.rs | 2 +- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/admin/mod.rs b/src/admin/mod.rs index 1832cc9b2..33158b5cd 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -1,3 +1,5 @@ +#![allow(clippy::wildcard_imports)] + pub(crate) mod appservice; pub(crate) mod debug; pub(crate) mod federation; diff --git a/src/admin/server/mod.rs b/src/admin/server/mod.rs index e591f7c5d..254735a36 100644 --- a/src/admin/server/mod.rs +++ b/src/admin/server/mod.rs @@ -3,10 +3,7 @@ use clap::Subcommand; use ruma::events::room::message::RoomMessageEventContent; -use self::server_commands::{ - backup_database, clear_database_caches, clear_service_caches, list_backups, list_database_files, memory_usage, - show_config, uptime, -}; +use self::server_commands::*; use crate::Result; #[cfg_attr(test, derive(Debug))] @@ -42,6 +39,13 @@ pub(crate) enum ServerCommand { /// - List database files ListDatabaseFiles, + + #[cfg(conduit_mods)] + /// - Hot-reload the server + Reload, + + /// - Shutdown the server + Shutdown, } pub(crate) async fn process(command: ServerCommand, body: Vec<&str>) -> Result<RoomMessageEventContent> { @@ -58,5 +62,8 @@ pub(crate) async fn process(command: ServerCommand, body: Vec<&str>) -> Result<R ServerCommand::ListBackups => list_backups(body).await?, ServerCommand::BackupDatabase => backup_database(body).await?, ServerCommand::ListDatabaseFiles => list_database_files(body).await?, + #[cfg(conduit_mods)] + ServerCommand::Reload => reload(body).await?, + ServerCommand::Shutdown => shutdown(body).await?, }) } diff --git a/src/admin/server/server_commands.rs b/src/admin/server/server_commands.rs index d80cc3d7d..c9daedc4f 100644 --- a/src/admin/server/server_commands.rs +++ b/src/admin/server/server_commands.rs @@ -1,3 +1,4 @@ +use conduit::warn; use ruma::events::room::message::RoomMessageEventContent; use crate::{services, Result}; @@ -96,3 +97,17 @@ pub(crate) async fn list_database_files(_body: Vec<&str>) -> Result<RoomMessageE let result = services().globals.db.file_list()?; Ok(RoomMessageEventContent::notice_html(String::new(), result)) } + +#[cfg(conduit_mods)] +pub(crate) async fn reload(_body: Vec<&str>) -> Result<RoomMessageEventContent> { + services().server.reload()?; + + Ok(RoomMessageEventContent::notice_plain(String::new())) +} + +pub(crate) async fn shutdown(_body: Vec<&str>) -> Result<RoomMessageEventContent> { + warn!("shutdown command"); + services().server.shutdown()?; + + Ok(RoomMessageEventContent::notice_plain(String::new())) +} diff --git a/src/service/admin/console.rs b/src/service/admin/console.rs index 66faf2c14..13cfdb274 100644 --- a/src/service/admin/console.rs +++ b/src/service/admin/console.rs @@ -73,7 +73,7 @@ pub async fn close(self: &Arc<Self>) { #[tracing::instrument(skip_all, name = "console")] async fn worker(self: Arc<Self>) { - loop { + while services().server.running() { let mut input = self.input.lock().await; let suppression = log::Suppress::new(&services().server); -- GitLab