File tree Expand file tree Collapse file tree 2 files changed +71
-1
lines changed Expand file tree Collapse file tree 2 files changed +71
-1
lines changed Original file line number Diff line number Diff line change 1+ package dbos
2+
3+ import (
4+ "context"
5+ "fmt"
6+ "net/http"
7+ "time"
8+ )
9+
10+ type AdminServer struct {
11+ server * http.Server
12+ }
13+
14+ func NewAdminServer () * AdminServer {
15+ mux := http .NewServeMux ()
16+
17+ // Health endpoint
18+ mux .HandleFunc ("/dbos-healthz" , func (w http.ResponseWriter , r * http.Request ) {
19+ w .Header ().Set ("Content-Type" , "application/json" )
20+ w .WriteHeader (http .StatusOK )
21+ w .Write ([]byte (`{"status":"healthy"}` ))
22+ })
23+
24+ server := & http.Server {
25+ Addr : ":3001" ,
26+ Handler : mux ,
27+ }
28+
29+ return & AdminServer {
30+ server : server ,
31+ }
32+ }
33+
34+ func (as * AdminServer ) Start () error {
35+ getLogger ().Info ("Starting admin server" , "port" , 3001 )
36+
37+ go func () {
38+ if err := as .server .ListenAndServe (); err != nil && err != http .ErrServerClosed {
39+ getLogger ().Error ("Admin server error" , "error" , err )
40+ }
41+ }()
42+
43+ return nil
44+ }
45+
46+ func (as * AdminServer ) Shutdown () error {
47+ getLogger ().Info ("Shutting down admin server" )
48+
49+ ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
50+ defer cancel ()
51+
52+ if err := as .server .Shutdown (ctx ); err != nil {
53+ getLogger ().Error ("Admin server shutdown error" , "error" , err )
54+ return fmt .Errorf ("failed to shutdown admin server: %w" , err )
55+ }
56+
57+ getLogger ().Info ("Admin server shutdown complete" )
58+ return nil
59+ }
Original file line number Diff line number Diff line change @@ -88,7 +88,8 @@ func getLogger() *slog.Logger {
8888}
8989
9090type config struct {
91- logger * slog.Logger
91+ logger * slog.Logger
92+ adminServer * AdminServer
9293}
9394
9495type LaunchOption func (* config )
@@ -99,6 +100,16 @@ func WithLogger(logger *slog.Logger) LaunchOption {
99100 }
100101}
101102
103+ func WithAdminServer () LaunchOption {
104+ return func (config * config ) {
105+ if config .adminServer == nil {
106+ config .adminServer = NewAdminServer ()
107+ } else {
108+ getLogger ().Warn ("Admin server already initialized, ignoring duplicate call" )
109+ }
110+ }
111+ }
112+
102113func Launch (options ... LaunchOption ) error {
103114 if dbos != nil {
104115 fmt .Println ("warning: DBOS instance already initialized, skipping re-initialization" )
You can’t perform that action at this time.
0 commit comments