@@ -30,7 +30,7 @@ if (env.METRICS_COLLECT_DEFAULTS) {
3030
3131class ManagedSupervisor {
3232 private readonly workerSession : SupervisorSession ;
33- private readonly httpServer : HttpServer ;
33+ private readonly metricsServer ? : HttpServer ;
3434 private readonly workloadServer : WorkloadServer ;
3535 private readonly workloadManager : WorkloadManager ;
3636 private readonly logger = new SimpleStructuredLogger ( "managed-worker" ) ;
@@ -44,24 +44,15 @@ class ManagedSupervisor {
4444 private readonly warmStartUrl = env . TRIGGER_WARM_START_URL ;
4545
4646 constructor ( ) {
47- const workloadApiProtocol = env . TRIGGER_WORKLOAD_API_PROTOCOL ;
48- const workloadApiDomain = env . TRIGGER_WORKLOAD_API_DOMAIN ;
49- const workloadApiPortExternal = env . TRIGGER_WORKLOAD_API_PORT_EXTERNAL ;
47+ const { TRIGGER_WORKER_TOKEN , MANAGED_WORKER_SECRET , ...envWithoutSecrets } = env ;
5048
51- if ( env . POD_CLEANER_ENABLED ) {
52- this . podCleaner = new PodCleaner ( {
53- namespace : env . KUBERNETES_NAMESPACE ,
54- batchSize : env . POD_CLEANER_BATCH_SIZE ,
55- intervalMs : env . POD_CLEANER_INTERVAL_MS ,
56- } ) ;
49+ if ( env . DEBUG ) {
50+ console . debug ( "[ManagedSupervisor] Starting up" , { envWithoutSecrets } ) ;
5751 }
5852
59- if ( env . FAILED_POD_HANDLER_ENABLED ) {
60- this . failedPodHandler = new FailedPodHandler ( {
61- namespace : env . KUBERNETES_NAMESPACE ,
62- reconnectIntervalMs : env . FAILED_POD_HANDLER_RECONNECT_INTERVAL_MS ,
63- } ) ;
64- }
53+ const workloadApiProtocol = env . TRIGGER_WORKLOAD_API_PROTOCOL ;
54+ const workloadApiDomain = env . TRIGGER_WORKLOAD_API_DOMAIN ;
55+ const workloadApiPortExternal = env . TRIGGER_WORKLOAD_API_PORT_EXTERNAL ;
6556
6657 if ( this . warmStartUrl ) {
6758 this . logger . log ( "[ManagedWorker] 🔥 Warm starts enabled" , {
@@ -70,12 +61,43 @@ class ManagedSupervisor {
7061 }
7162
7263 if ( this . isKubernetes ) {
64+ if ( env . POD_CLEANER_ENABLED ) {
65+ this . logger . log ( "[ManagedWorker] 🧹 Pod cleaner enabled" , {
66+ namespace : env . KUBERNETES_NAMESPACE ,
67+ batchSize : env . POD_CLEANER_BATCH_SIZE ,
68+ intervalMs : env . POD_CLEANER_INTERVAL_MS ,
69+ } ) ;
70+ this . podCleaner = new PodCleaner ( {
71+ register,
72+ namespace : env . KUBERNETES_NAMESPACE ,
73+ batchSize : env . POD_CLEANER_BATCH_SIZE ,
74+ intervalMs : env . POD_CLEANER_INTERVAL_MS ,
75+ } ) ;
76+ } else {
77+ this . logger . warn ( "[ManagedWorker] Pod cleaner disabled" ) ;
78+ }
79+
80+ if ( env . FAILED_POD_HANDLER_ENABLED ) {
81+ this . logger . log ( "[ManagedWorker] 🔁 Failed pod handler enabled" , {
82+ namespace : env . KUBERNETES_NAMESPACE ,
83+ reconnectIntervalMs : env . FAILED_POD_HANDLER_RECONNECT_INTERVAL_MS ,
84+ } ) ;
85+ this . failedPodHandler = new FailedPodHandler ( {
86+ register,
87+ namespace : env . KUBERNETES_NAMESPACE ,
88+ reconnectIntervalMs : env . FAILED_POD_HANDLER_RECONNECT_INTERVAL_MS ,
89+ } ) ;
90+ } else {
91+ this . logger . warn ( "[ManagedWorker] Failed pod handler disabled" ) ;
92+ }
93+
7394 this . resourceMonitor = new KubernetesResourceMonitor ( createK8sApi ( ) , "" ) ;
7495 this . workloadManager = new KubernetesWorkloadManager ( {
7596 workloadApiProtocol,
7697 workloadApiDomain,
7798 workloadApiPort : workloadApiPortExternal ,
7899 warmStartUrl : this . warmStartUrl ,
100+ imagePullSecrets : env . KUBERNETES_IMAGE_PULL_SECRETS ?. split ( "," ) ,
79101 } ) ;
80102 } else {
81103 this . resourceMonitor = new DockerResourceMonitor ( new Docker ( ) ) ;
@@ -224,16 +246,21 @@ class ManagedSupervisor {
224246 }
225247 } ) ;
226248
227- // Used for health checks and metrics
228- this . httpServer = new HttpServer ( { port : 8080 , host : "0.0.0.0" } ) . route ( "/health" , "GET" , {
229- handler : async ( { reply } ) => {
230- reply . text ( "OK" ) ;
231- } ,
232- } ) ;
249+ if ( env . METRICS_ENABLED ) {
250+ this . metricsServer = new HttpServer ( {
251+ port : env . METRICS_PORT ,
252+ host : env . METRICS_HOST ,
253+ metrics : {
254+ register,
255+ expose : true ,
256+ } ,
257+ } ) ;
258+ }
233259
234260 // Responds to workload requests only
235261 this . workloadServer = new WorkloadServer ( {
236262 port : env . TRIGGER_WORKLOAD_API_PORT_INTERNAL ,
263+ host : env . TRIGGER_WORKLOAD_API_HOST_INTERNAL ,
237264 workerClient : this . workerSession . httpClient ,
238265 checkpointClient : this . checkpointClient ,
239266 } ) ;
@@ -299,13 +326,10 @@ class ManagedSupervisor {
299326 async start ( ) {
300327 this . logger . log ( "[ManagedWorker] Starting up" ) ;
301328
302- if ( this . podCleaner ) {
303- await this . podCleaner . start ( ) ;
304- }
305-
306- if ( this . failedPodHandler ) {
307- await this . failedPodHandler . start ( ) ;
308- }
329+ // Optional services
330+ await this . podCleaner ?. start ( ) ;
331+ await this . failedPodHandler ?. start ( ) ;
332+ await this . metricsServer ?. start ( ) ;
309333
310334 if ( env . TRIGGER_WORKLOAD_API_ENABLED ) {
311335 this . logger . log ( "[ManagedWorker] Workload API enabled" , {
@@ -319,21 +343,16 @@ class ManagedSupervisor {
319343 }
320344
321345 await this . workerSession . start ( ) ;
322-
323- await this . httpServer . start ( ) ;
324346 }
325347
326348 async stop ( ) {
327349 this . logger . log ( "[ManagedWorker] Shutting down" ) ;
328- await this . httpServer . stop ( ) ;
350+ await this . workerSession . stop ( ) ;
329351
330- if ( this . podCleaner ) {
331- await this . podCleaner . stop ( ) ;
332- }
333-
334- if ( this . failedPodHandler ) {
335- await this . failedPodHandler . stop ( ) ;
336- }
352+ // Optional services
353+ await this . podCleaner ?. stop ( ) ;
354+ await this . failedPodHandler ?. stop ( ) ;
355+ await this . metricsServer ?. stop ( ) ;
337356 }
338357}
339358
0 commit comments