add globals iterators/getters for admin query cmd, improve structure a bit
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
2de4eea688
commit
ce7355cbe0
10 changed files with 195 additions and 13 deletions
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
|
@ -417,8 +417,8 @@ jobs:
|
||||||
# Tag and push the architecture specific git ref
|
# Tag and push the architecture specific git ref
|
||||||
if [[ "$TARGET_NAME" = *"x86_64"* ]]; then
|
if [[ "$TARGET_NAME" = *"x86_64"* ]]; then
|
||||||
if [[ "$TARGET_NAME" = *"jemalloc"* ]]; then
|
if [[ "$TARGET_NAME" = *"jemalloc"* ]]; then
|
||||||
docker manifest create $IMAGE_NAME:$GITHUB_REF_NAME --amend $IMAGE_NAME:$GITHUB_SHA-jemalloc-$IMAGE_SUFFIX_AMD64
|
docker manifest create $IMAGE_NAME:$GITHUB_REF_NAME --amend $IMAGE_NAME:$GITHUB_SHA-jemalloc-$IMAGE_SUFFIX_AMD64
|
||||||
docker manifest push $IMAGE_NAME:$GITHUB_REF_NAME
|
docker manifest push $IMAGE_NAME:$GITHUB_REF_NAME
|
||||||
else
|
else
|
||||||
docker manifest create $IMAGE_NAME:$GITHUB_REF_NAME --amend $IMAGE_NAME:$GITHUB_SHA-$IMAGE_SUFFIX_AMD64
|
docker manifest create $IMAGE_NAME:$GITHUB_REF_NAME --amend $IMAGE_NAME:$GITHUB_SHA-$IMAGE_SUFFIX_AMD64
|
||||||
docker manifest push $IMAGE_NAME:$GITHUB_REF_NAME
|
docker manifest push $IMAGE_NAME:$GITHUB_REF_NAME
|
||||||
|
|
|
@ -9,7 +9,6 @@ use crate::{services, Result};
|
||||||
#[cfg_attr(test, derive(Debug))]
|
#[cfg_attr(test, derive(Debug))]
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
/// All the getters and iterators from src/database/key_value/account_data.rs
|
/// All the getters and iterators from src/database/key_value/account_data.rs
|
||||||
/// via services()
|
|
||||||
pub(crate) enum AccountData {
|
pub(crate) enum AccountData {
|
||||||
/// - Returns all changes to the account data that happened after `since`.
|
/// - Returns all changes to the account data that happened after `since`.
|
||||||
ChangesSince {
|
ChangesSince {
|
||||||
|
@ -32,7 +31,7 @@ pub(crate) enum AccountData {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/// All the getters and iterators in key_value/account_data.rs via services()
|
/// All the getters and iterators from src/database/key_value/account_data.rs
|
||||||
pub(crate) async fn account_data(subcommand: AccountData) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn account_data(subcommand: AccountData) -> Result<RoomMessageEventContent> {
|
||||||
match subcommand {
|
match subcommand {
|
||||||
AccountData::ChangesSince {
|
AccountData::ChangesSince {
|
||||||
|
|
|
@ -5,8 +5,7 @@ use crate::{services, Result};
|
||||||
|
|
||||||
#[cfg_attr(test, derive(Debug))]
|
#[cfg_attr(test, derive(Debug))]
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
/// All the getters and iterators from src/database/key_value/appservice.rs via
|
/// All the getters and iterators from src/database/key_value/appservice.rs
|
||||||
/// services()
|
|
||||||
pub(crate) enum Appservice {
|
pub(crate) enum Appservice {
|
||||||
/// - Gets the appservice registration info/details from the ID as a string
|
/// - Gets the appservice registration info/details from the ID as a string
|
||||||
GetRegistration {
|
GetRegistration {
|
||||||
|
@ -15,7 +14,7 @@ pub(crate) enum Appservice {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/// All the getters and iterators in key_value/appservice.rs via services()
|
/// All the getters and iterators from src/database/key_value/appservice.rs
|
||||||
pub(crate) async fn appservice(subcommand: Appservice) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn appservice(subcommand: Appservice) -> Result<RoomMessageEventContent> {
|
||||||
match subcommand {
|
match subcommand {
|
||||||
Appservice::GetRegistration {
|
Appservice::GetRegistration {
|
||||||
|
|
96
src/service/admin/query/globals.rs
Normal file
96
src/service/admin/query/globals.rs
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
use clap::Subcommand;
|
||||||
|
use ruma::{events::room::message::RoomMessageEventContent, ServerName};
|
||||||
|
|
||||||
|
use crate::{services, Result};
|
||||||
|
|
||||||
|
#[cfg_attr(test, derive(Debug))]
|
||||||
|
#[derive(Subcommand)]
|
||||||
|
/// All the getters and iterators from src/database/key_value/globals.rs
|
||||||
|
pub(crate) enum Globals {
|
||||||
|
DatabaseVersion,
|
||||||
|
|
||||||
|
CurrentCount,
|
||||||
|
|
||||||
|
LastCheckForUpdatesId,
|
||||||
|
|
||||||
|
LoadKeypair,
|
||||||
|
|
||||||
|
/// - This returns an empty `Ok(BTreeMap<..>)` when there are no keys found
|
||||||
|
/// for the server.
|
||||||
|
SigningKeysFor {
|
||||||
|
origin: Box<ServerName>,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/// All the getters and iterators from src/database/key_value/globals.rs
|
||||||
|
pub(crate) async fn globals(subcommand: Globals) -> Result<RoomMessageEventContent> {
|
||||||
|
match subcommand {
|
||||||
|
Globals::DatabaseVersion => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().globals.db.database_version();
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", results),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
results
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
Globals::CurrentCount => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().globals.db.current_count();
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", results),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
results
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
Globals::LastCheckForUpdatesId => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().globals.db.last_check_for_updates_id();
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", results),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
results
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
Globals::LoadKeypair => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().globals.db.load_keypair();
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", results),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
results
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
Globals::SigningKeysFor {
|
||||||
|
origin,
|
||||||
|
} => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().globals.db.signing_keys_for(&origin);
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", results),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
results
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,4 +3,6 @@ pub(crate) mod query;
|
||||||
|
|
||||||
pub(crate) mod account_data;
|
pub(crate) mod account_data;
|
||||||
pub(crate) mod appservice;
|
pub(crate) mod appservice;
|
||||||
|
pub(crate) mod globals;
|
||||||
pub(crate) mod presence;
|
pub(crate) mod presence;
|
||||||
|
pub(crate) mod room_alias;
|
||||||
|
|
|
@ -5,8 +5,7 @@ use crate::{services, Result};
|
||||||
|
|
||||||
#[cfg_attr(test, derive(Debug))]
|
#[cfg_attr(test, derive(Debug))]
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
/// All the getters and iterators from src/database/key_value/presence.rs via
|
/// All the getters and iterators from src/database/key_value/presence.rs
|
||||||
/// services()
|
|
||||||
pub(crate) enum Presence {
|
pub(crate) enum Presence {
|
||||||
/// - Returns the latest presence event for the given user.
|
/// - Returns the latest presence event for the given user.
|
||||||
GetPresence {
|
GetPresence {
|
||||||
|
@ -14,15 +13,15 @@ pub(crate) enum Presence {
|
||||||
user_id: Box<UserId>,
|
user_id: Box<UserId>,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// - Returns the most recent presence updates that happened after the event
|
/// - Iterator of the most recent presence updates that happened after the
|
||||||
/// with id `since`.
|
/// event with id `since`.
|
||||||
PresenceSince {
|
PresenceSince {
|
||||||
/// UNIX timestamp since (u64)
|
/// UNIX timestamp since (u64)
|
||||||
since: u64,
|
since: u64,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/// All the getters and iterators in key_value/presence.rs via services()
|
/// All the getters and iterators in key_value/presence.rs
|
||||||
pub(crate) async fn presence(subcommand: Presence) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn presence(subcommand: Presence) -> Result<RoomMessageEventContent> {
|
||||||
match subcommand {
|
match subcommand {
|
||||||
Presence::GetPresence {
|
Presence::GetPresence {
|
||||||
|
|
|
@ -4,7 +4,9 @@ use ruma::events::room::message::RoomMessageEventContent;
|
||||||
use super::{
|
use super::{
|
||||||
account_data::{account_data, AccountData},
|
account_data::{account_data, AccountData},
|
||||||
appservice::{appservice, Appservice},
|
appservice::{appservice, Appservice},
|
||||||
|
globals::{globals, Globals},
|
||||||
presence::{presence, Presence},
|
presence::{presence, Presence},
|
||||||
|
room_alias::{room_alias, RoomAlias},
|
||||||
};
|
};
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
|
|
||||||
|
@ -23,6 +25,14 @@ pub(crate) enum QueryCommand {
|
||||||
/// - presence.rs iterators and getters
|
/// - presence.rs iterators and getters
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
Presence(Presence),
|
Presence(Presence),
|
||||||
|
|
||||||
|
/// - rooms/alias.rs iterators and getters
|
||||||
|
#[command(subcommand)]
|
||||||
|
RoomAlias(RoomAlias),
|
||||||
|
|
||||||
|
/// - globals.rs iterators and getters
|
||||||
|
#[command(subcommand)]
|
||||||
|
Globals(Globals),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Processes admin query commands
|
/// Processes admin query commands
|
||||||
|
@ -32,5 +42,7 @@ pub(crate) async fn process(command: QueryCommand, _body: Vec<&str>) -> Result<R
|
||||||
QueryCommand::AccountData(AccountData) => account_data(AccountData).await,
|
QueryCommand::AccountData(AccountData) => account_data(AccountData).await,
|
||||||
QueryCommand::Appservice(Appservice) => appservice(Appservice).await,
|
QueryCommand::Appservice(Appservice) => appservice(Appservice).await,
|
||||||
QueryCommand::Presence(Presence) => presence(Presence).await,
|
QueryCommand::Presence(Presence) => presence(Presence).await,
|
||||||
|
QueryCommand::RoomAlias(RoomAlias) => room_alias(RoomAlias).await,
|
||||||
|
QueryCommand::Globals(Globals) => globals(Globals).await,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
76
src/service/admin/query/room_alias.rs
Normal file
76
src/service/admin/query/room_alias.rs
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
use clap::Subcommand;
|
||||||
|
use ruma::{events::room::message::RoomMessageEventContent, RoomAliasId, RoomId};
|
||||||
|
|
||||||
|
use crate::{services, Result};
|
||||||
|
|
||||||
|
#[cfg_attr(test, derive(Debug))]
|
||||||
|
#[derive(Subcommand)]
|
||||||
|
/// All the getters and iterators from src/database/key_value/rooms/alias.rs
|
||||||
|
pub(crate) enum RoomAlias {
|
||||||
|
ResolveLocalAlias {
|
||||||
|
/// Full room alias
|
||||||
|
alias: Box<RoomAliasId>,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// - Iterator of all our local room aliases for the room ID
|
||||||
|
LocalAliasesForRoom {
|
||||||
|
/// Full room ID
|
||||||
|
room_id: Box<RoomId>,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// - Iterator of all our local aliases in our database with their room IDs
|
||||||
|
AllLocalAliases,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// All the getters and iterators in src/database/key_value/rooms/alias.rs
|
||||||
|
pub(crate) async fn room_alias(subcommand: RoomAlias) -> Result<RoomMessageEventContent> {
|
||||||
|
match subcommand {
|
||||||
|
RoomAlias::ResolveLocalAlias {
|
||||||
|
alias,
|
||||||
|
} => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().rooms.alias.db.resolve_local_alias(&alias);
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", results),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
results
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
RoomAlias::LocalAliasesForRoom {
|
||||||
|
room_id,
|
||||||
|
} => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().rooms.alias.db.local_aliases_for_room(&room_id);
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
let aliases: Vec<_> = results.collect();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", aliases),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
aliases
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
RoomAlias::AllLocalAliases => {
|
||||||
|
let timer = tokio::time::Instant::now();
|
||||||
|
let results = services().rooms.alias.db.all_local_aliases();
|
||||||
|
let query_time = timer.elapsed();
|
||||||
|
|
||||||
|
let aliases: Vec<_> = results.collect();
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_html(
|
||||||
|
format!("Query completed in {query_time:?}:\n\n```\n{:?}```", aliases),
|
||||||
|
format!(
|
||||||
|
"<p>Query completed in {query_time:?}:</p>\n<pre><code>{:?}\n</code></pre>",
|
||||||
|
aliases
|
||||||
|
),
|
||||||
|
))
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +0,0 @@
|
||||||
pub(crate) use alias;
|
|
Loading…
Add table
Reference in a new issue