mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-12 20:57:26 +08:00
optimize easytier-web (#522)
1. use default compress level for tower_http. the best level consume lots of memory 2. add more help message and command line arg.
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -1987,12 +1987,14 @@ dependencies = [
|
|||||||
"password-auth",
|
"password-auth",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"rust-embed",
|
"rust-embed",
|
||||||
|
"rust-i18n",
|
||||||
"rusttype",
|
"rusttype",
|
||||||
"sea-orm",
|
"sea-orm",
|
||||||
"sea-orm-migration",
|
"sea-orm-migration",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sqlx",
|
"sqlx",
|
||||||
|
"sys-locale",
|
||||||
"thiserror 1.0.63",
|
"thiserror 1.0.63",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower-http",
|
"tower-http",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
name = "easytier-web"
|
name = "easytier-web"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
description = "Config server for easytier. easytier-core gets config from this and web frontend use it as restful api server."
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
easytier = { path = "../easytier" }
|
easytier = { path = "../easytier" }
|
||||||
@@ -36,6 +37,8 @@ rusttype = "0.9.3"
|
|||||||
imageproc = "0.23.0"
|
imageproc = "0.23.0"
|
||||||
|
|
||||||
|
|
||||||
|
rust-i18n = "3"
|
||||||
|
sys-locale = "0.3"
|
||||||
clap = { version = "4.4.8", features = [
|
clap = { version = "4.4.8", features = [
|
||||||
"string",
|
"string",
|
||||||
"unicode",
|
"unicode",
|
||||||
|
|||||||
24
easytier-web/locales/app.yml
Normal file
24
easytier-web/locales/app.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
_version: 2
|
||||||
|
|
||||||
|
cli:
|
||||||
|
db:
|
||||||
|
en: "path to the sqlite3 database file, used to save all the data"
|
||||||
|
zh-CN: "sqlite3 数据库文件路径, 用于保存所有数据"
|
||||||
|
console_log_level:
|
||||||
|
en: "The log level for the console logger. Possible values: trace, debug, info, warn, error"
|
||||||
|
zh-CN: "控制台日志级别。可能的值:trace, debug, info, warn, error"
|
||||||
|
file_log_level:
|
||||||
|
en: "The log level for the file logger. Possible values: trace, debug, info, warn, error"
|
||||||
|
zh-CN: "文件日志级别。可能的值:trace, debug, info, warn, error"
|
||||||
|
file_log_dir:
|
||||||
|
en: "The directory to save the log files, default is the current directory"
|
||||||
|
zh-CN: "保存日志文件的目录,默认为当前目录"
|
||||||
|
config_server_port:
|
||||||
|
en: "The port to listen for the config server, used by the easytier-core to connect to"
|
||||||
|
zh-CN: "配置服务器的监听端口,用于被 easytier-core 连接"
|
||||||
|
config_server_protocol:
|
||||||
|
en: "The protocol to listen for the config server, used by the easytier-core to connect to"
|
||||||
|
zh-CN: "配置服务器的监听协议,用于被 easytier-core 连接, 可能的值:udp, tcp"
|
||||||
|
api_server_port:
|
||||||
|
en: "The port to listen for the restful server, acting as ApiHost and used by the web frontend"
|
||||||
|
zh-CN: "restful 服务器的监听端口,作为 ApiHost 并被 web 前端使用"
|
||||||
@@ -1,11 +1,18 @@
|
|||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate rust_i18n;
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use clap::{command, Parser};
|
||||||
use easytier::{
|
use easytier::{
|
||||||
common::config::{ConfigLoader, ConsoleLoggerConfig, TomlConfigLoader},
|
common::{
|
||||||
|
config::{ConfigLoader, ConsoleLoggerConfig, FileLoggerConfig, TomlConfigLoader},
|
||||||
|
constants::EASYTIER_VERSION,
|
||||||
|
},
|
||||||
tunnel::udp::UdpTunnelListener,
|
tunnel::udp::UdpTunnelListener,
|
||||||
utils::init_logger,
|
utils::{init_logger, setup_panic_handler},
|
||||||
};
|
};
|
||||||
|
|
||||||
mod client_manager;
|
mod client_manager;
|
||||||
@@ -13,26 +20,94 @@ mod db;
|
|||||||
mod migrator;
|
mod migrator;
|
||||||
mod restful;
|
mod restful;
|
||||||
|
|
||||||
|
rust_i18n::i18n!("locales", fallback = "en");
|
||||||
|
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
#[command(name = "easytier-core", author, version = EASYTIER_VERSION , about, long_about = None)]
|
||||||
|
struct Cli {
|
||||||
|
#[arg(short, long, default_value = "et.db", help = t!("cli.db").to_string())]
|
||||||
|
db: String,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long,
|
||||||
|
help = t!("cli.console_log_level").to_string(),
|
||||||
|
)]
|
||||||
|
console_log_level: Option<String>,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long,
|
||||||
|
help = t!("cli.file_log_level").to_string(),
|
||||||
|
)]
|
||||||
|
file_log_level: Option<String>,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long,
|
||||||
|
help = t!("cli.file_log_dir").to_string(),
|
||||||
|
)]
|
||||||
|
file_log_dir: Option<String>,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long,
|
||||||
|
short='c',
|
||||||
|
default_value = "22020",
|
||||||
|
help = t!("cli.config_server_port").to_string(),
|
||||||
|
)]
|
||||||
|
config_server_port: u16,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long,
|
||||||
|
short='p',
|
||||||
|
default_value = "udp",
|
||||||
|
help = t!("cli.config_server_protocol").to_string(),
|
||||||
|
)]
|
||||||
|
config_server_protocol: String,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long,
|
||||||
|
short='a',
|
||||||
|
default_value = "11211",
|
||||||
|
help = t!("cli.api_server_port").to_string(),
|
||||||
|
)]
|
||||||
|
api_server_port: u16,
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
let locale = sys_locale::get_locale().unwrap_or_else(|| String::from("en-US"));
|
||||||
|
rust_i18n::set_locale(&locale);
|
||||||
|
setup_panic_handler();
|
||||||
|
|
||||||
|
let cli = Cli::parse();
|
||||||
let config = TomlConfigLoader::default();
|
let config = TomlConfigLoader::default();
|
||||||
config.set_console_logger_config(ConsoleLoggerConfig {
|
config.set_console_logger_config(ConsoleLoggerConfig {
|
||||||
level: Some("trace".to_string()),
|
level: cli.console_log_level,
|
||||||
|
});
|
||||||
|
config.set_file_logger_config(FileLoggerConfig {
|
||||||
|
dir: cli.file_log_dir,
|
||||||
|
level: cli.file_log_level,
|
||||||
|
file: None,
|
||||||
});
|
});
|
||||||
init_logger(config, false).unwrap();
|
init_logger(config, false).unwrap();
|
||||||
|
|
||||||
// let db = db::Db::new(":memory:").await.unwrap();
|
// let db = db::Db::new(":memory:").await.unwrap();
|
||||||
let db = db::Db::new("et.db").await.unwrap();
|
let db = db::Db::new(cli.db).await.unwrap();
|
||||||
|
|
||||||
let listener = UdpTunnelListener::new("udp://0.0.0.0:22020".parse().unwrap());
|
let listener = UdpTunnelListener::new(
|
||||||
|
format!("udp://0.0.0.0:{}", cli.config_server_port)
|
||||||
|
.parse()
|
||||||
|
.unwrap(),
|
||||||
|
);
|
||||||
let mut mgr = client_manager::ClientManager::new(db.clone());
|
let mut mgr = client_manager::ClientManager::new(db.clone());
|
||||||
mgr.serve(listener).await.unwrap();
|
mgr.serve(listener).await.unwrap();
|
||||||
let mgr = Arc::new(mgr);
|
let mgr = Arc::new(mgr);
|
||||||
|
|
||||||
let mut restful_server =
|
let mut restful_server = restful::RestfulServer::new(
|
||||||
restful::RestfulServer::new("0.0.0.0:11211".parse().unwrap(), mgr.clone(), db)
|
format!("0.0.0.0:{}", cli.api_server_port).parse().unwrap(),
|
||||||
.await
|
mgr.clone(),
|
||||||
.unwrap();
|
db,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
restful_server.start().await.unwrap();
|
restful_server.start().await.unwrap();
|
||||||
tokio::signal::ctrl_c().await.unwrap();
|
tokio::signal::ctrl_c().await.unwrap();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ impl RestfulServer {
|
|||||||
.deflate(true)
|
.deflate(true)
|
||||||
.gzip(true)
|
.gzip(true)
|
||||||
.zstd(true)
|
.zstd(true)
|
||||||
.quality(tower_http::compression::CompressionLevel::Best);
|
.quality(tower_http::compression::CompressionLevel::Default);
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/api/v1/summary", get(Self::handle_get_summary))
|
.route("/api/v1/summary", get(Self::handle_get_summary))
|
||||||
|
|||||||
@@ -168,4 +168,4 @@ mod tests {
|
|||||||
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
|
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
|
||||||
tracing::debug!("test display debug");
|
tracing::debug!("test display debug");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user