Fix design-vs-implementation gaps found in verification

Critical fixes:
- Wire monitor subsystem to agent startup (was dead code)
- Implement NodeStatus RPC (disk, memory, CPU, runtime version, uptime)
- Deploy respects active=false (sets desired_state=stopped, not always running)

Medium fixes:
- Add Started field to runtime.ContainerInfo, populate from podman inspect
- Populate ComponentInfo.started in status handlers for uptime display
- Add Monitor field to Agent struct for graceful shutdown

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 12:29:04 -07:00
parent 8f913ddf9b
commit 941dd7003a
7 changed files with 99 additions and 8 deletions

View File

@@ -14,6 +14,7 @@ import (
mcpv1 "git.wntrmute.dev/kyle/mcp/gen/mcp/v1"
"git.wntrmute.dev/kyle/mcp/internal/auth"
"git.wntrmute.dev/kyle/mcp/internal/config"
"git.wntrmute.dev/kyle/mcp/internal/monitor"
"git.wntrmute.dev/kyle/mcp/internal/registry"
"git.wntrmute.dev/kyle/mcp/internal/runtime"
"google.golang.org/grpc"
@@ -28,6 +29,7 @@ type Agent struct {
Config *config.AgentConfig
DB *sql.DB
Runtime runtime.Runtime
Monitor *monitor.Monitor
Logger *slog.Logger
}
@@ -46,10 +48,13 @@ func Run(cfg *config.AgentConfig) error {
rt := &runtime.Podman{}
mon := monitor.New(db, rt, cfg.Monitor, cfg.Agent.NodeName, logger)
a := &Agent{
Config: cfg,
DB: db,
Runtime: rt,
Monitor: mon,
Logger: logger,
}
@@ -86,7 +91,8 @@ func Run(cfg *config.AgentConfig) error {
"runtime", cfg.Agent.ContainerRuntime,
)
// Graceful shutdown on signal.
mon.Start()
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()
@@ -98,9 +104,11 @@ func Run(cfg *config.AgentConfig) error {
select {
case <-ctx.Done():
logger.Info("shutting down")
mon.Stop()
server.GracefulStop()
return nil
case err := <-errCh:
mon.Stop()
return fmt.Errorf("serve: %w", err)
}
}