From 0e5c7cc6401d1e2e22578b38b61ab6e7890b0221 Mon Sep 17 00:00:00 2001 From: timedout Date: Sun, 1 Nov 2026 05:06:10 +0000 Subject: [PATCH] feat: Move `change-log-level` to `server` --- src/admin/debug/commands.rs | 68 ++---------------------------------- src/admin/debug/mod.rs | 14 +------- src/admin/server/commands.rs | 36 ++++++++++++++++++- src/admin/server/mod.rs | 12 +++++++ src/admin/user/commands.rs | 5 ++- 5 files changed, 52 insertions(+), 83 deletions(-) diff --git a/src/admin/debug/commands.rs b/src/admin/debug/commands.rs index 8d80c3bb8..3f5021c8f 100644 --- a/src/admin/debug/commands.rs +++ b/src/admin/debug/commands.rs @@ -1,8 +1,7 @@ -use std::{collections::HashMap, time::SystemTime}; +use std::collections::HashMap; use conduwuit::{ Err, Result, - utils, utils::{ stream::{IterStream, ReadyExt}, string::EMPTY, @@ -14,10 +13,7 @@ use resolvematrix::{ resolution::ResolvedDestination, server::{MatrixResolver, MatrixResolverBuilder}, }; -use ruma::{ - OwnedRoomId, OwnedServerName, -}; -use tracing_subscriber::EnvFilter; +use ruma::{OwnedRoomId, OwnedServerName}; use crate::PAGE_SIZE; @@ -27,59 +23,6 @@ impl crate::Context<'_> { self.write_str(&message).await } - pub(super) async fn change_log_level(&self, filter: Option, reset: bool) -> Result { - let handles = &["console"]; - - if reset { - let old_filter_layer = match EnvFilter::try_new(&self.services.server.config.log) { - | Ok(s) => s, - | Err(e) => return Err!("Log level from config appears to be invalid now: {e}"), - }; - - match self - .services - .server - .log - .reload - .reload(&old_filter_layer, Some(handles)) - { - | Err(e) => { - return Err!("Failed to modify and reload the global tracing log level: {e}"); - }, - | Ok(()) => { - let value = &self.services.server.config.log; - let out = - format!("Successfully changed log level back to config value {value}"); - return self.write_str(&out).await; - }, - } - } - - if let Some(filter) = filter { - let new_filter_layer = match EnvFilter::try_new(filter) { - | Ok(s) => s, - | Err(e) => return Err!("Invalid log level filter specified: {e}"), - }; - - match self - .services - .server - .log - .reload - .reload(&new_filter_layer, Some(handles)) - { - | Ok(()) => { - return self.write_str("Successfully changed log level").await; - }, - | Err(e) => { - return Err!("Failed to modify and reload the global tracing log level: {e}"); - }, - } - } - - Err!("No log level was specified.") - } - pub(super) async fn resolve_true_destination( &self, server_name: OwnedServerName, @@ -182,13 +125,6 @@ impl crate::Context<'_> { .await } - pub(super) async fn time(&self) -> Result { - let now = SystemTime::now(); - let now = utils::time::format(now, "%+"); - - self.write_str(&now).await - } - pub(super) async fn database_stats( &self, property: Option, diff --git a/src/admin/debug/mod.rs b/src/admin/debug/mod.rs index a49b8766f..db9638d44 100644 --- a/src/admin/debug/mod.rs +++ b/src/admin/debug/mod.rs @@ -3,7 +3,7 @@ pub(crate) mod tester; use clap::Subcommand; use conduwuit::Result; -use ruma::{OwnedEventId, OwnedServerName}; +use ruma::OwnedServerName; use self::tester::TesterCommand; use crate::admin_command_dispatch; @@ -16,18 +16,6 @@ pub enum DebugCommand { message: Vec, }, - /// Change tracing log level/filter on the fly - /// - /// This accepts the same format as the `log` config option. - ChangeLogLevel { - /// Log level/filter - filter: Option, - - /// Resets the log level/filter to the one in your config - #[arg(short, long)] - reset: bool, - }, - /// Runs a server name through Continuwuity's true destination resolution /// process /// diff --git a/src/admin/server/commands.rs b/src/admin/server/commands.rs index 1173c5457..4dcf76e80 100644 --- a/src/admin/server/commands.rs +++ b/src/admin/server/commands.rs @@ -1,11 +1,12 @@ use std::{fmt::Write, path::PathBuf, sync::Arc}; use conduwuit::{ - Err, Result, + Err, Result, err, utils::{stream::IterStream, time}, warn, }; use futures::TryStreamExt; +use tracing_subscriber::EnvFilter; impl crate::Context<'_> { pub(super) async fn uptime(&self) -> Result { @@ -234,4 +235,37 @@ impl crate::Context<'_> { self.write_str(&info).await } + + pub(super) async fn change_log_level(&self, filter: Option, reset: bool) -> Result { + let handles = &["console"]; + + if reset { + let old_filter_layer = EnvFilter::try_new(&self.services.server.config.log) + .map_err(|e| err!("Log level from config appears to be invalid now: {e}"))?; + self.services + .server + .log + .reload + .reload(&old_filter_layer, Some(handles)) + .map_err(|e| { + err!("Failed to modify and reload the global tracing log level: {e}") + })?; + self.write_str("Successfully changed log level back to config value") + .await + } else { + let filter = filter.ok_or_else(|| err!("No log level was specified."))?; + let new_filter_layer = EnvFilter::try_new(filter) + .map_err(|e| err!("Invalid log level filter specified: {e}"))?; + self.services + .server + .log + .reload + .reload(&new_filter_layer, Some(handles)) + .map_err(|e| { + err!("Failed to modify and reload the global tracing log level: {e}") + })?; + self.write_str("Successfully changed log level back to config value") + .await + } + } } diff --git a/src/admin/server/mod.rs b/src/admin/server/mod.rs index ff6933ef9..54851e547 100644 --- a/src/admin/server/mod.rs +++ b/src/admin/server/mod.rs @@ -58,4 +58,16 @@ pub enum ServerCommand { /// Build information BuildInfo, + + /// Change tracing log level/filter on the fly + /// + /// This accepts the same format as the `log` config option. + ChangeLogLevel { + /// Log level/filter + filter: Option, + + /// Resets the log level/filter to the one in your config + #[arg(short, long)] + reset: bool, + }, } diff --git a/src/admin/user/commands.rs b/src/admin/user/commands.rs index 9c06c3691..3d1b8a821 100644 --- a/src/admin/user/commands.rs +++ b/src/admin/user/commands.rs @@ -2,9 +2,9 @@ use std::collections::BTreeMap; use api::client::{full_user_deactivate, leave_room, recreate_push_rules_and_return}; use conduwuit::{ - Err, Result, debug_warn, info, + Err, Result, info, matrix::{Event, pdu::PartialPdu}, - utils::{self, ReadyExt}, + utils::{self}, warn, }; use futures::{FutureExt, StreamExt}; @@ -25,7 +25,6 @@ use crate::{ }; const AUTO_GEN_PASSWORD_LENGTH: usize = 25; -const BULK_JOIN_REASON: &str = "Bulk force joining this room as initiated by the server admin."; impl crate::Context<'_> { pub(super) async fn list_users(