mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-14 20:26:48 +00:00
99 lines
3.1 KiB
Rust
99 lines
3.1 KiB
Rust
use clap::Parser;
|
|
use logmonitor::app::{App, AppResult};
|
|
use logmonitor::command::{self, CommandLineArgs};
|
|
use logmonitor::constant::CMD_ARGS;
|
|
use logmonitor::event::{Event, EventHandler};
|
|
use logmonitor::handler::{handle_backend_events, handle_key_events};
|
|
use logmonitor::logging::LoggingInitResult;
|
|
use logmonitor::tui::Tui;
|
|
use ratatui::backend::CrosstermBackend;
|
|
use ratatui::Terminal;
|
|
use std::io;
|
|
|
|
extern crate log;
|
|
|
|
fn main() -> AppResult<()> {
|
|
let command_line_args = command::CommandLineArgs::parse();
|
|
*CMD_ARGS.write().unwrap() = Some(command_line_args.clone());
|
|
println!("{:?}", command_line_args);
|
|
prepare_env();
|
|
|
|
let logging_init_result = logmonitor::logging::init(&command_line_args);
|
|
if !command_line_args.tui {
|
|
return start_headless_app(command_line_args, logging_init_result);
|
|
} else {
|
|
return start_tui_app(command_line_args, logging_init_result);
|
|
}
|
|
}
|
|
|
|
fn prepare_env() {
|
|
// 创建日志文件夹
|
|
let p = CMD_ARGS.read().unwrap().clone();
|
|
let log_dir = p.unwrap().log_dir;
|
|
std::fs::create_dir_all(log_dir).expect("Failed to create log directory.");
|
|
}
|
|
|
|
/// 启动无界面应用
|
|
fn start_headless_app(
|
|
cmdargs: CommandLineArgs,
|
|
_logging_init_result: LoggingInitResult,
|
|
) -> AppResult<()> {
|
|
let mut app = App::new("DragonOS Log Monitor");
|
|
let events = EventHandler::new(250);
|
|
let _app_backend = logmonitor::backend::AppBackend::new(cmdargs.clone(), events.sender());
|
|
|
|
while app.running {
|
|
match events.next()? {
|
|
Event::Tick => app.tick(),
|
|
Event::Key(key_event) => handle_key_events(key_event, &mut app)?,
|
|
Event::Mouse(_) => {}
|
|
Event::Resize(_, _) => {}
|
|
Event::Backend(e) => {
|
|
handle_backend_events(e, &mut app)?;
|
|
}
|
|
}
|
|
}
|
|
println!("Headless mode not implemented yet.");
|
|
Ok(())
|
|
}
|
|
|
|
/// 启动TUI应用
|
|
fn start_tui_app(
|
|
cmdargs: CommandLineArgs,
|
|
logging_init_result: LoggingInitResult,
|
|
) -> AppResult<()> {
|
|
// Create an application.
|
|
let mut app = App::new("DragonOS Log Monitor");
|
|
if let Some(receiver) = logging_init_result.tui_receiver {
|
|
app.set_backend_log_receiver(receiver);
|
|
}
|
|
|
|
// Initialize the terminal user interface.
|
|
let backend = CrosstermBackend::new(io::stderr());
|
|
let terminal = Terminal::new(backend)?;
|
|
let events = EventHandler::new(250);
|
|
let mut tui = Tui::new(terminal, events);
|
|
tui.init()?;
|
|
let _app_backend = logmonitor::backend::AppBackend::new(cmdargs.clone(), tui.events.sender());
|
|
|
|
// Start the main loop.
|
|
while app.running {
|
|
// Render the user interface.
|
|
tui.draw(&mut app)?;
|
|
// Handle events.
|
|
match tui.events.next()? {
|
|
Event::Tick => app.tick(),
|
|
Event::Key(key_event) => handle_key_events(key_event, &mut app)?,
|
|
Event::Mouse(_) => {}
|
|
Event::Resize(_, _) => {}
|
|
Event::Backend(e) => {
|
|
handle_backend_events(e, &mut app)?;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Exit the user interface.
|
|
tui.exit()?;
|
|
Ok(())
|
|
}
|