Skip to content

Commit df40d79

Browse files
committed
add simple admin server
1 parent e9b0391 commit df40d79

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

dbos/admin-server.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
}

dbos/dbos.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ func getLogger() *slog.Logger {
8888
}
8989

9090
type config struct {
91-
logger *slog.Logger
91+
logger *slog.Logger
92+
adminServer *AdminServer
9293
}
9394

9495
type 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+
102113
func Launch(options ...LaunchOption) error {
103114
if dbos != nil {
104115
fmt.Println("warning: DBOS instance already initialized, skipping re-initialization")

0 commit comments

Comments
 (0)