final product
This commit is contained in:
99
tools/gtfsRedis.js
Normal file
99
tools/gtfsRedis.js
Normal file
@@ -0,0 +1,99 @@
|
||||
const gtfs = require("./gtfsData");
|
||||
const redis = require("./redisDAL");
|
||||
|
||||
const CACHE_PREFIX = "gtfs_cache";
|
||||
const RT_TTL = 3;
|
||||
const STATIC_TTL = 24 * 3600;
|
||||
|
||||
async function getCached(keySuffix, fetchFn, ttl) {
|
||||
await redis.connect();
|
||||
|
||||
const cached = await redis.get(CACHE_PREFIX, { key: keySuffix });
|
||||
if (cached !== null) return cached;
|
||||
|
||||
const data = await fetchFn();
|
||||
await redis.set(CACHE_PREFIX, { key: keySuffix }, data, ttl);
|
||||
return data;
|
||||
}
|
||||
|
||||
async function getTrains() {
|
||||
return getCached("trains", gtfs.getTrains, RT_TTL);
|
||||
}
|
||||
|
||||
async function getBuses() {
|
||||
return getCached("buses", gtfs.getBuses, RT_TTL);
|
||||
}
|
||||
|
||||
async function getTrainsByRoute(route) {
|
||||
return getCached(`trains_route_${route}`, () => gtfs.getTrainsByRoute(route), RT_TTL);
|
||||
}
|
||||
|
||||
async function getBusesByRoute(route) {
|
||||
return getCached(`buses_route_${route}`, () => gtfs.getBusesByRoute(route), RT_TTL);
|
||||
}
|
||||
|
||||
async function getAlerts() {
|
||||
return getCached("alerts", gtfs.getAlerts, RT_TTL);
|
||||
}
|
||||
|
||||
async function getAlertsByRoute(route) {
|
||||
return getCached(`alerts_route_${route}`, () => gtfs.getAlertsByRoute(route), RT_TTL);
|
||||
}
|
||||
|
||||
async function getScheduleByRoute(route) {
|
||||
return getCached(`schedule_route_${route}`, () => gtfs.getScheduleByRoute(route), RT_TTL);
|
||||
}
|
||||
|
||||
async function getScheduleByStationId(stopId) {
|
||||
return getCached(`schedule_stop_${stopId}`, () => gtfs.getScheduleByStationId(stopId), RT_TTL);
|
||||
}
|
||||
|
||||
async function getRoutes() {
|
||||
return getCached("routes", gtfs.getRoutes, STATIC_TTL);
|
||||
}
|
||||
|
||||
async function getStops() {
|
||||
return getCached("stops", gtfs.getStops, STATIC_TTL);
|
||||
}
|
||||
|
||||
async function getStopsByRoute(route) {
|
||||
return getCached(`stops_route_${route}`, () => gtfs.getStopsByRoute(route), STATIC_TTL);
|
||||
}
|
||||
|
||||
async function getShapeByRoute(route) {
|
||||
return getCached(`shape_route_${route}`, () => gtfs.getShapeByRoute(route), STATIC_TTL);
|
||||
}
|
||||
|
||||
async function updateGtfsRt() {
|
||||
const data = await gtfs.updateGtfsRt();
|
||||
await redis.set(CACHE_PREFIX, { key: "trains" }, await gtfs.getTrains(), RT_TTL);
|
||||
await redis.set(CACHE_PREFIX, { key: "buses" }, await gtfs.getBuses(), RT_TTL);
|
||||
await redis.set(CACHE_PREFIX, { key: "alerts" }, await gtfs.getAlerts(), RT_TTL);
|
||||
return data;
|
||||
}
|
||||
|
||||
async function loadGtfsStaticInMemory() {
|
||||
const data = await gtfs.loadGtfsStaticInMemory();
|
||||
await redis.set(CACHE_PREFIX, { key: "routes" }, data.routes || [], STATIC_TTL);
|
||||
await redis.set(CACHE_PREFIX, { key: "stops" }, data.stops || [], STATIC_TTL);
|
||||
return data;
|
||||
}
|
||||
|
||||
const { gtfs_rt_v, gtfs_rt_t, gtfs_rt_a } = gtfs;
|
||||
|
||||
module.exports = {
|
||||
getStops,
|
||||
getStopsByRoute,
|
||||
getRoutes,
|
||||
getTrains,
|
||||
getBuses,
|
||||
getTrainsByRoute,
|
||||
getBusesByRoute,
|
||||
getAlerts,
|
||||
getAlertsByRoute,
|
||||
getScheduleByRoute,
|
||||
getScheduleByStationId,
|
||||
getShapeByRoute,
|
||||
updateGtfsRt,
|
||||
loadGtfsStaticInMemory,
|
||||
};
|
||||
Reference in New Issue
Block a user