Files
osirose-new/character-service/src/main.rs

51 lines
1.8 KiB
Rust

mod character_db_client;
mod character_service;
pub mod database {
tonic::include_proto!("character_db_api");
}
use crate::character_db_client::CharacterDbClient;
use crate::character_service::character::character_service_server::CharacterServiceServer;
use crate::character_service::MyCharacterService;
use dotenv::dotenv;
use std::env;
use std::str::FromStr;
use std::sync::Arc;
use tracing::Level;
use utils::service_discovery::{get_kube_service_endpoints_by_dns};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv().ok();
tracing_subscriber::fmt()
.with_max_level(
Level::from_str(&env::var("LOG_LEVEL").unwrap_or_else(|_| "info".to_string()))
.unwrap_or_else(|_| Level::INFO),
)
.init();
// Set the gRPC server address
let addr = env::var("LISTEN_ADDR").unwrap_or_else(|_| "0.0.0.0".to_string());
let port = env::var("SERVICE_PORT").unwrap_or_else(|_| "50053".to_string());
let db_url = format!("http://{}",get_kube_service_endpoints_by_dns("database-service","tcp","database-service").await?.get(0).unwrap());
let full_addr = format!("{}:{}", &addr, port);
let address = full_addr.parse().expect("Invalid address");
let character_db_client = Arc::new(CharacterDbClient::connect(&db_url).await?);
let character_service = MyCharacterService {
character_db_client,
};
let (mut health_reporter, health_service) = tonic_health::server::health_reporter();
health_reporter.set_serving::<CharacterServiceServer<MyCharacterService>>().await;
tonic::transport::Server::builder()
.add_service(health_service)
.add_service(CharacterServiceServer::new(character_service))
.serve(address)
.await?;
utils::signal_handler::wait_for_signal().await;
Ok(())
}