@@ -583,28 +583,14 @@ def run_manager_process(
583
583
# Start healthcheck server if requested
584
584
if with_healthcheck :
585
585
import threading
586
- from http .server import BaseHTTPRequestHandler , HTTPServer
587
-
588
- class HealthHandler (BaseHTTPRequestHandler ):
589
- def do_GET (self ):
590
- if self .path == "/health" :
591
- self .send_response (200 )
592
- self .send_header ("Content-type" , "text/plain" )
593
- self .end_headers ()
594
- self .wfile .write (b"OK" )
595
- else :
596
- self .send_response (404 )
597
- self .end_headers ()
598
-
599
- def log_message (self , format , * args ):
600
- pass # Suppress request logging
601
586
602
- def run_healthcheck_server ():
603
- server = HTTPServer (("0.0.0.0" , 8080 ), HealthHandler )
604
- server .serve_forever ()
587
+ from prefect .server .services .healthcheck import build_healthcheck_server
605
588
589
+ healthcheck_server = build_healthcheck_server ()
606
590
healthcheck_thread = threading .Thread (
607
- target = run_healthcheck_server , daemon = True
591
+ name = "healthcheck-server-thread" ,
592
+ target = healthcheck_server .run ,
593
+ daemon = True ,
608
594
)
609
595
healthcheck_thread .start ()
610
596
logger .info ("Healthcheck server started on port 8080" )
@@ -673,32 +659,21 @@ def start_services(
673
659
if not background :
674
660
app .console .print ("\n [blue]Starting services... Press CTRL+C to stop[/]\n " )
675
661
676
- # Start healthcheck server if requested
662
+ # Import at runtime to avoid circular imports
663
+ import threading
664
+
665
+ healthcheck_server = None
677
666
healthcheck_thread = None
667
+
678
668
if with_healthcheck :
679
- import threading
680
- from http .server import BaseHTTPRequestHandler , HTTPServer
681
-
682
- class HealthHandler (BaseHTTPRequestHandler ):
683
- def do_GET (self ):
684
- if self .path == "/health" :
685
- self .send_response (200 )
686
- self .send_header ("Content-type" , "text/plain" )
687
- self .end_headers ()
688
- self .wfile .write (b"OK" )
689
- else :
690
- self .send_response (404 )
691
- self .end_headers ()
692
-
693
- def log_message (self , format , * args ):
694
- pass # Suppress request logging
695
-
696
- def run_healthcheck_server ():
697
- server = HTTPServer (("0.0.0.0" , 8080 ), HealthHandler )
698
- server .serve_forever ()
669
+ from prefect .server .services .healthcheck import build_healthcheck_server
699
670
671
+ # Create and start the healthcheck server in a separate thread
672
+ healthcheck_server = build_healthcheck_server ()
700
673
healthcheck_thread = threading .Thread (
701
- target = run_healthcheck_server , daemon = True
674
+ name = "healthcheck-server-thread" ,
675
+ target = healthcheck_server .run ,
676
+ daemon = True ,
702
677
)
703
678
healthcheck_thread .start ()
704
679
app .console .print ("[green]Healthcheck server started on port 8080[/]" )
@@ -707,6 +682,13 @@ def run_healthcheck_server():
707
682
asyncio .run (Service .run_services ())
708
683
except KeyboardInterrupt :
709
684
pass
685
+ finally :
686
+ if healthcheck_server and healthcheck_thread :
687
+ logger .debug ("Stopping healthcheck server..." )
688
+ healthcheck_server .should_exit = True
689
+ healthcheck_thread .join ()
690
+ logger .debug ("Healthcheck server stopped." )
691
+
710
692
app .console .print ("\n [green]All services stopped.[/]" )
711
693
return
712
694
0 commit comments