57 lines
1.6 KiB
Rust
57 lines
1.6 KiB
Rust
use std::{env, path::PathBuf, process};
|
|
|
|
use actix_web::{web, App, HttpServer};
|
|
use database::Database;
|
|
use dotenvy::dotenv;
|
|
use log::{error, info};
|
|
use schemas::AppState;
|
|
|
|
mod database;
|
|
mod schemas;
|
|
mod util;
|
|
mod firmware_api;
|
|
mod device_telemetry_api;
|
|
|
|
|
|
#[actix_web::main]
|
|
async fn main() -> std::io::Result<()> {
|
|
dotenv().ok();
|
|
env_logger::init();
|
|
info!("Starting");
|
|
|
|
let db_url = match env::var("DATABASE_URL") {
|
|
Ok(url) => url,
|
|
Err(e) => {
|
|
error!("Failed reading DATABASE_URL: {e}");
|
|
process::exit(1);
|
|
}
|
|
};
|
|
let external_url = env::var("URL").unwrap_or("localhost".to_string());
|
|
info!("Connecting to Database {}", db_url);
|
|
|
|
let db = Database::init(&db_url).await;
|
|
db.init_db().await;
|
|
|
|
HttpServer::new(move || {
|
|
App::new()
|
|
.app_data(web::Data::new(AppState {
|
|
db: db.clone(),
|
|
firmwares_path: PathBuf::from("./fw"),
|
|
hostname: external_url.clone(),
|
|
}))
|
|
.app_data(web::PayloadConfig::new(256 * 1024 * 1024)) //256MB
|
|
.service(device_telemetry_api::receive_telemetry)
|
|
.service(device_telemetry_api::get_telemetry)
|
|
.service(device_telemetry_api::receive_value)
|
|
.service(device_telemetry_api::get_value)
|
|
.service(device_telemetry_api::get_devices)
|
|
.service(firmware_api::upload_firmware)
|
|
.service(firmware_api::get_firmware_json)
|
|
.service(firmware_api::serve_firmware)
|
|
})
|
|
.bind(("0.0.0.0", 8282))?
|
|
.run()
|
|
.await
|
|
}
|
|
|