2021-05-05 18:00:45 +00:00
|
|
|
#![forbid(unsafe_code)]
|
2021-05-10 06:47:06 +00:00
|
|
|
use actix_demo::{AppConfig, AppData, EnvConfig, LoggerFormat};
|
2021-05-11 06:12:37 +00:00
|
|
|
use diesel::r2d2::ConnectionManager;
|
|
|
|
use diesel_tracing::sqlite::InstrumentedSqliteConnection;
|
2021-05-05 14:30:11 +00:00
|
|
|
use io::ErrorKind;
|
2021-05-02 11:17:23 +00:00
|
|
|
use std::io;
|
2021-05-10 06:47:06 +00:00
|
|
|
use tracing::subscriber::set_global_default;
|
|
|
|
use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
|
|
|
|
use tracing_log::LogTracer;
|
|
|
|
use tracing_subscriber::fmt::format::FmtSpan;
|
|
|
|
use tracing_subscriber::{
|
|
|
|
layer::SubscriberExt, EnvFilter, FmtSubscriber, Registry,
|
|
|
|
};
|
2020-05-06 13:25:54 +00:00
|
|
|
|
2021-04-21 05:41:48 +00:00
|
|
|
#[actix_web::main]
|
2021-05-05 14:30:11 +00:00
|
|
|
async fn main() -> io::Result<()> {
|
|
|
|
let _ = dotenv::dotenv().map_err(|err| {
|
2021-05-02 11:17:23 +00:00
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to set up env: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
2020-05-06 13:25:54 +00:00
|
|
|
|
2021-05-05 14:30:11 +00:00
|
|
|
let env_config = envy::prefixed("ACTIX_DEMO_")
|
|
|
|
.from_env::<EnvConfig>()
|
|
|
|
.map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to parse config: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
|
2021-05-10 06:47:06 +00:00
|
|
|
let _ = setup_logger(env_config.logger_format)?;
|
|
|
|
|
2021-05-05 14:30:11 +00:00
|
|
|
let connspec = &env_config.database_url;
|
2021-05-11 06:12:37 +00:00
|
|
|
let manager =
|
|
|
|
ConnectionManager::<InstrumentedSqliteConnection>::new(connspec);
|
2021-05-02 11:17:23 +00:00
|
|
|
let pool = r2d2::Pool::builder().build(manager).map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to create pool: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
2020-05-06 13:25:54 +00:00
|
|
|
|
2021-05-05 14:30:11 +00:00
|
|
|
let _ = {
|
2021-05-02 11:17:23 +00:00
|
|
|
let conn = &pool.get().map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to get connection: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
|
2021-05-05 14:30:11 +00:00
|
|
|
let _ =
|
|
|
|
diesel_migrations::run_pending_migrations(conn).map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Error running migrations: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
};
|
2020-08-12 07:05:26 +00:00
|
|
|
|
2021-05-05 14:30:11 +00:00
|
|
|
let app_data = AppData {
|
|
|
|
config: AppConfig {
|
|
|
|
hash_cost: env_config.hash_cost,
|
|
|
|
},
|
2021-04-21 05:41:48 +00:00
|
|
|
pool: pool.clone(),
|
|
|
|
};
|
|
|
|
|
2021-05-05 14:30:11 +00:00
|
|
|
actix_demo::run(format!("{}:7800", env_config.http_host), app_data).await
|
2020-05-06 13:25:54 +00:00
|
|
|
}
|
2021-05-10 06:47:06 +00:00
|
|
|
|
|
|
|
pub fn setup_logger(format: LoggerFormat) -> io::Result<()> {
|
|
|
|
let env_filter =
|
|
|
|
EnvFilter::try_from_env("ACTIX_DEMO_RUST_LOG").map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to set up env filter: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
|
|
|
|
let _ = LogTracer::init().map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to set up log tracer: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
|
|
|
|
let bi = actix_demo::get_build_info();
|
|
|
|
|
|
|
|
let _ = match format {
|
|
|
|
LoggerFormat::Json => {
|
|
|
|
let formatting_layer = BunyanFormattingLayer::new(
|
|
|
|
format!("actix-demo-{}", bi.crate_info.version),
|
|
|
|
// Output the formatted spans to stdout.
|
|
|
|
std::io::stdout,
|
|
|
|
);
|
|
|
|
let subscriber = Registry::default()
|
|
|
|
.with(env_filter)
|
|
|
|
.with(JsonStorageLayer)
|
|
|
|
.with(formatting_layer);
|
|
|
|
let _ = set_global_default(subscriber).map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to set subscriber: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
}
|
|
|
|
|
2021-05-15 13:57:06 +00:00
|
|
|
LoggerFormat::Pretty => {
|
2021-05-10 06:47:06 +00:00
|
|
|
let subscriber = FmtSubscriber::builder()
|
|
|
|
.pretty()
|
|
|
|
.with_span_events(FmtSpan::NEW)
|
|
|
|
.with_span_events(FmtSpan::CLOSE)
|
|
|
|
.with_env_filter(env_filter)
|
|
|
|
.finish();
|
|
|
|
let _ = set_global_default(subscriber).map_err(|err| {
|
|
|
|
io::Error::new(
|
|
|
|
ErrorKind::Other,
|
|
|
|
format!("Failed to set subscriber: {:?}", err),
|
|
|
|
)
|
|
|
|
})?;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
Ok(())
|
|
|
|
}
|