Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ rocket = { version = "0.5.1", features = ["serde_json", "json"] }
rustc-hash = "2.1.0"
serde = { version = "1.0.216", features = ["derive"] }
serde_json = "1.0.133"
tracing = "0.1.41"
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
uom = { version = "0.36.0", features = ["serde"] }

[dev-dependencies]
Expand Down
36 changes: 24 additions & 12 deletions backend/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ use bincode;
use clap::{Parser, Subcommand};
use eftb::data::SolarSystemId;
use indicatif::ProgressIterator;
use log::{info, warn};
use tracing::{info, warn};
use tracing_subscriber::{fmt::format::FmtSpan, layer::SubscriberExt, util::SubscriberInitExt};
use uom::si::f64::*;
use uom::si::length::light_year;

Expand Down Expand Up @@ -75,18 +76,24 @@ enum Commands {
}

fn main() -> anyhow::Result<()> {
use env_logger::Env;
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
tracing_subscriber::registry()
.with(tracing_subscriber::EnvFilter::new(
std::env::var("RUST_LOG").unwrap_or_else(|_| "debug".into()),
))
.with(tracing_subscriber::fmt::layer().with_span_events(FmtSpan::ENTER | FmtSpan::CLOSE))
.init();

let cli = Cli::parse();

match &cli.command {
Some(Commands::Build { max_jump_distance }) => {
info!("Loading raw data");
let raw_star_data = raw::RawStarMap::from_file("data/extracted-starmap.json");
let max_jump_dist: Length = Length::new::<light_year>(*max_jump_distance);

info!("Building star map");
let span = tracing::info_span!("Loading raw data").entered();
let raw_star_data = raw::RawStarMap::from_file("data/extracted-starmap.json");
span.exit();

let span = tracing::info_span!("Building star map").entered();
let mut star_map: HashMap<data::SolarSystemId, data::Star> = HashMap::new();
for (id_str, raw_star) in raw_star_data.solar_systems.iter() {
let id = id_str.parse()?;
Expand All @@ -100,8 +107,9 @@ fn main() -> anyhow::Result<()> {
};
star_map.insert(id, star);
}
span.exit();

info!("Building connections from npc gates");
let span = tracing::info_span!("Building connections from npc gates").entered();
let mut conn_count = 0;
for raw_jump in raw_star_data.jumps.iter() {
// rust only lets us borrow one mutable star at a time, so we can't add
Expand Down Expand Up @@ -133,8 +141,9 @@ fn main() -> anyhow::Result<()> {
conn_count += 1;
}
}
span.exit();

info!("Building connections from smart gates");
let span = tracing::info_span!("Building connections from smart gates").entered();
let smart_gates: Vec<raw::RawSmartGate> =
serde_json::from_str(&std::fs::read_to_string("data/smartgates.json")?)?;
for gate in smart_gates.iter() {
Expand All @@ -157,8 +166,9 @@ fn main() -> anyhow::Result<()> {
});
conn_count += 1;
}
span.exit();

info!("Building connections from jumps");
let span = tracing::info_span!("Building connections from jumps").entered();
let cloned_star_map = star_map.clone();
for star in star_map.values_mut().progress() {
for other_star in cloned_star_map.values() {
Expand All @@ -177,17 +187,19 @@ fn main() -> anyhow::Result<()> {
}
}
}
span.exit();

info!("Sorting connections");
let span = tracing::info_span!("Sorting connections").entered();
// sort gates first, and then jumps by distance - then when we
// reach a jump that is too long we can stop searching
for star in star_map.values_mut().progress() {
star.connections.sort_unstable();
}
span.exit();

info!("Saving star map");
let span = tracing::info_span!("Saving star map").entered();
data::save_star_map(&star_map)?;
info!("Complete");
span.exit();
}
Some(Commands::Dist {
start_name,
Expand Down