Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
extension-ci:
uses: steadybit/extension-kit/.github/workflows/reusable-extension-ci.yml@main # NOSONAR githubactions:S7637 - our own action
with:
go_version: '^1.25.9'
go_version: '^1.26.2'
build_linux_packages: false
VERSION_BUMPER_APPID: ${{ vars.GH_APP_STEADYBIT_APP_ID }}
secrets:
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## (next)

- Bump Go to 1.26.2

## v1.0.21

- Bump Go to 1.25.9
Expand Down
64 changes: 32 additions & 32 deletions extservice/service_check.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,38 +60,38 @@ func (m *ServiceStatusCheckAction) Describe() action_kit_api.ActionDescription {
Label: "StackState Service",
Description: "collects information about the service status and optionally verifies that the status has an expected status.",
Version: extbuild.GetSemverVersionStringOrUnknown(),
Icon: extutil.Ptr(serviceIcon),
TargetSelection: extutil.Ptr(action_kit_api.TargetSelection{
Icon: new(serviceIcon),
TargetSelection: new(action_kit_api.TargetSelection{
TargetType: serviceTargetType,
QuantityRestriction: extutil.Ptr(action_kit_api.QuantityRestrictionAll),
SelectionTemplates: extutil.Ptr([]action_kit_api.TargetSelectionTemplate{
SelectionTemplates: new([]action_kit_api.TargetSelectionTemplate{
{
Label: "service name",
Description: extutil.Ptr("Find service by cluster, namespace and service"),
Description: new("Find service by cluster, namespace and service"),
Query: "k8s.cluster-name=\"\" AND k8s.namespace=\"\" AND k8s.service.name=\"\"",
},
}),
}),
Technology: extutil.Ptr("StackState"),
Technology: new("StackState"),

Kind: action_kit_api.Check,
TimeControl: action_kit_api.TimeControlInternal,
Parameters: []action_kit_api.ActionParameter{
{
Name: "duration",
Label: "Duration",
Description: extutil.Ptr(""),
Description: new(""),
Type: action_kit_api.ActionParameterTypeDuration,
DefaultValue: extutil.Ptr("30s"),
Order: extutil.Ptr(1),
Required: extutil.Ptr(true),
DefaultValue: new("30s"),
Order: new(1),
Required: new(true),
},
{
Name: "expectedStatus",
Label: "Expected Status",
Description: extutil.Ptr(""),
Description: new(""),
Type: action_kit_api.ActionParameterTypeString,
Options: extutil.Ptr([]action_kit_api.ParameterOption{
Options: new([]action_kit_api.ParameterOption{
action_kit_api.ExplicitParameterOption{
Label: "CLEAR",
Value: "CLEAR",
Expand All @@ -109,16 +109,16 @@ func (m *ServiceStatusCheckAction) Describe() action_kit_api.ActionDescription {
Value: "UNKNOWN",
},
}),
Required: extutil.Ptr(false),
Order: extutil.Ptr(2),
Required: new(false),
Order: new(2),
},
{
Name: "statusCheckMode",
Label: "Status Check Mode",
Description: extutil.Ptr("How often should the status be expected?"),
Description: new("How often should the status be expected?"),
Type: action_kit_api.ActionParameterTypeString,
DefaultValue: extutil.Ptr(statusCheckModeAllTheTime),
Options: extutil.Ptr([]action_kit_api.ParameterOption{
DefaultValue: new(statusCheckModeAllTheTime),
Options: new([]action_kit_api.ParameterOption{
action_kit_api.ExplicitParameterOption{
Label: "All the time",
Value: statusCheckModeAllTheTime,
Expand All @@ -128,11 +128,11 @@ func (m *ServiceStatusCheckAction) Describe() action_kit_api.ActionDescription {
Value: statusCheckModeAtLeastOnce,
},
}),
Required: extutil.Ptr(true),
Order: extutil.Ptr(4),
Required: new(true),
Order: new(4),
},
},
Widgets: extutil.Ptr([]action_kit_api.Widget{
Widgets: new([]action_kit_api.Widget{
action_kit_api.StateOverTimeWidget{
Type: action_kit_api.ComSteadybitWidgetStateOverTime,
Title: "StackState Service Status",
Expand All @@ -148,24 +148,24 @@ func (m *ServiceStatusCheckAction) Describe() action_kit_api.ActionDescription {
Tooltip: action_kit_api.StateOverTimeWidgetTooltipConfig{
From: attributeTooltip,
},
Url: extutil.Ptr(action_kit_api.StateOverTimeWidgetUrlConfig{
From: extutil.Ptr(attributeUrl),
Url: new(action_kit_api.StateOverTimeWidgetUrlConfig{
From: new(attributeUrl),
}),
Value: extutil.Ptr(action_kit_api.StateOverTimeWidgetValueConfig{
Hide: extutil.Ptr(true),
Value: new(action_kit_api.StateOverTimeWidgetValueConfig{
Hide: new(true),
}),
},
}),
Status: extutil.Ptr(action_kit_api.MutatingEndpointReferenceWithCallInterval{
CallInterval: extutil.Ptr("1s"),
Status: new(action_kit_api.MutatingEndpointReferenceWithCallInterval{
CallInterval: new("1s"),
}),
}
}

func (m *ServiceStatusCheckAction) Prepare(_ context.Context, state *ServiceStatusCheckState, request action_kit_api.PrepareActionRequestBody) (*action_kit_api.PrepareResult, error) {
serviceId := request.Target.Attributes[attributeServiceId]
if len(serviceId) == 0 {
return nil, extutil.Ptr(extension_kit.ToError("Target is missing the 'stackstate.service.id' attribute.", nil))
return nil, new(extension_kit.ToError("Target is missing the 'stackstate.service.id' attribute.", nil))
}

duration := request.Config["duration"].(float64)
Expand Down Expand Up @@ -211,7 +211,7 @@ func MonitorStatusCheckStatus(ctx context.Context, state *ServiceStatusCheckStat
if len(state.ExpectedStatus) > 0 {
componentHealthState := component.State.HealthState
if state.StatusCheckMode == statusCheckModeAllTheTime && componentHealthState != state.ExpectedStatus {
checkError = extutil.Ptr(action_kit_api.ActionKitError{
checkError = new(action_kit_api.ActionKitError{
Title: fmt.Sprintf("Service '%s' (id %s) has status '%s' whereas '%s' is expected.",
component.Name,
state.ServiceId,
Expand All @@ -224,7 +224,7 @@ func MonitorStatusCheckStatus(ctx context.Context, state *ServiceStatusCheckStat
state.StatusCheckSuccess = true
}
if completed && !state.StatusCheckSuccess {
checkError = extutil.Ptr(action_kit_api.ActionKitError{
checkError = new(action_kit_api.ActionKitError{
Title: fmt.Sprintf("Service '%s' (id %s) didn't have status '%s' at least once.",
component.Name,
state.ServiceId,
Expand All @@ -247,13 +247,13 @@ func MonitorStatusCheckStatus(ctx context.Context, state *ServiceStatusCheckStat
func loadServiceComponent(ctx context.Context, state *ServiceStatusCheckState, api GetSnapshotApi) (*Component, error) {
res, stackStateResponse, err := api.GetServiceSnapshot(ctx, state.ServiceId)
if err != nil {
return nil, extutil.Ptr(extension_kit.ToError(fmt.Sprintf("Failed to retrieve service states from StackState for Service ID %s. Full response: %v", state.ServiceId, res.String()), err))
return nil, new(extension_kit.ToError(fmt.Sprintf("Failed to retrieve service states from StackState for Service ID %s. Full response: %v", state.ServiceId, res.String()), err))
}
if !res.IsSuccess() {
log.Err(err).Msgf("StackState API responded with unexpected status code %d while retrieving service states for Service ID %s. Full response: %v", res.StatusCode(), state.ServiceId, res.String())
serviceIdInt, parseErr := strconv.Atoi(state.ServiceId)
if parseErr != nil {
return nil, extutil.Ptr(extension_kit.ToError(fmt.Sprintf("Failed to parse int %s", state.ServiceId), parseErr))
return nil, new(extension_kit.ToError(fmt.Sprintf("Failed to parse int %s", state.ServiceId), parseErr))
}
return &Component{
Id: serviceIdInt,
Expand Down Expand Up @@ -284,8 +284,8 @@ func toMetric(service *Component, now time.Time) *action_kit_api.Metric {

uiBaseUrl := config.Config.ApiBaseUrl[:(len(config.Config.ApiBaseUrl) - 3)]

return extutil.Ptr(action_kit_api.Metric{
Name: extutil.Ptr("stackstate_service_status"),
return new(action_kit_api.Metric{
Name: new("stackstate_service_status"),
Metric: map[string]string{
attributeServiceId: strconv.Itoa(service.Id),
attributeK8ServiceName: service.Name,
Expand Down
16 changes: 8 additions & 8 deletions extservice/service_check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func TestServiceCheck(t *testing.T) {
t.Run("Prepare extracts state", func(t *testing.T) {
// Given
request := extutil.JsonMangle(action_kit_api.PrepareActionRequestBody{
Config: map[string]interface{}{
Config: map[string]any{
"duration": 1000 * 60,
"expectedStatus": "200",
"statusCheckMode": "atLeastOnce",
Expand All @@ -44,9 +44,9 @@ func TestServiceCheck(t *testing.T) {
"k8s.cluster-name": {"test-cluster"},
},
},
ExecutionContext: extutil.Ptr(action_kit_api.ExecutionContext{
ExperimentUri: extutil.Ptr("<uri-to-experiment>"),
ExecutionUri: extutil.Ptr("<uri-to-execution>"),
ExecutionContext: new(action_kit_api.ExecutionContext{
ExperimentUri: new("<uri-to-experiment>"),
ExecutionUri: new("<uri-to-execution>"),
}),
})
state := serviceCheckState(statusCheckModeAtLeastOnce)
Expand All @@ -68,7 +68,7 @@ func TestServiceCheck(t *testing.T) {
t.Run("Prepare extracts state without statusCheckMode", func(t *testing.T) {
// Given
request := extutil.JsonMangle(action_kit_api.PrepareActionRequestBody{
Config: map[string]interface{}{
Config: map[string]any{
"duration": 1000 * 60,
"expectedStatus": "200",
},
Expand All @@ -79,9 +79,9 @@ func TestServiceCheck(t *testing.T) {
"k8s.cluster-name": {"test-cluster"},
},
},
ExecutionContext: extutil.Ptr(action_kit_api.ExecutionContext{
ExperimentUri: extutil.Ptr("<uri-to-experiment>"),
ExecutionUri: extutil.Ptr("<uri-to-execution>"),
ExecutionContext: new(action_kit_api.ExecutionContext{
ExperimentUri: new("<uri-to-experiment>"),
ExecutionUri: new("<uri-to-execution>"),
}),
})
state := serviceCheckState(statusCheckModeAllTheTime)
Expand Down
7 changes: 3 additions & 4 deletions extservice/service_discovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
"github.com/steadybit/discovery-kit/go/discovery_kit_commons"
"github.com/steadybit/discovery-kit/go/discovery_kit_sdk"
"github.com/steadybit/extension-kit/extbuild"
"github.com/steadybit/extension-kit/extutil"
"github.com/steadybit/extension-stackstate/config"
"strconv"
"time"
Expand Down Expand Up @@ -45,7 +44,7 @@ func (d *serviceDiscovery) Describe() discovery_kit_api.DiscoveryDescription {
return discovery_kit_api.DiscoveryDescription{
Id: serviceTargetType,
Discover: discovery_kit_api.DescribingEndpointReferenceWithCallInterval{
CallInterval: extutil.Ptr("1m"),
CallInterval: new("1m"),
},
}
}
Expand All @@ -54,9 +53,9 @@ func (d *serviceDiscovery) DescribeTarget() discovery_kit_api.TargetDescription
return discovery_kit_api.TargetDescription{
Id: serviceTargetType,
Label: discovery_kit_api.PluralLabel{One: "StackState Service", Other: "StackState Services"},
Category: extutil.Ptr("monitoring"),
Category: new("monitoring"),
Version: extbuild.GetSemverVersionStringOrUnknown(),
Icon: extutil.Ptr(serviceIcon),
Icon: new(serviceIcon),
Table: discovery_kit_api.Table{
Columns: []discovery_kit_api.Column{
{Attribute: attributeK8ServiceName},
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/steadybit/extension-stackstate

go 1.25.7
go 1.26.2

require (
github.com/KimMachineGun/automemlimit v0.7.5
Expand Down
Loading