server: add request tracing span, log affected users/databases
This commit is contained in:
@@ -17,6 +17,8 @@ mod modify_privileges;
|
||||
mod passwd_user;
|
||||
mod unlock_users;
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
|
||||
pub use check_authorization::*;
|
||||
pub use complete_database_name::*;
|
||||
pub use complete_user_name::*;
|
||||
@@ -41,6 +43,8 @@ use tokio::net::UnixStream;
|
||||
use tokio_serde::{Framed as SerdeFramed, formats::Bincode};
|
||||
use tokio_util::codec::{Framed, LengthDelimitedCodec};
|
||||
|
||||
use crate::core::types::{MySQLDatabase, MySQLUser};
|
||||
|
||||
pub type ServerToClientMessageStream = SerdeFramed<
|
||||
Framed<UnixStream, LengthDelimitedCodec>,
|
||||
Request,
|
||||
@@ -104,6 +108,85 @@ pub enum Request {
|
||||
Exit,
|
||||
}
|
||||
|
||||
impl Request {
|
||||
pub fn command_name(&self) -> &str {
|
||||
match self {
|
||||
Request::CheckAuthorization(_) => "check-authorization",
|
||||
Request::ListValidNamePrefixes => "list-valid-name-prefixes",
|
||||
Request::CompleteDatabaseName(_) => "complete-database-name",
|
||||
Request::CompleteUserName(_) => "complete-user-name",
|
||||
Request::CreateDatabases(_) => "create-databases",
|
||||
Request::DropDatabases(_) => "drop-databases",
|
||||
Request::ListDatabases(_) => "list-databases",
|
||||
Request::ListPrivileges(_) => "list-privileges",
|
||||
Request::ModifyPrivileges(_) => "modify-privileges",
|
||||
Request::CreateUsers(_) => "create-users",
|
||||
Request::DropUsers(_) => "drop-users",
|
||||
Request::PasswdUser(_) => "passwd-user",
|
||||
Request::ListUsers(_) => "list-users",
|
||||
Request::LockUsers(_) => "lock-users",
|
||||
Request::UnlockUsers(_) => "unlock-users",
|
||||
Request::Exit => "exit",
|
||||
}
|
||||
}
|
||||
|
||||
pub fn affected_users(&self) -> BTreeSet<MySQLUser> {
|
||||
match self {
|
||||
Request::CheckAuthorization(_) => Default::default(),
|
||||
Request::ListValidNamePrefixes => Default::default(),
|
||||
Request::CompleteDatabaseName(_) => Default::default(),
|
||||
Request::CompleteUserName(_) => Default::default(),
|
||||
Request::CreateDatabases(_) => Default::default(),
|
||||
Request::DropDatabases(_) => Default::default(),
|
||||
Request::ListDatabases(_) => Default::default(),
|
||||
Request::ListPrivileges(_) => Default::default(),
|
||||
Request::ModifyPrivileges(priv_diffs) => priv_diffs
|
||||
.iter()
|
||||
.map(|priv_diff| priv_diff.get_user_name().clone())
|
||||
.collect(),
|
||||
Request::CreateUsers(users) => users.iter().cloned().collect(),
|
||||
Request::DropUsers(users) => users.iter().cloned().collect(),
|
||||
Request::PasswdUser(user_passwd_req) => {
|
||||
let mut result = BTreeSet::new();
|
||||
result.insert(user_passwd_req.0.clone());
|
||||
result
|
||||
}
|
||||
Request::ListUsers(users) => users.clone().unwrap_or_default().into_iter().collect(),
|
||||
Request::LockUsers(users) => users.iter().cloned().collect(),
|
||||
Request::UnlockUsers(users) => users.iter().cloned().collect(),
|
||||
Request::Exit => Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn affected_databases(&self) -> BTreeSet<MySQLDatabase> {
|
||||
match self {
|
||||
Request::CheckAuthorization(_) => Default::default(),
|
||||
Request::ListValidNamePrefixes => Default::default(),
|
||||
Request::CompleteDatabaseName(_) => Default::default(),
|
||||
Request::CompleteUserName(_) => Default::default(),
|
||||
Request::CreateDatabases(databases) => databases.iter().cloned().collect(),
|
||||
Request::DropDatabases(databases) => databases.iter().cloned().collect(),
|
||||
Request::ListDatabases(databases) => {
|
||||
databases.clone().unwrap_or_default().into_iter().collect()
|
||||
}
|
||||
Request::ListPrivileges(databases) => {
|
||||
databases.clone().unwrap_or_default().into_iter().collect()
|
||||
}
|
||||
Request::ModifyPrivileges(priv_diffs) => priv_diffs
|
||||
.iter()
|
||||
.map(|priv_diff| priv_diff.get_database_name().clone())
|
||||
.collect(),
|
||||
Request::CreateUsers(_) => Default::default(),
|
||||
Request::DropUsers(_) => Default::default(),
|
||||
Request::PasswdUser(_) => Default::default(),
|
||||
Request::ListUsers(_) => Default::default(),
|
||||
Request::LockUsers(_) => Default::default(),
|
||||
Request::UnlockUsers(_) => Default::default(),
|
||||
Request::Exit => Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: include a generic "message" that will display a message to the user?
|
||||
|
||||
#[non_exhaustive]
|
||||
|
||||
Reference in New Issue
Block a user