1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//! Blog system entry point.
//!
//! Default behavior: starts the HTTP server. Use subcommands to switch to other operations.
//!
//! # Subcommands
//!
//! - `server start` Start the server (default)
//! - `server stop` Stop the running server
//! - `server restart` Restart the server
//! - `server status` Check running status
//! - `db migrate` Run database migrations
//! - `db rollback` Rollback last batch of migrations
//! - `db backup` Backup the database
#![deny(unsafe_code)]
rust_i18n::i18n!("locales", fallback = "en");
use clap::Parser;
use raisfast::config::app::AppConfig;
mod cli;
mod logging;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let config = AppConfig::init();
cli::print_banner(&config);
let cli = cli::Cli::parse();
let _log_guard = logging::init(&config.log_dir);
logging::cleanup_old_logs(&config.log_dir, config.log_max_files);
let log_dir = config.log_dir.clone();
let max_files = config.log_max_files;
tokio::spawn(async move {
let mut interval = tokio::time::interval(std::time::Duration::from_secs(3600));
loop {
interval.tick().await;
logging::cleanup_old_logs(&log_dir, max_files);
}
});
cli::run(cli, &config).await?;
Ok(())
}