From 9a22af67948df773cdd769b2f2707d3ecc22ab17 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Mon, 19 Oct 2026 16:43:50 -0600 Subject: [PATCH] refactor(daemon): extract diagnostics initialization from Run --- cmd/internal/agent_daemon.go | 56 +++++++++++++++++-------------- cmd/internal/agent_daemon_test.go | 47 ++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 26 deletions(-) diff --git a/cmd/internal/agent_daemon.go b/cmd/internal/agent_daemon.go index 395e6097b..fc2c68a18 100644 --- a/cmd/internal/agent_daemon.go +++ b/cmd/internal/agent_daemon.go @@ -117,32 +117,7 @@ func (cmd *DaemonCmd) Run(ctx context.Context) error { return err } defer func() { _ = runtimeLock.Close() }() - cmd.startedAt = time.Now().UTC() - recorder, err := machinediagnostics.NewRecorder(machinediagnostics.Options{ - Dir: machinediagnostics.DiagnosticsDir(location.Root), - Reader: cmd.diagnosticsReader(), - PatrolInterval: cmd.pollInterval(), - ErrorReporter: func(err error) { - log.Warnf("write machine diagnostics: %v", err) - }, - }) - if err != nil { - log.Warnf("initialize machine diagnostics: %v", err) - cmd.recorder = machinediagnostics.Nop() - } else { - cmd.recorder = recorder - if err := machinediagnostics.WriteLocator( - locatorPath, - machinediagnostics.Locator{ - SessionID: recorder.SessionID(), - DiagnosticsDir: machinediagnostics.DiagnosticsDir(location.Root), - StateLayout: string(location.Layout), - StartedAt: cmd.startedAt, - }, - ); err != nil { - log.Warnf("write machine diagnostics locator: %v", err) - } - } + cmd.initDiagnostics(location, locatorPath) cmd.recordEvent( machinediagnostics.Event{ Type: machinediagnostics.EventDaemonStarted, @@ -178,6 +153,35 @@ func (cmd *DaemonCmd) Run(ctx context.Context) error { return nil } +func (cmd *DaemonCmd) initDiagnostics(location agentdaemon.StateLocation, locatorPath string) { + cmd.startedAt = time.Now().UTC() + recorder, err := machinediagnostics.NewRecorder(machinediagnostics.Options{ + Dir: machinediagnostics.DiagnosticsDir(location.Root), + Reader: cmd.diagnosticsReader(), + PatrolInterval: cmd.pollInterval(), + ErrorReporter: func(err error) { + log.Warnf("write machine diagnostics: %v", err) + }, + }) + if err != nil { + log.Warnf("initialize machine diagnostics: %v", err) + cmd.recorder = machinediagnostics.Nop() + return + } + cmd.recorder = recorder + if err := machinediagnostics.WriteLocator( + locatorPath, + machinediagnostics.Locator{ + SessionID: recorder.SessionID(), + DiagnosticsDir: machinediagnostics.DiagnosticsDir(location.Root), + StateLayout: string(location.Layout), + StartedAt: cmd.startedAt, + }, + ); err != nil { + log.Warnf("write machine diagnostics locator: %v", err) + } +} + func (cmd *DaemonCmd) stateLocation() (agentdaemon.StateLocation, error) { if cmd.StateRoot != "" || cmd.StateLayout != "" { if cmd.StateRoot == "" || cmd.StateLayout == "" { diff --git a/cmd/internal/agent_daemon_test.go b/cmd/internal/agent_daemon_test.go index 46c7de8c0..f8aed77ec 100644 --- a/cmd/internal/agent_daemon_test.go +++ b/cmd/internal/agent_daemon_test.go @@ -9,6 +9,7 @@ import ( "github.com/devsy-org/devsy/cmd/flags" "github.com/devsy-org/devsy/pkg/agent" + agentdaemon "github.com/devsy-org/devsy/pkg/daemon/agent" "github.com/devsy-org/devsy/pkg/devcontainer/config" "github.com/devsy-org/devsy/pkg/machinediagnostics" provider2 "github.com/devsy-org/devsy/pkg/provider" @@ -455,3 +456,49 @@ func TestEvaluateMachineInactivityBlocksDisabledWorkspace(t *testing.T) { assert.True(t, evaluation.statuses[0].BlocksMachineShutdown) assert.Equal(t, "Auto-stop is not configured", evaluation.statuses[0].BlockerReason) } + +func TestInitDiagnostics(t *testing.T) { + t.Run("publishes a locator for the active recorder", func(t *testing.T) { + locatorPath := filepath.Join(t.TempDir(), "locator.json") + t.Setenv(machinediagnostics.RuntimeLocatorPathEnv, locatorPath) + root := t.TempDir() + cmd := &DaemonCmd{DiagnosticsReaderUID: os.Getuid(), DiagnosticsReaderGID: os.Getgid()} + + cmd.initDiagnostics( + agentdaemon.StateLocation{Root: root, Layout: agentdaemon.StateLayoutCanonical}, + locatorPath, + ) + store, ok := cmd.recorder.(*machinediagnostics.Store) + require.True(t, ok) + t.Cleanup(func() { _ = store.Close() }) + + data, err := os.ReadFile(filepath.Clean(locatorPath)) + require.NoError(t, err) + var locator machinediagnostics.Locator + require.NoError(t, json.Unmarshal(data, &locator)) + assert.Equal(t, store.SessionID(), locator.SessionID) + assert.Equal(t, machinediagnostics.DiagnosticsDir(root), locator.DiagnosticsDir) + assert.Equal(t, string(agentdaemon.StateLayoutCanonical), locator.StateLayout) + assert.True(t, cmd.startedAt.Equal(locator.StartedAt)) + }) + + t.Run("falls back to a nop recorder without a locator", func(t *testing.T) { + locatorPath := filepath.Join(t.TempDir(), "locator.json") + t.Setenv(machinediagnostics.RuntimeLocatorPathEnv, locatorPath) + cmd := &DaemonCmd{DiagnosticsReaderUID: os.Getuid(), DiagnosticsReaderGID: os.Getgid()} + + cmd.initDiagnostics( + agentdaemon.StateLocation{ + Root: "relative-state", + Layout: agentdaemon.StateLayoutCanonical, + }, + locatorPath, + ) + + require.NotNil(t, cmd.recorder) + _, isStore := cmd.recorder.(*machinediagnostics.Store) + assert.False(t, isStore) + _, err := os.Stat(locatorPath) + assert.ErrorIs(t, err, os.ErrNotExist) + }) +}