Skip to content

Commit ec6d17b

Browse files
committed
chore(logs): refactored instance create and update and reworked RetentionDays
1 parent d5a7dea commit ec6d17b

4 files changed

Lines changed: 28 additions & 55 deletions

File tree

internal/cmd/logs/instance/create/create.go

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package create
33
import (
44
"context"
55
"fmt"
6-
"math"
76

87
logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api"
98

@@ -37,7 +36,7 @@ type inputModel struct {
3736
*globalflags.GlobalFlagModel
3837

3938
DisplayName *string
40-
RetentionDays *int64
39+
RetentionDays *int32
4140
ACL *[]string
4241
Description *string
4342
}
@@ -88,10 +87,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
8887
}
8988

9089
// Call API
91-
req, err := buildRequest(ctx, model, apiClient)
92-
if err != nil {
93-
return err
94-
}
90+
req := buildRequest(ctx, model, apiClient)
9591
resp, err := req.Execute()
9692
if err != nil {
9793
return fmt.Errorf("create Logs instance: %w", err)
@@ -126,7 +122,7 @@ func configureFlags(cmd *cobra.Command) {
126122
cmd.Flags().String(displayNameFlag, "", "Display name")
127123
cmd.Flags().String(descriptionFlag, "", "Description")
128124
cmd.Flags().StringSlice(aclFlag, []string{}, "Access control list")
129-
cmd.Flags().Int64(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up")
125+
cmd.Flags().Int32(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up")
130126

131127
err := flags.MarkFlagsRequired(cmd, displayNameFlag, retentionDaysFlag)
132128
cobra.CheckErr(err)
@@ -141,7 +137,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
141137
model := inputModel{
142138
GlobalFlagModel: globalFlags,
143139
DisplayName: flags.FlagToStringPointer(p, cmd, displayNameFlag),
144-
RetentionDays: flags.FlagToInt64Pointer(p, cmd, retentionDaysFlag),
140+
RetentionDays: flags.FlagToInt32Pointer(p, cmd, retentionDaysFlag),
145141
Description: flags.FlagToStringPointer(p, cmd, descriptionFlag),
146142
ACL: flags.FlagToStringSlicePointer(p, cmd, aclFlag),
147143
}
@@ -150,25 +146,15 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
150146
return &model, nil
151147
}
152148

153-
func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) (logs.ApiCreateLogsInstanceRequest, error) {
149+
func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiCreateLogsInstanceRequest {
154150
req := apiClient.DefaultAPI.CreateLogsInstance(ctx, model.ProjectId, model.Region)
155-
156-
var retentionDays int32
157-
if model.RetentionDays != nil {
158-
val := *model.RetentionDays
159-
if val < 0 || val > math.MaxInt32 {
160-
return req, fmt.Errorf("metrics frequency value %d overflows int32", val)
161-
}
162-
retentionDays = int32(val)
163-
}
164-
165151
req = req.CreateLogsInstancePayload(logs.CreateLogsInstancePayload{
166152
DisplayName: utils.PtrString(model.DisplayName),
167153
Description: model.Description,
168-
RetentionDays: retentionDays,
169-
Acl: utils.PtrValue(model.ACL),
154+
RetentionDays: utils.PtrValue(model.RetentionDays),
155+
Acl: utils.GetSliceFromPointer(model.ACL),
170156
})
171-
return req, nil
157+
return req
172158
}
173159

174160
func outputResult(p *print.Printer, model *inputModel, projectLabel string, resp *logs.LogsInstance) error {

internal/cmd/logs/instance/create/create_test.go

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
6161
},
6262
DisplayName: utils.Ptr(testDisplayName),
6363
Description: utils.Ptr(testDescription),
64-
RetentionDays: utils.Ptr(int64(testRetentionDays)),
64+
RetentionDays: utils.Ptr(int32(testRetentionDays)),
6565
ACL: utils.Ptr([]string{testAcl}),
6666
}
6767
for _, mod := range mods {
@@ -188,31 +188,16 @@ func TestBuildRequest(t *testing.T) {
188188
}),
189189
isValid: true,
190190
},
191-
{
192-
description: "retention days not valid",
193-
model: fixtureInputModel(func(model *inputModel) {
194-
model.RetentionDays = utils.Int64Ptr(1 << 31)
195-
}),
196-
expectedRequest: fixtureRequest(),
197-
isValid: false,
198-
},
199191
}
200192

