Improve thread handling

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2023-08-28 16:23:31 +03:00
parent c897e3c840
commit 003f47339f
3 changed files with 42 additions and 20 deletions

View File

@@ -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,

View File

@@ -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(())
}

View File

@@ -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(())
}