Changeset View
Changeset View
Standalone View
Standalone View
services/tunnelbroker/src/main.rs
pub mod config; | |||||
pub mod constants; | pub mod constants; | ||||
pub mod grpc; | pub mod grpc; | ||||
pub mod websockets; | pub mod websockets; | ||||
use anyhow::{anyhow, Result}; | |||||
use config::CONFIG; | |||||
use dashmap::DashMap; | use dashmap::DashMap; | ||||
use once_cell::sync::Lazy; | use once_cell::sync::Lazy; | ||||
use std::io::{self, Error, ErrorKind}; | |||||
use tokio::sync::mpsc::UnboundedSender; | use tokio::sync::mpsc::UnboundedSender; | ||||
use tracing::{self, Level}; | use tracing::{self, Level}; | ||||
use tracing_subscriber::EnvFilter; | use tracing_subscriber::EnvFilter; | ||||
pub static ACTIVE_CONNECTIONS: Lazy<DashMap<String, UnboundedSender<String>>> = | pub static ACTIVE_CONNECTIONS: Lazy<DashMap<String, UnboundedSender<String>>> = | ||||
Lazy::new(DashMap::new); | Lazy::new(DashMap::new); | ||||
#[tokio::main] | #[tokio::main] | ||||
async fn main() -> Result<(), io::Error> { | async fn main() -> Result<()> { | ||||
let filter = EnvFilter::builder() | let filter = EnvFilter::builder() | ||||
.with_default_directive(Level::INFO.into()) | .with_default_directive(Level::INFO.into()) | ||||
.with_env_var(constants::LOG_LEVEL_ENV_VAR) | .with_env_var(constants::LOG_LEVEL_ENV_VAR) | ||||
.from_env_lossy(); | .from_env_lossy(); | ||||
let subscriber = tracing_subscriber::fmt().with_env_filter(filter).finish(); | let subscriber = tracing_subscriber::fmt().with_env_filter(filter).finish(); | ||||
tracing::subscriber::set_global_default(subscriber) | tracing::subscriber::set_global_default(subscriber) | ||||
.expect("Unable to configure tracing"); | .expect("Unable to configure tracing"); | ||||
config::parse_cmdline_args()?; | |||||
let _aws_config = config::load_aws_config().await; | |||||
let grpc_server = grpc::run_server(); | let grpc_server = grpc::run_server(); | ||||
let websocket_server = websockets::run_server(); | let websocket_server = websockets::run_server(); | ||||
tokio::select! { | tokio::select! { | ||||
Ok(_) = grpc_server => { Ok(()) }, | Ok(_) = grpc_server => { Ok(()) }, | ||||
Ok(_) = websocket_server => { Ok(()) }, | Ok(_) = websocket_server => { Ok(()) }, | ||||
else => { | else => { | ||||
tracing::error!("A grpc or websocket server crashed."); | tracing::error!("A grpc or websocket server crashed."); | ||||
Err(Error::new(ErrorKind::Other, "A grpc or websocket server crashed.")) | Err(anyhow!("A grpc or websocket server crashed.")) | ||||
} | } | ||||
} | } | ||||
} | } |