201193
for _, tt := range tests {
202194
t.Run(tt.description, func(t *testing.T) {
203-
request, err := buildRequest(testCtx, tt.model, testClient)
204-
205-
if err != nil {
206-
if !tt.isValid {
207-
return
208-
}
209-
t.Fatalf("error building request: %v", err)
210-
}
211-
195+
request := buildRequest(testCtx, tt.model, testClient)
212196
diff := cmp.Diff(tt.expectedRequest, request,
213197
cmp.AllowUnexported(tt.expectedRequest),
214198
cmpopts.EquateComparable(testCtx),
215-
cmpopts.IgnoreFields(logs.ApiCreateLogsInstanceRequest{}, "ApiService"),
199+
cmpopts.IgnoreFields(tt.expectedRequest, "ApiService"),
200+
cmpopts.EquateEmpty(),
216201
)
217202
if diff != "" {
218203
t.Fatalf("Data does not match: %s", diff)

internal/cmd/logs/instance/update/update.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type inputModel struct {
3434
*globalflags.GlobalFlagModel
3535
InstanceID string
3636
DisplayName *string
37-
RetentionDays *int64
37+
RetentionDays *int32
3838
ACL *[]string
3939
Description *string
4040
}
@@ -77,7 +77,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
7777
projectLabel = model.ProjectId
7878
}
7979

80-
instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.Region, model.InstanceID)
80+
instanceLabel, err := logsUtils.GetInstanceName(ctx, apiClient.DefaultAPI, model.ProjectId, model.Region, model.InstanceID)
8181
if err != nil {
8282
params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err)
8383
instanceLabel = model.InstanceID
@@ -108,7 +108,7 @@ func configureFlags(cmd *cobra.Command) {
108108
cmd.Flags().String(displayNameFlag, "", "Display name")
109109
cmd.Flags().String(descriptionFlag, "", "Description")
110110
cmd.Flags().StringSlice(aclFlag, []string{}, "Access control list")
111-
cmd.Flags().Int64(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up")
111+
cmd.Flags().Int32(retentionDaysFlag, 0, "The days for how long the logs should be stored before being cleaned up")
112112
}
113113

114114
func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) {
@@ -120,7 +120,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu
120120
}
121121

122122
displayName := flags.FlagToStringPointer(p, cmd, displayNameFlag)
123-
retentionDays := flags.FlagToInt64Pointer(p, cmd, retentionDaysFlag)
123+
retentionDays := flags.FlagToInt32Pointer(p, cmd, retentionDaysFlag)
124124
acl := flags.FlagToStringSlicePointer(p, cmd, aclFlag)
125125
description := flags.FlagToStringPointer(p, cmd, descriptionFlag)
126126

@@ -142,10 +142,11 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu
142142
}
143143

144144
func buildRequest(ctx context.Context, model *inputModel, apiClient *logs.APIClient) logs.ApiUpdateLogsInstanceRequest {
145-
req := apiClient.UpdateLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID)
145+
req := apiClient.DefaultAPI.UpdateLogsInstance(ctx, model.ProjectId, model.Region, model.InstanceID)
146+
146147
req = req.UpdateLogsInstancePayload(logs.UpdateLogsInstancePayload{
147148
DisplayName: model.DisplayName,
148-
Acl: model.ACL,
149+
Acl: utils.PtrValue(model.ACL),
149150
RetentionDays: model.RetentionDays,
150151
Description: model.Description,
151152
})
@@ -159,7 +160,7 @@ func outputResult(p *print.Printer, model *inputModel, projectLabel string, inst
159160
return fmt.Errorf("input model is nil")
160161
}
161162
return p.OutputResult(model.OutputFormat, instance, func() error {
162-
p.Outputf("Updated instance %q for project %q.\n", utils.PtrString(instance.DisplayName), projectLabel)
163+
p.Outputf("Updated instance %q for project %q.\n", instance.DisplayName, projectLabel)
163164
return nil
164165
})
165166
}

internal/cmd/logs/instance/update/update_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const (
2626

2727
var (
2828
testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
29-
testClient = &logs.APIClient{}
29+
testClient = &logs.APIClient{DefaultAPI: &logs.DefaultAPIService{}}
3030
testProjectId = uuid.NewString()
3131
testInstanceId = uuid.NewString()
3232
)
@@ -66,7 +66,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
6666
InstanceID: testInstanceId,
6767
DisplayName: utils.Ptr("name"),
6868
ACL: utils.Ptr([]string{"0.0.0.0/0"}),
69-
RetentionDays: utils.Ptr(int64(60)),
69+
RetentionDays: utils.Ptr(int32(60)),
7070
Description: utils.Ptr("Example"),
7171
}
7272
for _, mod := range mods {
@@ -76,11 +76,11 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
7676
}
7777

7878
func fixtureRequest(mods ...func(request *logs.ApiUpdateLogsInstanceRequest)) logs.ApiUpdateLogsInstanceRequest {
79-
request := testClient.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId)
79+
request := testClient.DefaultAPI.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId)
8080
request = request.UpdateLogsInstancePayload(logs.UpdateLogsInstancePayload{
8181
DisplayName: utils.Ptr("name"),
82-
Acl: utils.Ptr([]string{"0.0.0.0/0"}),
83-
RetentionDays: utils.Ptr(int64(60)),
82+
Acl: []string{"0.0.0.0/0"},
83+
RetentionDays: utils.Ptr(int32(60)),
8484
Description: utils.Ptr("Example"),
8585
})
8686
for _, mod := range mods {
@@ -160,7 +160,7 @@ func TestParseInput(t *testing.T) {
160160
InstanceID: testInstanceId,
161161
DisplayName: utils.Ptr("display-name"),
162162
ACL: utils.Ptr([]string{"0.0.0.0/24"}),
163-
RetentionDays: utils.Ptr(int64(60)),
163+
RetentionDays: utils.Ptr(int32(60)),
164164
Description: utils.Ptr("description"),
165165
},
166166
},
@@ -230,7 +230,7 @@ func TestBuildRequest(t *testing.T) {
230230
},
231231
InstanceID: testInstanceId,
232232
},
233-
expectedRequest: testClient.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId).
233+
expectedRequest: testClient.DefaultAPI.UpdateLogsInstance(testCtx, testProjectId, testRegion, testInstanceId).
234234
UpdateLogsInstancePayload(logs.UpdateLogsInstancePayload{}),
235235
},
236236
}
@@ -242,6 +242,7 @@ func TestBuildRequest(t *testing.T) {
242242
diff := cmp.Diff(request, tt.expectedRequest,
243243
cmp.AllowUnexported(tt.expectedRequest),
244244
cmpopts.EquateComparable(testCtx),
245+
cmpopts.IgnoreFields(tt.expectedRequest, "ApiService"),
245246
)
246247
if diff != "" {
247248
t.Fatalf("Data does not match: %s", diff)

0 commit comments

Comments
 (0)