1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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(())
- }
|