add admin server uptime command
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
781d4b7907
commit
4b6938e0f6
|
@ -5,13 +5,16 @@ 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,
|
||||
show_config, uptime,
|
||||
};
|
||||
use crate::Result;
|
||||
|
||||
#[cfg_attr(test, derive(Debug))]
|
||||
#[derive(Subcommand)]
|
||||
pub(crate) enum ServerCommand {
|
||||
/// - Time elapsed since startup
|
||||
Uptime,
|
||||
|
||||
/// - Show configuration values
|
||||
ShowConfig,
|
||||
|
||||
|
@ -43,6 +46,7 @@ pub(crate) enum ServerCommand {
|
|||
|
||||
pub(crate) async fn process(command: ServerCommand, body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||
Ok(match command {
|
||||
ServerCommand::Uptime => uptime(body).await?,
|
||||
ServerCommand::ShowConfig => show_config(body).await?,
|
||||
ServerCommand::MemoryUsage => memory_usage(body).await?,
|
||||
ServerCommand::ClearDatabaseCaches {
|
||||
|
|
|
@ -2,6 +2,24 @@ use ruma::events::room::message::RoomMessageEventContent;
|
|||
|
||||
use crate::{services, Result};
|
||||
|
||||
pub(crate) async fn uptime(_body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||
let seconds = services()
|
||||
.globals
|
||||
.started
|
||||
.elapsed()
|
||||
.expect("standard duration")
|
||||
.as_secs();
|
||||
let result = format!(
|
||||
"up {} days, {} hours, {} minutes, {} seconds.",
|
||||
seconds / 86400,
|
||||
(seconds % 86400) / 60 / 60,
|
||||
(seconds % 3600) / 60,
|
||||
seconds % 60,
|
||||
);
|
||||
|
||||
Ok(RoomMessageEventContent::notice_html(String::new(), result))
|
||||
}
|
||||
|
||||
pub(crate) async fn show_config(_body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||
// Construct and send the response
|
||||
Ok(RoomMessageEventContent::text_plain(format!("{}", services().globals.config)))
|
||||
|
|
|
@ -7,7 +7,7 @@ use std::{
|
|||
atomic::{self, AtomicBool},
|
||||
Arc,
|
||||
},
|
||||
time::Instant,
|
||||
time::{Instant, SystemTime},
|
||||
};
|
||||
|
||||
use argon2::Argon2;
|
||||
|
@ -63,7 +63,7 @@ pub(crate) struct Service<'a> {
|
|||
pub(crate) roomid_federationhandletime: RwLock<HashMap<OwnedRoomId, (OwnedEventId, Instant)>>,
|
||||
pub(crate) stateres_mutex: Arc<Mutex<()>>,
|
||||
pub(crate) rotate: RotationHandler,
|
||||
|
||||
pub(crate) started: SystemTime,
|
||||
pub(crate) shutdown: AtomicBool,
|
||||
pub(crate) argon: Argon2<'a>,
|
||||
}
|
||||
|
@ -165,6 +165,7 @@ impl Service<'_> {
|
|||
stateres_mutex: Arc::new(Mutex::new(())),
|
||||
sync_receivers: RwLock::new(HashMap::new()),
|
||||
rotate: RotationHandler::new(),
|
||||
started: SystemTime::now(),
|
||||
shutdown: AtomicBool::new(false),
|
||||
argon,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue