2023-04-27 10:53:28 -04:00
|
|
|
//! Main module of the application
|
|
|
|
//!
|
|
|
|
//! This module contains the main function which handles the logging of the application to the
|
|
|
|
//! stdout and handles the command line arguments provided and launches the `websurfx` server.
|
|
|
|
|
2023-08-29 13:07:28 -04:00
|
|
|
use mimalloc::MiMalloc;
|
2023-04-30 11:16:08 -04:00
|
|
|
use std::net::TcpListener;
|
2023-11-28 01:17:35 -05:00
|
|
|
use websurfx::{cache::cacher::create_cache, config::parser::Config, run};
|
2023-04-24 06:12:44 -04:00
|
|
|
|
2023-08-27 14:17:21 -04:00
|
|
|
/// A dhat heap memory profiler
|
2023-08-27 13:46:19 -04:00
|
|
|
#[cfg(feature = "dhat-heap")]
|
|
|
|
#[global_allocator]
|
|
|
|
static ALLOC: dhat::Alloc = dhat::Alloc;
|
|
|
|
|
2023-08-29 13:07:28 -04:00
|
|
|
#[cfg(not(feature = "dhat-heap"))]
|
|
|
|
#[global_allocator]
|
|
|
|
static GLOBAL: MiMalloc = MiMalloc;
|
|
|
|
|
2023-04-27 10:53:28 -04:00
|
|
|
/// The function that launches the main server and registers all the routes of the website.
|
|
|
|
///
|
|
|
|
/// # Error
|
|
|
|
///
|
|
|
|
/// Returns an error if the port is being used by something else on the system and is not
|
|
|
|
/// available for being used for other applications.
|
2023-04-22 07:35:07 -04:00
|
|
|
#[actix_web::main]
|
|
|
|
async fn main() -> std::io::Result<()> {
|
2023-08-27 13:46:19 -04:00
|
|
|
// A dhat heap profiler initialization.
|
|
|
|
#[cfg(feature = "dhat-heap")]
|
|
|
|
let _profiler = dhat::Profiler::new_heap();
|
2023-08-27 14:17:21 -04:00
|
|
|
|
2023-04-30 11:16:08 -04:00
|
|
|
// Initialize the parsed config file.
|
2023-08-19 03:09:09 -04:00
|
|
|
let config = Config::parse(false).unwrap();
|
2023-09-12 16:14:54 -04:00
|
|
|
|
2023-11-28 01:17:35 -05:00
|
|
|
let cache = create_cache(&config).await;
|
2023-04-24 06:12:44 -04:00
|
|
|
|
2023-08-02 13:05:39 -04:00
|
|
|
log::info!(
|
|
|
|
"started server on port {} and IP {}",
|
|
|
|
config.port,
|
|
|
|
config.binding_ip
|
|
|
|
);
|
|
|
|
log::info!(
|
|
|
|
"Open http://{}:{}/ in your browser",
|
2023-08-05 12:16:27 -04:00
|
|
|
config.binding_ip,
|
2023-08-02 13:05:39 -04:00
|
|
|
config.port,
|
|
|
|
);
|
2023-04-24 06:12:44 -04:00
|
|
|
|
2023-07-03 13:30:25 -04:00
|
|
|
let listener = TcpListener::bind((config.binding_ip.clone(), config.port))?;
|
2023-04-22 07:35:07 -04:00
|
|
|
|
2023-09-09 12:17:29 -04:00
|
|
|
run(listener, config, cache)?.await
|
2023-04-22 07:35:07 -04:00
|
|
|
}
|