Improve thread handling
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
use std::error::Error;
|
||||
|
||||
use crate::types::{Asset, Class, Exchange};
|
||||
use sqlx::{query_as, PgPool};
|
||||
use std::error::Error;
|
||||
|
||||
pub async fn get_assets(
|
||||
database_pool: &PgPool,
|
||||
|
@@ -3,15 +3,11 @@ mod pool;
|
||||
mod routes;
|
||||
mod types;
|
||||
|
||||
use axum::{
|
||||
routing::{delete, get, post},
|
||||
Extension, Router, Server,
|
||||
};
|
||||
use dotenv::dotenv;
|
||||
use log::info;
|
||||
use pool::{create_alpaca_pool_from_env, create_database_pool_from_env};
|
||||
use routes::assets;
|
||||
use std::{error::Error, net::SocketAddr};
|
||||
use routes::initialize_api;
|
||||
use std::error::Error;
|
||||
use tokio::spawn;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
@@ -22,18 +18,16 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let database_pool = create_database_pool_from_env(num_clients).await?;
|
||||
let alpaca_pool = create_alpaca_pool_from_env(num_clients).await?;
|
||||
|
||||
let app = Router::new()
|
||||
.route("/assets", get(assets::get_assets))
|
||||
.route("/assets/:symbol", get(assets::get_asset))
|
||||
.route("/assets", post(assets::add_asset))
|
||||
.route("/assets/:symbol", post(assets::update_asset))
|
||||
.route("/assets/:symbol", delete(assets::delete_asset))
|
||||
.layer(Extension(database_pool))
|
||||
.layer(Extension(alpaca_pool));
|
||||
let mut threads = Vec::new();
|
||||
|
||||
let addr = SocketAddr::from(([0, 0, 0, 0], 7878));
|
||||
info!("Listening on {}...", addr);
|
||||
Server::bind(&addr).serve(app.into_make_service()).await?;
|
||||
threads.push(spawn(initialize_api(
|
||||
database_pool.clone(),
|
||||
alpaca_pool.clone(),
|
||||
)));
|
||||
|
||||
for thread in threads {
|
||||
let _ = thread.await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@@ -1 +1,30 @@
|
||||
use crate::pool::AlpacaPool;
|
||||
use axum::{
|
||||
routing::{delete, get, post},
|
||||
Extension, Router, Server,
|
||||
};
|
||||
use log::info;
|
||||
use sqlx::PgPool;
|
||||
use std::net::SocketAddr;
|
||||
|
||||
pub mod assets;
|
||||
|
||||
pub async fn initialize_api(
|
||||
database_pool: PgPool,
|
||||
alpaca_pool: AlpacaPool,
|
||||
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
let app = Router::new()
|
||||
.route("/assets", get(assets::get_assets))
|
||||
.route("/assets/:symbol", get(assets::get_asset))
|
||||
.route("/assets", post(assets::add_asset))
|
||||
.route("/assets/:symbol", post(assets::update_asset))
|
||||
.route("/assets/:symbol", delete(assets::delete_asset))
|
||||
.layer(Extension(database_pool))
|
||||
.layer(Extension(alpaca_pool));
|
||||
|
||||
let addr = SocketAddr::from(([0, 0, 0, 0], 7878));
|
||||
info!("Listening on {}...", addr);
|
||||
Server::bind(&addr).serve(app.into_make_service()).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user