监控模块 优化

This commit is contained in:
zhongluofeng
2026-07-24 18:16:34 +08:00
parent e8267c244f
commit 7e6149355e
15 changed files with 2148 additions and 234 deletions
+34 -1
View File
@@ -1,9 +1,11 @@
use std::sync::Arc;
use tauri::Manager;
mod download_engine;
mod logger;
mod mihomo_manager;
mod monitor_kernel;
mod network_monitor;
mod process_manager;
use download_engine::{
@@ -23,9 +25,12 @@ use mihomo_manager::{
proxy_test_delay, proxy_update_kernel, proxy_update_profile, proxy_version, MihomoManager,
};
use monitor_kernel::{
monitor_get_snapshot, monitor_get_status, monitor_kernel_info, monitor_start, monitor_status,
monitor_elevate_self, monitor_get_elevate_on_launch, monitor_get_hardware_config,
monitor_get_snapshot, monitor_get_status, monitor_kernel_info, monitor_set_elevate_on_launch,
monitor_set_hardware_config, monitor_start, monitor_start_elevated, monitor_status,
monitor_stop, MonitorKernel,
};
use network_monitor::{network_monitor_status, NetworkMonitor};
use process_manager::{
get_all_process_status, get_process_status, start_monitoring_thread, start_process,
stop_all_processes, stop_process, ProcessManager,
@@ -41,12 +46,15 @@ fn quit_app(
state: tauri::State<'_, ProcessManager>,
mihomo: tauri::State<'_, MihomoManager>,
engine: tauri::State<'_, DownloadEngine>,
monitor: tauri::State<'_, MonitorKernel>,
app: tauri::AppHandle,
) {
// 退出前清理系统代理,避免遗留导致网络问题
mihomo.cleanup_on_exit();
// 退出前保存下载引擎状态
engine.cleanup_on_exit();
// 停止提权 Kernel(普通权限由 stop_all 统一清理,提权 Kernel 需通过 /shutdown
tauri::async_runtime::block_on(monitor.cleanup_on_exit(&app));
// 停止所有子进程(同步 kill + 带超时的 wait,确保进程真正终止)
state.stop_all();
// 通过 app.exit 触发 RunEvent::ExitRequested,统一退出路径
@@ -104,9 +112,16 @@ pub fn run() {
monitor_kernel_info,
monitor_status,
monitor_start,
monitor_start_elevated,
monitor_elevate_self,
monitor_stop,
monitor_get_status,
monitor_get_snapshot,
monitor_get_elevate_on_launch,
monitor_set_elevate_on_launch,
monitor_get_hardware_config,
monitor_set_hardware_config,
network_monitor_status,
downloader_get_tasks,
downloader_add_task,
downloader_pause_task,
@@ -134,6 +149,12 @@ pub fn run() {
.app_data_dir()
.unwrap_or_else(|_| std::path::PathBuf::from("."));
// 永久提权检查:如果标志已设置且当前非管理员,以管理员权限重启自身并退出
// 必须在所有模块初始化之前执行(此时无资源需要清理)
if monitor_kernel::check_and_relaunch_if_needed(&app_data_dir) {
std::process::exit(0);
}
let mihomo = MihomoManager::new(app_data_dir.clone());
app.manage(mihomo);
@@ -141,6 +162,12 @@ pub fn run() {
let monitor = MonitorKernel::new(app_data_dir.clone());
app.manage(monitor);
// 初始化 NetworkMonitor(网速监控,独立于 ThingHK Kernel
// 网速采样不依赖提权,应用启动即开始
let network_monitor = Arc::new(NetworkMonitor::new());
app.manage(network_monitor.clone());
network_monitor.start(app.handle().clone());
// 初始化 DownloadEngine,数据目录: {app_data_dir}/downloader/
let engine = DownloadEngine::new(
app_data_dir.join("downloader"),
@@ -179,6 +206,9 @@ pub fn run() {
if let Some(engine) = app.try_state::<DownloadEngine>() {
engine.cleanup_on_exit();
}
if let Some(monitor) = app.try_state::<MonitorKernel>() {
tauri::async_runtime::block_on(monitor.cleanup_on_exit(app));
}
if let Some(pm) = app.try_state::<ProcessManager>() {
pm.stop_all();
}
@@ -241,6 +271,9 @@ pub fn run() {
if let Some(engine) = app.try_state::<DownloadEngine>() {
engine.cleanup_on_exit();
}
if let Some(monitor) = app.try_state::<MonitorKernel>() {
tauri::async_runtime::block_on(monitor.cleanup_on_exit(app));
}
if let Some(pm) = app.try_state::<ProcessManager>() {
pm.stop_all();
}