@@ -7,10 +7,12 @@ import { logger } from "../logger.server";
7
7
import { RegisterSourceService } from "../sources/registerSource.server" ;
8
8
import { RegisterDynamicScheduleService } from "../triggers/registerDynamicSchedule.server" ;
9
9
import { RegisterDynamicTriggerService } from "../triggers/registerDynamicTrigger.server" ;
10
+ import { DisableJobService } from "../jobs/disableJob.server" ;
10
11
11
12
export class IndexEndpointService {
12
13
#prismaClient: PrismaClient ;
13
14
#registerJobService = new RegisterJobService ( ) ;
15
+ #disableJobService = new DisableJobService ( ) ;
14
16
#registerSourceService = new RegisterSourceService ( ) ;
15
17
#registerDynamicTriggerService = new RegisterDynamicTriggerService ( ) ;
16
18
#registerDynamicScheduleService = new RegisterDynamicScheduleService ( ) ;
@@ -57,23 +59,95 @@ export class IndexEndpointService {
57
59
sources : 0 ,
58
60
dynamicTriggers : 0 ,
59
61
dynamicSchedules : 0 ,
62
+ disabledJobs : 0 ,
60
63
} ;
61
64
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
+
62
83
for ( const job of jobs ) {
63
84
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
+ }
65
112
}
113
+ }
66
114
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
+ } ) ;
69
119
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
+ }
77
151
}
78
152
}
79
153
0 commit comments