smart-house-web: в работе

This commit is contained in:
4 changed files with 58 additions and 6 deletions

View File

@@ -4,6 +4,7 @@ version = "0.1.0"
edition = "2024"
[dependencies]
axum = "0.8.9"
tracing = "0.1.44"
tracing-subscriber = "0.3.23"
tracing = "0.1"
tracing-subscriber = "0.3"
axum = "0.8"
tokio = { version = "1.52", features = ["macros", "rt-multi-thread"] }

View File

@@ -1,3 +1,8 @@
const CODE_LOGGER_INITIALIZATION_ERROR: i32 = 1;
const CODE_TOKIO_RUNTIME_CREATION_ERROR: i32 = 2;
const CODE_LISTENER_BINDING_ERROR: i32 = 3;
const CODE_STARTIG_SERVER_ERROR: i32 = 4;
pub fn init_logger() {
use tracing_subscriber::{Layer, layer::SubscriberExt, util::SubscriberInitExt};
@@ -9,8 +14,11 @@ pub fn init_logger() {
.boxed();
if let Err(e) = tracing_subscriber::registry().with(vec![layer]).try_init() {
eprintln!("Logger initialization failed: {:?}", e);
std::process::exit(1);
std::process::exit(CODE_LOGGER_INITIALIZATION_ERROR);
} else {
tracing::trace!("Logger succesfully initialized");
}
}
mod server;
pub use server::run_server;

View File

@@ -1,6 +1,6 @@
use backend::init_logger;
use backend::{init_logger, run_server};
fn main() {
init_logger();
println!("Hello, world!");
run_server();
}

View File

@@ -0,0 +1,43 @@
pub fn run_server() {
use std::process::exit;
use tracing::{error, info};
let runtime = match tokio::runtime::Builder::new_multi_thread()
.worker_threads(2)
.enable_all()
.build()
{
Ok(runtime) => runtime,
Err(e) => {
error!("Failed to create Tokio runtime: {:?}", e);
exit(crate::CODE_TOKIO_RUNTIME_CREATION_ERROR);
}
};
runtime.block_on(async {
let app = axum::Router::new().fallback(fallback);
let addr = "127.0.0.1:8080";
let listener = match tokio::net::TcpListener::bind(addr).await {
Ok(listener) => listener,
Err(e) => {
error!("Failed to bind listener to {}: {:?}", addr, e);
exit(crate::CODE_LISTENER_BINDING_ERROR);
}
};
info!("Starting server at {}...", addr);
if let Err(e) = axum::serve(listener, app)
.with_graceful_shutdown(shutdown_signal())
.await
{
error!("Failed to start server: {:?}", e);
exit(crate::CODE_STARTIG_SERVER_ERROR);
};
info!("Shutdown server");
});
}
async fn fallback() -> axum::response::Response {
use axum::response::IntoResponse;
(axum::http::StatusCode::NOT_FOUND, "404 NOT FOUND").into_response()
}
async fn shutdown_signal() {}