@@ -7,10 +7,12 @@ import { logger } from "../logger.server";
77import { RegisterSourceService } from "../sources/registerSource.server" ;
88import { RegisterDynamicScheduleService } from "../triggers/registerDynamicSchedule.server" ;
99import { RegisterDynamicTriggerService } from "../triggers/registerDynamicTrigger.server" ;
10+ import { DisableJobService } from "../jobs/disableJob.server" ;
1011
1112export class IndexEndpointService {
1213 #prismaClient: PrismaClient ;
1314 #registerJobService = new RegisterJobService ( ) ;
15+ #disableJobService = new DisableJobService ( ) ;
1416 #registerSourceService = new RegisterSourceService ( ) ;
1517 #registerDynamicTriggerService = new RegisterDynamicTriggerService ( ) ;
1618 #registerDynamicScheduleService = new RegisterDynamicScheduleService ( ) ;
@@ -57,23 +59,95 @@ export class IndexEndpointService {
5759 sources : 0 ,
5860 dynamicTriggers : 0 ,
5961 dynamicSchedules : 0 ,
62+ disabledJobs : 0 ,
6063 } ;
6164
65+ const existingJobs = await this . #prismaClient. job . findMany ( {
66+ where : {
67+ projectId : endpoint . projectId ,
68+ } ,
69+ include : {
70+ aliases : {
71+ where : {
72+ name : "latest" ,
73+ environmentId : endpoint . environmentId ,
74+ } ,
75+ include : {
76+ version : true ,
77+ } ,
78+ take : 1 ,
79+ } ,
80+ } ,
81+ } ) ;
82+
6283 for ( const job of jobs ) {
6384 if ( ! job . enabled ) {
64- continue ;
85+ const disabledJob = await this . #disableJobService
86+ . call ( endpoint , { slug : job . id , version : job . version } )
87+ . catch ( ( error ) => {
88+ logger . error ( "Failed to disable job" , {
89+ endpointId : endpoint . id ,
90+ job,
91+ error,
92+ } ) ;
93+
94+ return ;
95+ } ) ;
96+
97+ if ( disabledJob ) {
98+ indexStats . disabledJobs ++ ;
99+ }
100+ } else {
101+ try {
102+ await this . #registerJobService. call ( endpoint , job ) ;
103+
104+ indexStats . jobs ++ ;
105+ } catch ( error ) {
106+ logger . error ( "Failed to register job" , {
107+ endpointId : endpoint . id ,
108+ job,
109+ error,
110+ } ) ;
111+ }
65112 }
113+ }
66114
67- try {
68- await this . #registerJobService. call ( endpoint , job ) ;
115+ // TODO: we need to do this for sources, dynamic triggers, and dynamic schedules
116+ const missingJobs = existingJobs . filter ( ( job ) => {
117+ return ! jobs . find ( ( j ) => j . id === job . slug ) ;
118+ } ) ;
69119
70- indexStats . jobs ++ ;
71- } catch ( error ) {
72- logger . error ( "Failed to register job" , {
73- endpointId : endpoint . id ,
74- job,
75- error,
76- } ) ;
120+ if ( missingJobs . length > 0 ) {
121+ logger . debug ( "Disabling missing jobs" , {
122+ endpointId : endpoint . id ,
123+ missingJobIds : missingJobs . map ( ( job ) => job . slug ) ,
124+ } ) ;
125+
126+ for ( const job of missingJobs ) {
127+ const latestVersion = job . aliases [ 0 ] ?. version ;
128+
129+ if ( ! latestVersion ) {
130+ continue ;
131+ }
132+
133+ const disabledJob = await this . #disableJobService
134+ . call ( endpoint , {
135+ slug : job . slug ,
136+ version : latestVersion . version ,
137+ } )
138+ . catch ( ( error ) => {
139+ logger . error ( "Failed to disable job" , {
140+ endpointId : endpoint . id ,
141+ job,
142+ error,
143+ } ) ;
144+
145+ return ;
146+ } ) ;
147+
148+ if ( disabledJob ) {
149+ indexStats . disabledJobs ++ ;
150+ }
77151 }
78152 }
79153
0 commit comments