add load time and autofocus
Some checks failed
Create and publish a Docker image / build-and-push-image (push) Failing after 10m5s

This commit is contained in:
Nicholas Orlowsky 2025-10-06 21:25:15 -04:00
parent 917428507d
commit 5539c8521d
No known key found for this signature in database
GPG key ID: A9F3BA4C0AA7A70B
10 changed files with 153 additions and 11 deletions

View file

@ -198,7 +198,7 @@ impl SeptaFetcher {
let mut routes = Self::fetch_routes(&version).await?;
info!("Discovered {} SEPTA routes", routes.len());
routes = routes.into_iter().filter(|x| x.release_name == "20250914").collect();
routes = routes.into_iter().filter(|x| x.release_name == "20250928").collect();
let route_stops = Self::fetch_route_stops(&mut routes, &version).await?;
info!("Stop data for {} stops on {} routes successfully downloaded", route_stops.len(), routes.len());
@ -209,14 +209,14 @@ impl SeptaFetcher {
let mut calendar = Self::fetch_calendar(&version).await?;
info!("Calendar data successfully downloaded for {} days", calendar.len());
for entry in calendar.clone() {
if entry.1.release_name != "20250914" {
if entry.1.release_name != "20250928" {
calendar.remove(&entry.0.clone());
}
}
let mut schedule_stops = Self::fetch_schedules(&route_stops, &version).await?;
info!("Schedule data downloaded for {} scheduled stops", schedule_stops.len());
schedule_stops = schedule_stops.into_iter().filter(|x| x.release_name == "20250914").collect();
schedule_stops = schedule_stops.into_iter().filter(|x| x.release_name == "20250928").collect();
let mut stop_map: HashMap<String, i64> = HashMap::new();
let mut stop_set: HashSet<i64> = HashSet::new();

View file

@ -69,7 +69,7 @@ impl DbObj<Direction> for Direction {
impl FromSeptaJson<septa_json::direction::Direction> for Direction {
fn from_septa_json(json_dir: septa_json::direction::Direction) -> ::anyhow::Result<Box<Direction>> {
Ok(Box::new(Direction { route_id: json_dir.route, direction_id: json_dir.direction.parse::<i64>()?,
direction: match json_dir.true_direction.as_str() {
direction: match json_dir.true_direction.as_str().clone() {
"Eastbound" => Ok(libseptastic::direction::CardinalDirection::Eastbound),
"Westbound" => Ok(libseptastic::direction::CardinalDirection::Westbound),
"Outbound" => Ok(libseptastic::direction::CardinalDirection::Outbound),
@ -77,7 +77,8 @@ impl FromSeptaJson<septa_json::direction::Direction> for Direction {
"Southbound" => Ok(libseptastic::direction::CardinalDirection::Southbound),
"Northbound" => Ok(libseptastic::direction::CardinalDirection::Northbound),
"LOOP" => Ok(libseptastic::direction::CardinalDirection::Loop),
_ => Err(anyhow::anyhow!("Unable to find right direction"))
"Loop" => Ok(libseptastic::direction::CardinalDirection::Loop),
_ => Err(anyhow::anyhow!(format!("Unable to find right direction {}", json_dir.true_direction)))
}?
, direction_destination: json_dir.direction_destination }))
}

View file

@ -1,7 +1,7 @@
use sqlx::{Postgres, Transaction};
use crate::traits::{DbObj, FromSeptaJson};
use crate::septa_json;
use libseptastic::route::{Route, RouteType};
use libseptastic::route::{Route, RouteType, InterlinedRoute};
impl DbObj<Route> for Route {
@ -43,6 +43,26 @@ impl DbObj<Route> for Route {
")
.execute(&mut **tx)
.await?;
sqlx::query("
CREATE TABLE IF NOT EXISTS interlined_routes (
id VARCHAR(8) PRIMARY KEY,
name VARCHAR(64) NOT NULL
);
")
.execute(&mut **tx)
.await?;
sqlx::query("
CREATE TABLE IF NOT EXISTS interlined_routes_subroutes (
interline_id VARCHAR(8),
route_id VARCHAR(8),
FOREIGN KEY (interline_id) REFERENCES interlined_routes(id),
FOREIGN KEY (route_id) REFERENCES septa_routes(id)
);
")
.execute(&mut **tx)
.await?;
Ok(())
}
@ -88,10 +108,55 @@ async fn insert_many(routes: Vec<Route>, tx: &mut Transaction<'_, Postgres>) ->
.execute(&mut **tx)
.await?;
let ir: InterlinedRoute = InterlinedRoute {
interline_id: String::from("B"),
interline_name: String::from("Broad Street Line"),
interlined_routes: vec![String::from("B1"), String::from("B2"), String::from("B3")]
};
sqlx::query("
INSERT INTO
interlined_routes
(
id,
name
)
VALUES
(
$1,
$2
);
")
.bind(&ir.interline_id)
.bind(&ir.interline_name)
.execute(&mut **tx)
.await?;
for route in ir.interlined_routes {
sqlx::query("
INSERT INTO
interlined_routes_subroutes
(
interline_id,
route_id
)
VALUES
(
$1,
$2
);
")
.bind(&ir.interline_id)
.bind(&route)
.execute(&mut **tx)
.await?;
}
Ok(())
}
async fn insert(&self, tx: &mut Transaction<'_, Postgres>) -> anyhow::Result<()> {
Self::insert_many(vec![self.clone()], tx).await?;
Ok(())
}
}

View file

@ -26,6 +26,14 @@ impl DbObj<StopSchedule> for StopSchedule {
.execute(&mut **tx)
.await?;
sqlx::query("
CREATE INDEX septa_stop_schedule_trip_id_idx ON septa_stop_schedules (trip_id);
").execute(&mut **tx).await?;
sqlx::query("
CREATE INDEX septa_stop_schedule_service_id_idx ON septa_stop_schedules (service_id);
").execute(&mut **tx).await?;
Ok(())
}
async fn insert_many(scheds: Vec<StopSchedule>, tx: &mut Transaction<'_, Postgres>) -> anyhow::Result<()> {
@ -107,6 +115,7 @@ impl FromSeptaJson<septa_json::stop_schedule::StopSchedule> for StopSchedule {
septa_json::stop_schedule::TripId::RegionalRail(x) => x,
septa_json::stop_schedule::TripId::Other(y) => y.to_string()
},
stop_name: String::from(""),
service_id: json_sched.service_id,
// FIXME: Actually get direction
direction_id: json_sched.direction_id,