@@ -16,36 +16,21 @@ import { getCurrentIdtTime } from '../utils/dateTime'
1616
1717export const runScheduledJob = async ( env : Env , ctx : DurableObjectState < DOProps > ) => {
1818 const jobId = Math . random ( ) . toString ( 36 ) . substring ( 7 )
19-
19+
2020 try {
2121 initializeSchema ( ctx )
2222
23- // Fetch new data from API
2423 const currentFlights = await fetchLatestFlights ( env , ctx )
25- await sendAdmin ( `🔍 [JOB-${ jobId } ] Fetched ${ currentFlights . length } current flights` , env , ctx )
26-
2724 writeStatusData ( ctx , currentFlights . length )
2825
2926 const previousFlights = getCurrentFlightsFromStatus ( ctx )
30- await sendAdmin ( `🔍 [JOB-${ jobId } ] Retrieved ${ previousFlights . length } previous flights` , env , ctx )
31-
32- // 2. Store current flights as JSON (single SQLite write!)
3327 storeFlightsInStatus ( currentFlights , ctx )
34- await sendAdmin ( `🔍 [JOB-${ jobId } ] Stored current flights to status` , env , ctx )
35-
36- await sendAdmin (
37- `🔍 [JOB-${ jobId } ] Comparing ${ currentFlights . length } current flights with ${ previousFlights . length } previous flights` ,
38- env ,
39- ctx
40- )
4128
42- // 3. Get subscribed flight IDs to filter change detection
4329 const subscribedResult = ctx . storage . sql . exec ( 'SELECT DISTINCT flight_id FROM subscriptions' )
4430 const subscribedFlightIds = new Set (
4531 subscribedResult . toArray ( ) . map ( ( row ) => ( row as { flight_id : string } ) . flight_id )
4632 )
4733
48- // 4. Build change maps (only for subscribed flights to reduce noise)
4934 const previousFlightsMap = Object . fromEntries (
5035 previousFlights . filter ( ( f ) => subscribedFlightIds . has ( f . id ) ) . map ( ( f ) => [ f . id , f ] )
5136 ) as Record < string , Flight >
@@ -69,21 +54,14 @@ export const runScheduledJob = async (env: Env, ctx: DurableObjectState<DOProps>
6954 }
7055 }
7156
72- // Send alerts if there are changes
7357 if ( Object . keys ( changesByFlight ) . length > 0 ) {
7458 let changeMessage = `🔍 [JOB-${ jobId } ] Changes detected for ${ Object . keys ( changesByFlight ) . length } flights:\n`
7559 for ( const [ flightId , change ] of Object . entries ( changesByFlight ) ) {
7660 changeMessage += `• Flight ${ flightId } : ${ change . changes . join ( ', ' ) } \n`
7761 }
78- await sendAdmin ( changeMessage , env , ctx )
79-
8062 await sendFlightAlerts ( changesByFlight , env , ctx )
81- await sendAdmin ( `🔍 [JOB-${ jobId } ] Alerts sent for ${ Object . keys ( changesByFlight ) . length } flights` , env , ctx )
82- } else {
83- await sendAdmin ( `🔍 [JOB-${ jobId } ] No changes detected` , env , ctx )
8463 }
8564
86- // Clean up completed flights every 10 minutes
8765 const lastCleanupResult = ctx . storage . sql . exec ( "SELECT value FROM status WHERE key = 'last_cleanup_time'" )
8866 const lastCleanupRow = lastCleanupResult . toArray ( ) [ 0 ] as { value : string } | undefined
8967 const lastCleanupTime = lastCleanupRow ? parseInt ( lastCleanupRow . value ) : 0
@@ -94,17 +72,14 @@ export const runScheduledJob = async (env: Env, ctx: DurableObjectState<DOProps>
9472 console . log ( 'Running cleanup (10 minute interval)' )
9573 cleanupCompletedFlightsFromStatus ( env , ctx )
9674
97- // Update last cleanup time
9875 ctx . storage . sql . exec (
9976 "INSERT INTO status (key, value) VALUES ('last_cleanup_time', ?) ON CONFLICT(key) DO UPDATE SET value = EXCLUDED.value" ,
10077 now . toString ( )
10178 )
10279 }
10380
104- await sendAdmin ( `✅ [JOB-${ jobId } ] Job completed successfully` , env , ctx )
10581 return new Response ( 'Cron job completed' )
10682 } catch ( error ) {
107- await sendAdmin ( `❌ [JOB-${ jobId } ] Cron job failed: ${ error instanceof Error ? error . message : 'Unknown error' } ` , env , ctx , 'log' )
10883 writeErrorStatus ( ctx , error instanceof Error ? error : 'Unknown error' )
10984 return new Response ( 'Cron job failed' , { status : 500 } )
11085 }
0 commit comments