require('dotenv').config(); const fs = require('fs'); const debug=require('debug')('debug'); const gtfsRt=require('../../proto2js/js/gtfs-rt.js'); const Pbf = require('pbf'); const file=process.env.file||'file'; debug('file: '+file) run().catch(err => { debug('run: error'); console.log(err) }); async function run() { debug('run started...'); const FeedMessage = gtfsRt.FeedMessage; debug('read gtfs-rt feed from file'); const buffer=fs.readFileSync(file); if(buffer instanceof Buffer){ debug('buffer is instance of Buffer'); debug('read buffer and create pbf'); const pbf = new Pbf(buffer); debug('create feed'); const feed = FeedMessage.read(pbf); debug('use feed'); if('header' in feed){ debug('feed has header'); }else{ debug('feed has header NOT'); } let entityCount=0; let entityVhclCount=0; let entityTrpCount=0; let entityTrpTrpCount=0; let entityTrpTrpTrpIdCount=0; let entityTrpTrpRtIdCount=0; let entityTrpTrpRtId_Count=0; let entityTrpVhclCount=0; let entityTrpStuCount=0; let entityAlrtCount=0; let entityTbdCount=0; feed.entity.forEach(entity => { //debug('feed has entity at index: '+entityCount); entityCount++; const vehiclePos = entity.vehicle; const tripUpdate=entity.trip_update; const alert=entity.alert; if (vehiclePos) { entityVhclCount++; //debug('entity has vehicle position'); const { trip, position, vehicle } = vehiclePos; if (trip && position && vehicle) { //debug('vehiclePos has either trip, position or vehicle'); const latitude = position.latitude; if(latitude){ debug('position has latitude: '+latitude); } }else{ debug('vehiclePos misses either trip, latitude or vehicle'); } }else if(tripUpdate){ entityTrpCount++; const {trip,vehicle,stop_time_update,timestamp,delay,trip_properties}=tripUpdate; if(trip){ entityTrpTrpCount++; const {trip_id,route_id,direction_id,start_time,start_date,schedule_relationship}=trip; if(trip_id){ entityTrpTrpTrpIdCount++; if(entityTrpTrpTrpIdCount % 100 == 0){ debug('route_id: '+route_id); debug('trip_id: '+trip_id); } } if(route_id){ entityTrpTrpRtIdCount++; if(!/[^a-z]/i.test(route_id)){ debug('This is ODD!'); debug('route_id: '+route_id); debug('trip_id: '+trip_id); }else if(route_id.includes("_")){ entityTrpTrpRtId_Count++; } } } if(vehicle){ entityTrpVhclCount++; const {id,label,license_plate}=vehicle; } if(stop_time_update){ entityTrpStuCount++; const {stop_sequence,stop_id,arrival,departure,departure_occupancy_status,schedule_relationship,stop_time_properties}=stop_time_update; } }else if(alert){ entityAlrtCount++; }else{ entityTbdCount++; } }); debug('entityCount: '+entityCount); debug('entityVhclCount: '+entityVhclCount); debug('entityTrpCount: '+entityTrpCount); debug('entityTrpTrpCount: '+entityTrpTrpCount); debug('entityTrpTrpTrpIdCount: '+entityTrpTrpTrpIdCount); debug('entityTrpTrpRtIdCount: '+entityTrpTrpRtIdCount); debug('entityTrpTrpRtId_Count: '+entityTrpTrpRtId_Count); debug('entityTrpVhclCount: '+entityTrpVhclCount); debug('entityTrpStuCount: '+entityTrpStuCount); debug('entityAlrtCount: '+entityAlrtCount); debug('entityTbdCount: '+entityTbdCount); }else{ debug('buffer is NOT instance of Buffer'); } debug('run done.'); }