bd-154: Implement bd daemons stop and restart subcommands
This commit is contained in:
@@ -209,6 +209,12 @@ func (c *Client) Health() (*HealthResponse, error) {
|
||||
return &health, nil
|
||||
}
|
||||
|
||||
// Shutdown sends a graceful shutdown request to the daemon
|
||||
func (c *Client) Shutdown() error {
|
||||
_, err := c.Execute(OpShutdown, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
// Metrics retrieves daemon metrics
|
||||
func (c *Client) Metrics() (*MetricsSnapshot, error) {
|
||||
resp, err := c.Execute(OpMetrics, nil)
|
||||
|
||||
@@ -31,6 +31,7 @@ const (
|
||||
OpExport = "export"
|
||||
OpImport = "import"
|
||||
OpEpicStatus = "epic_status"
|
||||
OpShutdown = "shutdown"
|
||||
)
|
||||
|
||||
// Request represents an RPC request from client to daemon
|
||||
|
||||
@@ -688,6 +688,8 @@ func (s *Server) handleRequest(req *Request) Response {
|
||||
resp = s.handleImport(req)
|
||||
case OpEpicStatus:
|
||||
resp = s.handleEpicStatus(req)
|
||||
case OpShutdown:
|
||||
resp = s.handleShutdown(req)
|
||||
default:
|
||||
s.metrics.RecordError(req.Operation)
|
||||
return Response{
|
||||
@@ -2093,6 +2095,21 @@ func (s *Server) handleEpicStatus(req *Request) Response {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) handleShutdown(_ *Request) Response {
|
||||
// Schedule shutdown in a goroutine so we can return a response first
|
||||
go func() {
|
||||
time.Sleep(100 * time.Millisecond) // Give time for response to be sent
|
||||
if err := s.Stop(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error during shutdown: %v\n", err)
|
||||
}
|
||||
}()
|
||||
|
||||
return Response{
|
||||
Success: true,
|
||||
Data: json.RawMessage(`{"message":"Daemon shutting down"}`),
|
||||
}
|
||||
}
|
||||
|
||||
// GetLastImportTime returns the last JSONL import timestamp
|
||||
func (s *Server) GetLastImportTime() time.Time {
|
||||
s.importMu.RLock()
|
||||
|
||||
Reference in New Issue
Block a user