use std::sync::Arc; use detee_shared::general_proto::brain_general_cli_server::BrainGeneralCliServer; use detee_shared::vm_proto::brain_vm_cli_server::BrainVmCliServer; use detee_shared::vm_proto::brain_vm_daemon_server::BrainVmDaemonServer; use dotenv::dotenv; use surreal_brain::constants::{BRAIN_GRPC_ADDR, CERT_KEY_PATH, CERT_PATH}; use surreal_brain::db; use surreal_brain::grpc::general::GeneralCliServer; use surreal_brain::grpc::vm::{VmCliServer, VmDaemonServer}; use tonic::transport::{Identity, Server, ServerTlsConfig}; #[tokio::main] async fn main() { if dotenv::from_filename("/etc/detee/brain/config.ini").is_err() { dotenv().ok(); } env_logger::builder().filter_level(log::LevelFilter::Debug).init(); let db_url = std::env::var("DB_URL").expect("the environment variable DB_URL is not set"); let db_user = std::env::var("DB_USER").expect("the environment variable DB_USER is not set"); let db_pass = std::env::var("DB_PASS").expect("the environment variable DB_PASS is not set"); let db_ns = std::env::var("DB_NAMESPACE").expect("the env variable DB_NAMESPACE is not set"); let db_name = std::env::var("DB_NAME").expect("the environment variable DB_NAME is not set"); let db = db::db_connection(&db_url, &db_user, &db_pass, &db_ns, &db_name).await.unwrap(); let db_arc = Arc::new(db); let addr = BRAIN_GRPC_ADDR.parse().unwrap(); let snp_daemon_server = BrainVmDaemonServer::new(VmDaemonServer::new(db_arc.clone())); let snp_cli_server = BrainVmCliServer::new(VmCliServer::new(db_arc.clone())); let general_service_server = BrainGeneralCliServer::new(GeneralCliServer::new(db_arc.clone())); let cert_path = std::env::var("CERT_PATH").unwrap_or(CERT_PATH.to_string()); let key_path = std::env::var("CERT_KEY_PATH").unwrap_or(CERT_KEY_PATH.to_string()); let cert = std::fs::read_to_string(cert_path).unwrap(); let key = std::fs::read_to_string(key_path).unwrap(); let identity = Identity::from_pem(cert, key); Server::builder() .tls_config(ServerTlsConfig::new().identity(identity)) .unwrap() .add_service(snp_daemon_server) .add_service(snp_cli_server) .add_service(general_service_server) .serve(addr) .await .unwrap(); }