mirror of
https://github.com/shiroyashik/sculptor.git
synced 2025-12-06 13:01:12 +03:00
performance fix
This commit is contained in:
parent
703a2727e7
commit
393127570e
3 changed files with 36 additions and 19 deletions
21
src/main.rs
21
src/main.rs
|
|
@ -3,7 +3,6 @@ use axum::{
|
|||
extract::DefaultBodyLimit, middleware::from_extractor, routing::{delete, get, post, put}, Router
|
||||
};
|
||||
use dashmap::DashMap;
|
||||
use utils::collect_advanced_users;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::{broadcast, Mutex};
|
||||
use tower_http::trace::TraceLayer;
|
||||
|
|
@ -28,9 +27,11 @@ use profile as api_profile;
|
|||
|
||||
// Utils
|
||||
mod utils;
|
||||
use utils::update_advanced_users;
|
||||
|
||||
// Config
|
||||
mod config;
|
||||
use config::Config;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct AppState {
|
||||
|
|
@ -66,7 +67,7 @@ async fn main() -> Result<()> {
|
|||
|
||||
info!("The Sculptor v{}", SCULPTOR_VERSION);
|
||||
// Config
|
||||
let config = Arc::new(Mutex::new(config::Config::parse(config_file.clone().into())));
|
||||
let config = Arc::new(Mutex::new(Config::parse(config_file.clone().into())));
|
||||
let listen = config.lock().await.listen.clone();
|
||||
|
||||
// State
|
||||
|
|
@ -77,26 +78,20 @@ async fn main() -> Result<()> {
|
|||
};
|
||||
|
||||
// Automatic update of configuration while the server is running
|
||||
let config_update = state.config.clone();
|
||||
let config_update = Arc::clone(&state.config);
|
||||
let user_manager = Arc::clone(&state.user_manager);
|
||||
update_advanced_users(&config_update.lock().await.advanced_users, &user_manager);
|
||||
tokio::spawn(async move {
|
||||
loop {
|
||||
let new_config = config::Config::parse(config_file.clone().into());
|
||||
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
|
||||
let new_config = Config::parse(config_file.clone().into());
|
||||
let mut config = config_update.lock().await;
|
||||
|
||||
if new_config != *config {
|
||||
info!("Server configuration modification detected!");
|
||||
*config = new_config;
|
||||
// let collected = collect_advanced_users(&config.advanced_users);
|
||||
// for (uuid, userinfo) in collected {
|
||||
// user_manager.insert_user(uuid, userinfo);
|
||||
// }
|
||||
update_advanced_users(&config.advanced_users, &user_manager);
|
||||
}
|
||||
let collected = collect_advanced_users(&config.advanced_users);
|
||||
for (uuid, userinfo) in collected {
|
||||
user_manager.insert_user(uuid, userinfo);
|
||||
}
|
||||
tokio::time::sleep(std::time::Duration::from_secs(10)).await;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
30
src/utils.rs
30
src/utils.rs
|
|
@ -5,7 +5,7 @@ use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
|||
use ring::digest::{self, digest};
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::auth::{AuthSystem, Userinfo};
|
||||
use crate::auth::{AuthSystem, UManager, Userinfo};
|
||||
|
||||
// Core functions
|
||||
pub fn rand() -> [u8; 50] {
|
||||
|
|
@ -36,8 +36,25 @@ pub fn get_correct_array(value: &toml::Value) -> Vec<u8> {
|
|||
.map(move |x| x.as_integer().unwrap() as u8)
|
||||
.collect()
|
||||
}
|
||||
pub fn collect_advanced_users(value: &toml::Table) -> Vec<(Uuid, Userinfo)> {
|
||||
value
|
||||
// pub fn collect_advanced_users(value: &toml::Table) -> Vec<(Uuid, Userinfo)> {
|
||||
// value
|
||||
// .iter()
|
||||
// .map( |(uuid, userdata)| {
|
||||
// let auth_system = AuthSystem::from_str(userdata.as_table().unwrap().get("authSystem").expect("Can't find authSystem in advancedUser!").as_str().unwrap()).unwrap();
|
||||
// let username = userdata.as_table().unwrap().get("username").expect("Can't find username in advancedUser!").as_str().unwrap().to_string();
|
||||
// (
|
||||
// Uuid::parse_str(uuid).unwrap(),
|
||||
// Userinfo { username,
|
||||
// uuid: Uuid::parse_str(uuid).unwrap(),
|
||||
// auth_system,
|
||||
// token: None
|
||||
// }
|
||||
// )})
|
||||
// .collect()
|
||||
// }
|
||||
|
||||
pub fn update_advanced_users(value: &toml::Table, umanager: &UManager) {
|
||||
let users: Vec<(Uuid, Userinfo)> = value
|
||||
.iter()
|
||||
.map( |(uuid, userdata)| {
|
||||
let auth_system = AuthSystem::from_str(userdata.as_table().unwrap().get("authSystem").expect("Can't find authSystem in advancedUser!").as_str().unwrap()).unwrap();
|
||||
|
|
@ -50,9 +67,14 @@ pub fn collect_advanced_users(value: &toml::Table) -> Vec<(Uuid, Userinfo)> {
|
|||
token: None
|
||||
}
|
||||
)})
|
||||
.collect()
|
||||
.collect();
|
||||
|
||||
for (uuid, userinfo) in users {
|
||||
umanager.insert_user(uuid, userinfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn format_uuid(uuid: &Uuid) -> String {
|
||||
// let uuid = Uuid::parse_str(&uuid)?; TODO: Вероятно format_uuid стоит убрать
|
||||
// .map_err(|_| tide::Error::from_str(StatusCode::InternalServerError, "Failed to parse UUID"))?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue