mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-17 15:51:23 +01:00
Add admin commands to get and reset tracing filters
This commit is contained in:
parent
5eab758bd2
commit
99924e5779
4 changed files with 121 additions and 19 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use std::{collections::BTreeMap, fmt::Write, sync::Arc, time::Instant};
|
||||
|
||||
use clap::{Parser, ValueEnum};
|
||||
use clap::{Parser, Subcommand, ValueEnum};
|
||||
use regex::Regex;
|
||||
use ruma::{
|
||||
api::appservice::Registration,
|
||||
|
|
@ -205,10 +205,41 @@ enum AdminCommand {
|
|||
VerifyJson,
|
||||
|
||||
/// Dynamically change a tracing backend's filter string
|
||||
SetTracingFilter {
|
||||
TracingFilter {
|
||||
#[command(subcommand)]
|
||||
cmd: TracingFilterCommand,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Subcommand)]
|
||||
enum TracingFilterCommand {
|
||||
Get {
|
||||
backend: TracingBackend,
|
||||
},
|
||||
Set {
|
||||
backend: TracingBackend,
|
||||
filter: String,
|
||||
},
|
||||
Reset {
|
||||
backend: TracingBackend,
|
||||
},
|
||||
}
|
||||
|
||||
impl TracingFilterCommand {
|
||||
fn backend(&self) -> &TracingBackend {
|
||||
match self {
|
||||
TracingFilterCommand::Get {
|
||||
backend,
|
||||
}
|
||||
| TracingFilterCommand::Set {
|
||||
backend,
|
||||
..
|
||||
}
|
||||
| TracingFilterCommand::Reset {
|
||||
backend,
|
||||
} => backend,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -1167,9 +1198,8 @@ impl Service {
|
|||
)
|
||||
}
|
||||
}
|
||||
AdminCommand::SetTracingFilter {
|
||||
backend,
|
||||
filter,
|
||||
AdminCommand::TracingFilter {
|
||||
cmd,
|
||||
} => {
|
||||
let Some(handles) = &services().globals.reload_handles else {
|
||||
return Ok(RoomMessageEventContent::text_plain(
|
||||
|
|
@ -1177,7 +1207,7 @@ impl Service {
|
|||
));
|
||||
};
|
||||
let mut handles = handles.write().await;
|
||||
let handle = match backend {
|
||||
let handle = match cmd.backend() {
|
||||
TracingBackend::Log => &mut handles.log,
|
||||
TracingBackend::Flame => &mut handles.flame,
|
||||
TracingBackend::Traces => &mut handles.traces,
|
||||
|
|
@ -1187,15 +1217,27 @@ impl Service {
|
|||
"Backend is disabled",
|
||||
));
|
||||
};
|
||||
let filter = match filter.parse() {
|
||||
Ok(filter) => filter,
|
||||
Err(e) => {
|
||||
|
||||
let filter = match cmd {
|
||||
TracingFilterCommand::Set {
|
||||
filter,
|
||||
..
|
||||
} => filter,
|
||||
TracingFilterCommand::Reset {
|
||||
..
|
||||
} => handle.get_initial_filter().to_owned(),
|
||||
TracingFilterCommand::Get {
|
||||
..
|
||||
} => {
|
||||
return Ok(RoomMessageEventContent::text_plain(
|
||||
format!("Invalid filter string: {e}"),
|
||||
format!(
|
||||
"Current filter string: {}",
|
||||
handle.get_filter()
|
||||
),
|
||||
));
|
||||
}
|
||||
};
|
||||
if let Err(e) = handle.reload(filter) {
|
||||
if let Err(e) = handle.set_filter(filter) {
|
||||
return Ok(RoomMessageEventContent::text_plain(format!(
|
||||
"Failed to reload filter: {e}"
|
||||
)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue