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