Changeset View
Changeset View
Standalone View
Standalone View
services/blob/src/main.rs
pub mod constants; | pub mod constants; | ||||
pub mod database; | pub mod database; | ||||
pub mod s3; | pub mod s3; | ||||
pub mod service; | pub mod service; | ||||
pub mod tools; | pub mod tools; | ||||
use anyhow::Result; | use anyhow::Result; | ||||
use aws_sdk_dynamodb::{Endpoint, Region}; | use aws_sdk_dynamodb::{Endpoint, Region}; | ||||
use database::DatabaseClient; | use database::DatabaseClient; | ||||
use service::{blob::blob_service_server::BlobServiceServer, MyBlobService}; | use service::{blob::blob_service_server::BlobServiceServer, MyBlobService}; | ||||
use std::net::SocketAddr; | use std::net::SocketAddr; | ||||
use tonic::transport::{Server, Uri}; | use tonic::transport::{Server, Uri}; | ||||
use tracing::info; | |||||
use tracing_subscriber::filter::{EnvFilter, LevelFilter}; | |||||
fn configure_logging() -> Result<()> { | |||||
let filter = EnvFilter::builder() | |||||
.with_default_directive(LevelFilter::INFO.into()) | |||||
.with_env_var(constants::LOG_LEVEL_ENV_VAR) | |||||
.from_env_lossy(); | |||||
let subscriber = tracing_subscriber::fmt().with_env_filter(filter).finish(); | |||||
tracing::subscriber::set_global_default(subscriber)?; | |||||
Ok(()) | |||||
} | |||||
async fn get_aws_config() -> aws_types::SdkConfig { | async fn get_aws_config() -> aws_types::SdkConfig { | ||||
let mut config_builder = | let mut config_builder = | ||||
aws_config::from_env().region(Region::new(constants::AWS_REGION)); | aws_config::from_env().region(Region::new(constants::AWS_REGION)); | ||||
if tools::is_sandbox_env() { | if tools::is_sandbox_env() { | ||||
info!("Running in sandbox environment"); | |||||
config_builder = config_builder.endpoint_resolver(Endpoint::immutable( | config_builder = config_builder.endpoint_resolver(Endpoint::immutable( | ||||
Uri::from_static(constants::LOCALSTACK_URL), | Uri::from_static(constants::LOCALSTACK_URL), | ||||
)); | )); | ||||
} | } | ||||
return config_builder.load().await; | return config_builder.load().await; | ||||
} | } | ||||
async fn run_grpc_server( | async fn run_grpc_server( | ||||
db_client: DatabaseClient, | db_client: DatabaseClient, | ||||
s3_client: aws_sdk_s3::Client, | s3_client: aws_sdk_s3::Client, | ||||
) -> Result<()> { | ) -> Result<()> { | ||||
let addr: SocketAddr = | let addr: SocketAddr = | ||||
format!("[::]:{}", constants::GRPC_SERVER_DEFAULT_PORT).parse()?; | format!("[::]:{}", constants::GRPC_SERVER_DEFAULT_PORT).parse()?; | ||||
let blob_service = MyBlobService::new(db_client, s3_client); | let blob_service = MyBlobService::new(db_client, s3_client); | ||||
println!("Starting gRPC server at port {}", addr.port()); | info!("Starting gRPC server listening at {}", addr.to_string()); | ||||
Server::builder() | Server::builder() | ||||
.add_service(BlobServiceServer::new(blob_service)) | .add_service(BlobServiceServer::new(blob_service)) | ||||
.serve(addr) | .serve(addr) | ||||
.await?; | .await?; | ||||
Ok(()) | Ok(()) | ||||
} | } | ||||
#[tokio::main] | #[tokio::main] | ||||
async fn main() -> Result<()> { | async fn main() -> Result<()> { | ||||
configure_logging()?; | |||||
let aws_config = get_aws_config().await; | let aws_config = get_aws_config().await; | ||||
let db = database::DatabaseClient::new(&aws_config); | let db = database::DatabaseClient::new(&aws_config); | ||||
let s3 = aws_sdk_s3::Client::new(&aws_config); | let s3 = aws_sdk_s3::Client::new(&aws_config); | ||||
run_grpc_server(db, s3).await | run_grpc_server(db, s3).await | ||||
} | } |