trtr

Trading simulator and techanalysis gym
git clone https://git.ea.contact/trtr
Log | Files | Refs | README

main.rs (1600B)


      1 mod data;
      2 mod handlers;
      3 mod session;
      4 
      5 use std::sync::Arc;
      6 use std::time::Instant;
      7 
      8 use axum::routing::{get, post};
      9 use dashmap::DashMap;
     10 
     11 #[tokio::main]
     12 async fn main() {
     13     println!("Loading CSV data, please wait...");
     14     let t = Instant::now();
     15 
     16     let candles = tokio::task::spawn_blocking(|| {
     17         data::load_csv("data/btc/btcusd_1-min_data.csv.gz").expect("Failed to load CSV")
     18     })
     19     .await
     20     .unwrap();
     21 
     22     println!(
     23         "Loaded {} candles in {:.1}s. Starting server on http://0.0.0.0:3000",
     24         candles.len(),
     25         t.elapsed().as_secs_f64()
     26     );
     27 
     28     let state = handlers::AppState {
     29         data: Arc::new(data::AppData { candles }),
     30         sessions: Arc::new(DashMap::new()),
     31     };
     32 
     33     let app = axum::Router::new()
     34         .route("/", get(handlers::serve_html))
     35         .route("/observe", get(handlers::serve_observe_html))
     36         .route("/api/session/new", post(handlers::new_session))
     37         .route("/api/session/{id}/state", get(handlers::get_session_state))
     38         .route("/api/session/{id}/observe", get(handlers::observe_session))
     39         .route("/api/next", post(handlers::next_candle))
     40         .route("/api/predict", post(handlers::predict))
     41         .route("/api/predict/cancel", post(handlers::cancel_predict))
     42         .with_state(state)
     43         .layer(tower_http::compression::CompressionLayer::new());
     44 
     45     let port = std::env::var("PORT").unwrap_or_else(|_| "3000".to_string());
     46     let addr = format!("0.0.0.0:{}", port);
     47     let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
     48     axum::serve(listener, app).await.unwrap();
     49 }