From 70339fdf52c36bbf08031435e09e33da6d2dea18 Mon Sep 17 00:00:00 2001 From: Johannes Edmeier Date: Tue, 4 Aug 2026 15:30:08 +0200 Subject: [PATCH] fix: emit the service status metric immediately on Start Previously Start() was a no-op, so the first metric only appeared after the first CallInterval tick of Status(). Have Start() reuse the same status check as Status() so the metric is available right away. Update runServiceCheck to stop asserting Start() always succeeds: a deviating state present from the beginning now fails at RunAction() itself instead of only showing up once Status() starts polling. --- e2e/integration_test.go | 6 +++++- extservice/service_check.go | 13 +++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/e2e/integration_test.go b/e2e/integration_test.go index b936db0..9b05e5f 100644 --- a/e2e/integration_test.go +++ b/e2e/integration_test.go @@ -100,8 +100,12 @@ func runServiceCheck(t *testing.T, e *e2e.Extension, config serviceCheckConfig) t.Helper() start := time.Now() action, err := e.RunAction("com.steadybit.extension_stackstate.service.check", serviceCheckTarget(), config, &action_kit_api.ExecutionContext{}) - require.NoError(t, err) defer func() { _ = action.Cancel() }() + // A deviating state present from the very beginning now fails at RunAction() itself, since + // Start() runs the check immediately, rather than only showing up once Status() starts polling. + if err != nil { + return time.Since(start), err + } err = action.Wait() return time.Since(start), err } diff --git a/extservice/service_check.go b/extservice/service_check.go index cfd05af..880cf32 100644 --- a/extservice/service_check.go +++ b/extservice/service_check.go @@ -210,8 +210,17 @@ func (m *ServiceStatusCheckAction) Prepare(_ context.Context, state *ServiceStat return nil, nil } -func (m *ServiceStatusCheckAction) Start(_ context.Context, _ *ServiceStatusCheckState) (*action_kit_api.StartResult, error) { - return nil, nil +func (m *ServiceStatusCheckAction) Start(ctx context.Context, state *ServiceStatusCheckState) (*action_kit_api.StartResult, error) { + statusResult, err := MonitorStatusCheckStatus(ctx, state, Client) + if statusResult == nil { + return nil, err + } + return &action_kit_api.StartResult{ + Artifacts: statusResult.Artifacts, + Error: statusResult.Error, + Messages: statusResult.Messages, + Metrics: statusResult.Metrics, + }, err } func (m *ServiceStatusCheckAction) Status(ctx context.Context, state *ServiceStatusCheckState) (*action_kit_api.StatusResult, error) {