From be1424b1e165d82f8b8ef62e5778d8fd1aafc659 Mon Sep 17 00:00:00 2001 From: dboures Date: Sat, 6 May 2023 20:06:42 -0500 Subject: [PATCH] feat: finish /tickers route --- src/backfill/main.rs | 6 +++++ src/server/coingecko.rs | 59 ++++++++++++++++++++--------------------- src/server/markets.rs | 2 +- 3 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 src/backfill/main.rs diff --git a/src/backfill/main.rs b/src/backfill/main.rs new file mode 100644 index 0000000..b408afb --- /dev/null +++ b/src/backfill/main.rs @@ -0,0 +1,6 @@ + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + + Ok(()) +} diff --git a/src/server/coingecko.rs b/src/server/coingecko.rs index 8bb6b7e..44ea8fc 100644 --- a/src/server/coingecko.rs +++ b/src/server/coingecko.rs @@ -1,14 +1,12 @@ -use std::str::FromStr; - use crate::server_error::ServerError; use actix_web::{get, web, HttpResponse, Scope}; -use anchor_lang::prelude::Pubkey; use futures::join; use num_traits::ToPrimitive; use openbook_candles::{ database::fetch::{fetch_coingecko_24h_high_low, fetch_coingecko_24h_volume}, - structs::coingecko::{ - CoinGecko24HourVolume, CoinGeckoPair, CoinGeckoTicker, PgCoinGecko24HighLow, + structs::{ + coingecko::{CoinGecko24HourVolume, CoinGeckoPair, CoinGeckoTicker, PgCoinGecko24HighLow}, + slab::{get_best_bids_and_asks}, }, utils::WebContext, }; @@ -40,16 +38,26 @@ pub async fn pairs(context: web::Data) -> Result) -> Result { - let markets = context.markets.clone(); + let client = RpcClient::new(context.rpc_url.clone()); + let markets = &context.markets; - // rpc get bid ask liquidity + let mut c1 = context.pool.acquire().await.unwrap(); + let mut c2 = context.pool.acquire().await.unwrap(); + let bba_fut = get_best_bids_and_asks(client, markets); + let volume_fut = fetch_coingecko_24h_volume(&mut c1); + let high_low_fut = fetch_coingecko_24h_high_low(&mut c2); - let mut conn = context.pool.acquire().await.unwrap(); - let raw_volumes = match fetch_coingecko_24h_volume(&mut conn).await { + let ((best_bids, best_asks), volume_query, high_low_quey) = join!( + bba_fut, + volume_fut, + high_low_fut, + ); + + let raw_volumes = match volume_query { Ok(c) => c, Err(_) => return Err(ServerError::DbQueryError), }; - let high_low = match fetch_coingecko_24h_high_low(&mut conn).await { + let high_low = match high_low_quey { Ok(c) => c, Err(_) => return Err(ServerError::DbQueryError), }; @@ -62,7 +70,8 @@ pub async fn tickers(context: web::Data) -> Result) -> Result) -> Result) -> Result { let client = RpcClient::new(context.rpc_url.clone()); - let markets = context.markets.clone(); - let bid_keys = markets - .iter() - .map(|m| Pubkey::from_str(&m.bids_key).unwrap()) - .collect::>(); - let ask_keys = markets - .iter() - .map(|m| Pubkey::from_str(&m.asks_key).unwrap()) - .collect::>(); + let markets = &context.markets; - // client.get_multiple_accounts(&bid_keys) + let (best_bids, best_asks) = get_best_bids_and_asks(client, markets).await; - let (bid_results, _ask_results) = join!( - client.get_multiple_accounts(&bid_keys), - client.get_multiple_accounts(&ask_keys) - ); + // let bids = bid_bytes.into_iter().map(|mut x| Slab::new(x.as_mut_slice())).collect::>(); + // Slab::new(&mut x.data) - let x = bid_results.unwrap(); + // let mut bb = bid_bytes[0].clone(); + // let data_end = bb.len() - 7; - println!("{:?}", x); + // let goo = Slab::new(&mut bb[13..data_end]); // decode results diff --git a/src/server/markets.rs b/src/server/markets.rs index 3caa320..cd08964 100644 --- a/src/server/markets.rs +++ b/src/server/markets.rs @@ -4,6 +4,6 @@ use openbook_candles::utils::WebContext; #[get("/markets")] pub async fn get_markets(context: web::Data) -> Result { - let markets = context.markets.clone(); + let markets = &context.markets; Ok(HttpResponse::Ok().json(markets)) }