Skip to content

Commit ffb3129

Browse files
authored
CLOUDP-237254: Set deploymet_type telemetry value in missing atlas deployments commands (#2790)
1 parent 3b343a9 commit ffb3129

File tree

12 files changed

+177
-16
lines changed

12 files changed

+177
-16
lines changed

internal/cli/atlas/deployments/delete.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ func (opts *DeleteOpts) runLocal(ctx context.Context) error {
8686
}
8787

8888
func (opts *DeleteOpts) PostRun() error {
89+
opts.UpdateDeploymentTelemetry()
8990
if !opts.EnableWatch || !opts.IsAtlasDeploymentType() {
9091
return nil
9192
}

internal/cli/atlas/deployments/delete_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,26 @@ func TestDeleteBuilder(t *testing.T) {
159159
[]string{flag.TypeFlag, flag.Force, flag.EnableWatch, flag.WatchTimeout, flag.ProjectID},
160160
)
161161
}
162+
163+
func TestDelete_PostRun(t *testing.T) {
164+
ctrl := gomock.NewController(t)
165+
deploymentsTest := fixture.NewMockLocalDeploymentOpts(ctrl, "localDeployment")
166+
buf := new(bytes.Buffer)
167+
168+
opts := &DeleteOpts{
169+
DeploymentOpts: *deploymentsTest.Opts,
170+
GlobalOpts: cli.GlobalOpts{
171+
ProjectID: "64f670f0bf789926667dad1a",
172+
},
173+
OutputOpts: cli.OutputOpts{
174+
OutWriter: buf,
175+
},
176+
DeleteOpts: cli.NewDeleteOpts(deleteSuccessMessage, deleteFailMessage),
177+
}
178+
179+
deploymentsTest.MockDeploymentTelemetry.EXPECT().AppendDeploymentType().Times(1)
180+
181+
if err := opts.PostRun(); err != nil {
182+
t.Fatalf("PostRun() unexpected error: %v", err)
183+
}
184+
}

internal/cli/atlas/deployments/list.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ func (opts *ListOpts) Run(ctx context.Context) error {
7171
}
7272

7373
func (opts *ListOpts) PostRun() error {
74+
opts.UpdateDeploymentTelemetry()
7475
return opts.PostRunMessages()
7576
}
7677

@@ -89,7 +90,8 @@ func ListBuilder() *cobra.Command {
8990
PreRunE: func(cmd *cobra.Command, _ []string) error {
9091
return opts.PreRunE(
9192
opts.InitStore(cmd.Context(), cmd.OutOrStdout()),
92-
opts.InitOutput(cmd.OutOrStdout(), listTemplate))
93+
opts.InitOutput(cmd.OutOrStdout(), listTemplate),
94+
)
9395
},
9496
RunE: func(cmd *cobra.Command, _ []string) error {
9597
return opts.Run(cmd.Context())

internal/cli/atlas/deployments/list_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/golang/mock/gomock"
2525
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli"
2626
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/atlas/deployments/options"
27+
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/atlas/deployments/test/fixture"
2728
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/config"
2829
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/flag"
2930
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/mocks"
@@ -147,3 +148,43 @@ func TestListBuilder(t *testing.T) {
147148
[]string{flag.ProjectID},
148149
)
149150
}
151+
152+
func TestList_PostRun(t *testing.T) {
153+
ctrl := gomock.NewController(t)
154+
buf := new(bytes.Buffer)
155+
156+
mockStore := mocks.NewMockClusterLister(ctrl)
157+
mockCredentialsGetter := mocks.NewMockCredentialsGetter(ctrl)
158+
mockProfileReader := mocks.NewMockProfileReader(ctrl)
159+
160+
deploymentsTest := fixture.NewMockLocalDeploymentOpts(ctrl, "localDeployment")
161+
deploymentsTest.Opts.Config = mockProfileReader
162+
deploymentsTest.Opts.CredStore = mockCredentialsGetter
163+
deploymentsTest.Opts.AtlasClusterListStore = mockStore
164+
165+
listOpts := &ListOpts{
166+
DeploymentOpts: *deploymentsTest.Opts,
167+
GlobalOpts: cli.GlobalOpts{
168+
ProjectID: "64f670f0bf789926667dad1a",
169+
},
170+
OutputOpts: cli.OutputOpts{
171+
Template: listTemplate,
172+
OutWriter: buf,
173+
},
174+
}
175+
176+
mockCredentialsGetter.
177+
EXPECT().
178+
AuthType().
179+
Return(config.OAuth).
180+
Times(1)
181+
182+
deploymentsTest.MockDeploymentTelemetry.
183+
EXPECT().
184+
AppendDeploymentType().
185+
Times(1)
186+
187+
if err := listOpts.PostRun(); err != nil {
188+
t.Fatalf("PostRun() unexpected error: %v", err)
189+
}
190+
}

internal/cli/atlas/deployments/options/connect_opts_local.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,9 @@ package options
1515

1616
import (
1717
"context"
18-
19-
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/telemetry"
2018
)
2119

2220
func (opts *ConnectOpts) connectToLocal(ctx context.Context) error {
23-
telemetry.AppendOption(telemetry.WithDeploymentType(LocalCluster))
24-
2521
connectionString, err := opts.ConnectionString(ctx)
2622
if err != nil {
2723
return err

internal/cli/atlas/deployments/options/deployment_opts.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ type DeploymentOpts struct {
9696
DefaultSetter cli.DefaultSetterOpts
9797
AtlasClusterListStore store.ClusterLister
9898
Config setup.ProfileReader
99+
DeploymentTelemetry DeploymentTelemetry
99100
}
100101

101102
type Deployment struct {
@@ -115,6 +116,8 @@ func (opts *DeploymentOpts) InitStore(ctx context.Context, writer io.Writer) fun
115116
return err
116117
}
117118
opts.DefaultSetter.OutWriter = writer
119+
opts.DeploymentTelemetry = NewDeploymentTypeTelemetry(opts)
120+
opts.UpdateDeploymentTelemetry()
118121
return opts.DefaultSetter.InitStore(ctx)
119122
}
120123
}
@@ -256,3 +259,7 @@ func (opts *DeploymentOpts) NoDeploymentTypeSet() bool {
256259
func (opts *DeploymentOpts) IsAuthEnabled() bool {
257260
return opts.DBUsername != ""
258261
}
262+
263+
func (opts *DeploymentOpts) UpdateDeploymentTelemetry() {
264+
opts.DeploymentTelemetry.AppendDeploymentType()
265+
}

internal/cli/atlas/deployments/options/deployment_opts_select.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ func (opts *DeploymentOpts) Select(deployments []Deployment) (Deployment, error)
102102

103103
if len(deployments) == 1 {
104104
opts.DeploymentName = deployments[0].Name
105-
opts.DeploymentType = deployments[0].Type
105+
opts.DeploymentType = strings.ToLower(deployments[0].Type)
106106

107-
telemetry.AppendOption(telemetry.WithDeploymentType(opts.DeploymentType))
107+
opts.AppendDeploymentType()
108108
return deployments[0], nil
109109
}
110110

@@ -130,7 +130,7 @@ func (opts *DeploymentOpts) Select(deployments []Deployment) (Deployment, error)
130130

131131
deployment := deploymentsByDisplayName[displayName]
132132
opts.DeploymentName = deployment.Name
133-
opts.DeploymentType = deployment.Type
134-
telemetry.AppendOption(telemetry.WithDeploymentType(opts.DeploymentType))
133+
opts.DeploymentType = strings.ToLower(deployment.Type)
134+
opts.AppendDeploymentType()
135135
return deployment, nil
136136
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2023 MongoDB Inc
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package options
16+
17+
import (
18+
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/telemetry"
19+
)
20+
21+
//go:generate mockgen -destination=../../../../mocks/mock_deployment_opts_telemetry.go -package=mocks github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/atlas/deployments/options DeploymentTelemetry
22+
type DeploymentTelemetry interface {
23+
AppendDeploymentType()
24+
}
25+
26+
func NewDeploymentTypeTelemetry(opts *DeploymentOpts) DeploymentTelemetry {
27+
return opts
28+
}
29+
30+
func (opts *DeploymentOpts) AppendDeploymentType() {
31+
var deploymentType string
32+
if opts.IsLocalDeploymentType() {
33+
deploymentType = LocalCluster
34+
} else if opts.IsAtlasDeploymentType() {
35+
deploymentType = AtlasCluster
36+
}
37+
if deploymentType != "" {
38+
telemetry.AppendOption(telemetry.WithDeploymentType(deploymentType))
39+
}
40+
}

internal/cli/atlas/deployments/setup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,7 @@ func (opts *SetupOpts) Run(ctx context.Context) error {
815815
return err
816816
}
817817

818-
telemetry.AppendOption(telemetry.WithDeploymentType(opts.DeploymentType))
818+
opts.AppendDeploymentType()
819819
if strings.EqualFold(options.LocalCluster, opts.DeploymentType) {
820820
return opts.runLocal(ctx)
821821
}

internal/cli/atlas/deployments/test/fixture/deployment.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ type MockDeploymentOpts struct {
2424
MockCredentialsGetter *mocks.MockCredentialsGetter
2525
MockAtlasClusterListStore *mocks.MockClusterLister
2626
MockPodman *mocks.MockClient
27+
MockDeploymentTelemetry *mocks.MockDeploymentTelemetry
2728
Opts *options.DeploymentOpts
2829
}

0 commit comments

Comments
 (0)