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 crate::types::{Asset, Class, Exchange};
|
||||||
use sqlx::{query_as, PgPool};
|
use sqlx::{query_as, PgPool};
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
pub async fn get_assets(
|
pub async fn get_assets(
|
||||||
database_pool: &PgPool,
|
database_pool: &PgPool,
|
||||||
|
@@ -3,15 +3,11 @@ mod pool;
|
|||||||
mod routes;
|
mod routes;
|
||||||
mod types;
|
mod types;
|
||||||
|
|
||||||
use axum::{
|
|
||||||
routing::{delete, get, post},
|
|
||||||
Extension, Router, Server,
|
|
||||||
};
|
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use log::info;
|
|
||||||
use pool::{create_alpaca_pool_from_env, create_database_pool_from_env};
|
use pool::{create_alpaca_pool_from_env, create_database_pool_from_env};
|
||||||
use routes::assets;
|
use routes::initialize_api;
|
||||||
use std::{error::Error, net::SocketAddr};
|
use std::error::Error;
|
||||||
|
use tokio::spawn;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
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 database_pool = create_database_pool_from_env(num_clients).await?;
|
||||||
let alpaca_pool = create_alpaca_pool_from_env(num_clients).await?;
|
let alpaca_pool = create_alpaca_pool_from_env(num_clients).await?;
|
||||||
|
|
||||||
let app = Router::new()
|
let mut threads = Vec::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));
|
threads.push(spawn(initialize_api(
|
||||||
info!("Listening on {}...", addr);
|
database_pool.clone(),
|
||||||
Server::bind(&addr).serve(app.into_make_service()).await?;
|
alpaca_pool.clone(),
|
||||||
|
)));
|
||||||
|
|
||||||
|
for thread in threads {
|
||||||
|
let _ = thread.await?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
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 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