mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-21 01:32:08 +08:00
* refactor(log): migrate logging to tracing-estuary pipeline Swap flexi_logger + clash-verge-logger wiring for the tracing-estuary crate: buffered file sink with explicit panic/exit drains, live level switching, and tokio-trace/chrome-trace behind crate features. AsyncLogger moves in-house (VecDeque ring); file format and rotation stay unchanged. * fix(log): reset sidecar writer in place and re-pin service-ipc v2.6.7 Rebuilding the sidecar FileLogWriter on config changes leaked flexi's unstoppable flusher thread plus an fd each time; the writer is now flushed and reset in place, matching what the service crate does. get_clash_logs_by_service drops the CompactString conversion layer now that service-ipc v2.6.7 returns plain Vec<String>, and AsyncLogger is renamed LogRing to match. * refactor(log): span-based observability and log noise cleanup Instrument spans carry the structure flat lines never could: the core-start spine (mode, readiness/owner generations, pid, config file), proxy apply and clear routes with guard generations, service IPC sessions with refusal codes and outcomes, profile-switch terminal outcomes, subscription fetch strategies, core upgrades with per-proxy version probes, backup flows, timer tasks, config generation uids, and the startup setup flow; running-mode changes emit one guarded transition event each. ~90 hand-written noise lines are gone or demoted (entry+success pairs, polled getter echoes, phase brackets, window sub-steps, platform install chatter); errors keep their anyhow chain, operation name, and item id, and swallowed retry results surface per attempt.
39 lines
1.3 KiB
Rust
Executable File
39 lines
1.3 KiB
Rust
Executable File
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
|
|
|
use std::process::ExitCode;
|
|
#[cfg(not(all(feature = "perf-harness", target_os = "macos")))]
|
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
|
|
#[cfg(all(feature = "perf-harness", target_os = "macos"))]
|
|
#[path = "../../scripts/perf/app.rs"]
|
|
mod perf;
|
|
|
|
#[cfg(all(feature = "perf-harness", target_os = "macos"))]
|
|
fn main() -> ExitCode {
|
|
perf::run()
|
|
}
|
|
|
|
#[cfg(not(all(feature = "perf-harness", target_os = "macos")))]
|
|
fn main() -> ExitCode {
|
|
let default_parallelism = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(1);
|
|
let worker_limit = std::cmp::min(default_parallelism, 8);
|
|
let blocking_limit = 2 * worker_limit;
|
|
|
|
#[allow(clippy::unwrap_used)]
|
|
let tokio_runtime = tokio::runtime::Builder::new_multi_thread()
|
|
.worker_threads(worker_limit)
|
|
.max_blocking_threads(blocking_limit)
|
|
.enable_all()
|
|
.thread_name_fn(|| {
|
|
static ATOMIC_ID: AtomicUsize = AtomicUsize::new(0);
|
|
let id = ATOMIC_ID.fetch_add(1, Ordering::SeqCst);
|
|
format!("clash-verge-runtime-{id}")
|
|
})
|
|
.build()
|
|
.unwrap();
|
|
let tokio_handle = tokio_runtime.handle();
|
|
tauri::async_runtime::set(tokio_handle.clone());
|
|
|
|
app_lib::run()
|
|
}
|