You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.7KB

  1. #![allow(unused_imports)]
  2. #[macro_use]
  3. extern crate slog;
  4. use std::path::PathBuf;
  5. use std::time::*;
  6. use std::io::{self, prelude::*};
  7. use std::fs;
  8. use structopt::StructOpt;
  9. use serde::{Serialize, Deserialize};
  10. use slog::Drain;
  11. use markets::crypto::{Exchange, Ticker, Side};
  12. // equivalent to panic! but without the ugly 'thread main panicked' yada yada
  13. macro_rules! fatal { ($fmt:expr, $($args:tt)*) => {{
  14. eprintln!($fmt, $($args)*);
  15. std::process::exit(1);
  16. }}}
  17. #[derive(Debug, StructOpt)]
  18. struct Opt {
  19. /// Path to CSV file with trades data
  20. #[structopt(short = "f", long = "trades-csv")]
  21. #[structopt(parse(from_os_str))]
  22. trades_csv: PathBuf,
  23. }
  24. #[derive(Deserialize)]
  25. struct Trade {
  26. /// Unix nanoseconds
  27. pub time: u64,
  28. pub exch: Exchange,
  29. pub ticker: Ticker,
  30. pub side: Option<Side>,
  31. pub price: f64,
  32. pub amount: f64,
  33. }
  34. fn main() {
  35. let start = Instant::now();
  36. let decorator = slog_term::TermDecorator::new().stdout().force_color().build();
  37. let drain = slog_term::FullFormat::new(decorator).use_utc_timestamp().build().fuse();
  38. let drain = slog_async::Async::new(drain).chan_size(1024 * 64).thread_name("recv".into()).build().fuse();
  39. let logger = slog::Logger::root(drain, o!("version" => structopt::clap::crate_version!()));
  40. info!(logger, "initializing...");
  41. let opt = Opt::from_args();
  42. if ! opt.trades_csv.exists() {
  43. error!(logger, "path does not exist: {}", opt.trades_csv.display());
  44. fatal!("Error: path does not exist: {}", opt.trades_csv.display());
  45. }
  46. info!(logger, "verified csv path exists"; "trades_csv" => %opt.trades_csv.display());
  47. let took = Instant::now() - start;
  48. info!(logger, "finished in {:?}", took);
  49. }