Skip to content

Commit d61c50c

Browse files
authored
CLOUDP-322616: add telemetry property (#3981)
1 parent 1bc4be6 commit d61c50c

File tree

11 files changed

+132
-26
lines changed

11 files changed

+132
-26
lines changed

internal/cli/clusters/clusters.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/clusters/onlinearchive"
2727
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/clusters/sampledata"
2828
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/cli/search"
29+
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/telemetry"
2930
"github.com/spf13/cobra"
3031
atlasClustersPinned "go.mongodb.org/atlas-sdk/v20240530005/admin"
3132
atlasv2 "go.mongodb.org/atlas-sdk/v20250312003/admin"
@@ -200,3 +201,15 @@ func isIndependentShardScaling(mode string) bool {
200201
func isClusterWideScaling(mode string) bool {
201202
return strings.EqualFold(mode, clusterWideScalingFlag) || strings.EqualFold(mode, clusterWideScalingResponse)
202203
}
204+
205+
func appendAutoScalingModeTelemetry(mode string) {
206+
if mode == "" {
207+
return
208+
}
209+
210+
if isIndependentShardScaling(mode) {
211+
telemetry.AppendOption(telemetry.WithDetectedAutoScalingMode("independentShardScaling"))
212+
} else if isClusterWideScaling(mode) {
213+
telemetry.AppendOption(telemetry.WithDetectedAutoScalingMode("clusterWideScaling"))
214+
}
215+
}

internal/cli/clusters/describe.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var describeTemplate = `ID NAME MDB VER STATE
5858

5959
func (opts *DescribeOpts) Run() error {
6060
autoScalingModeConfig, err := opts.store.GetClusterAutoScalingConfig(opts.ConfigProjectID(), opts.name)
61+
appendAutoScalingModeTelemetry(autoScalingModeConfig.GetAutoScalingMode())
6162
if err == nil && isIndependentShardScaling(autoScalingModeConfig.GetAutoScalingMode()) {
6263
r, err := opts.store.LatestAtlasCluster(opts.ConfigProjectID(), opts.name)
6364
if err != nil {

internal/cli/deployments/options/deployment_opts.go

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,26 @@ import (
4545
const (
4646
spinnerSpeed = 100 * time.Millisecond
4747
// based on https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/#tag/Clusters/operation/createCluster
48-
clusterNamePattern = "^[a-zA-Z0-9][a-zA-Z0-9-]*$"
49-
PausedState = "PAUSED"
50-
StoppedState = "STOPPED"
51-
IdleState = "IDLE"
52-
UpdatingState = "UPDATING"
53-
DeletingState = "DELETING"
54-
RestartingState = "RESTARTING"
55-
LocalCluster = "local"
56-
AtlasCluster = "atlas"
57-
CompassConnect = "compass"
58-
MongoshConnect = "mongosh"
59-
VsCodeConnect = "vscode"
60-
PromptTypeMessage = "What type of deployment would you like to work with?"
61-
MaxItemsPerPage = 500
62-
ContainerFilter = "mongodb-atlas-local=container"
63-
ClusterWideScaling = "CLUSTER_WIDE_SCALING"
64-
IndependentShardScaling = "INDEPENDENT_SHARD_SCALING"
65-
bytesInGb = 1073741824
66-
minimumRAM = 2 * bytesInGb
67-
minimumCores = 2
48+
clusterNamePattern = "^[a-zA-Z0-9][a-zA-Z0-9-]*$"
49+
PausedState = "PAUSED"
50+
StoppedState = "STOPPED"
51+
IdleState = "IDLE"
52+
UpdatingState = "UPDATING"
53+
DeletingState = "DELETING"
54+
RestartingState = "RESTARTING"
55+
LocalCluster = "local"
56+
AtlasCluster = "atlas"
57+
CompassConnect = "compass"
58+
MongoshConnect = "mongosh"
59+
VsCodeConnect = "vscode"
60+
PromptTypeMessage = "What type of deployment would you like to work with?"
61+
MaxItemsPerPage = 500
62+
ContainerFilter = "mongodb-atlas-local=container"
63+
ClusterWideScalingResponse = "CLUSTER_WIDE_SCALING"
64+
IndependentShardScalingResponse = "INDEPENDENT_SHARD_SCALING"
65+
bytesInGb = 1073741824
66+
minimumRAM = 2 * bytesInGb
67+
minimumCores = 2
6868
)
6969

7070
var (
@@ -319,3 +319,11 @@ func (opts *DeploymentOpts) UpdateDeploymentTelemetry() {
319319
}
320320
opts.DeploymentTelemetry.AppendDeploymentType()
321321
}
322+
323+
func IsIndependentShardScaling(mode string) bool {
324+
return strings.EqualFold(mode, IndependentShardScalingResponse)
325+
}
326+
327+
func IsClusterWideScaling(mode string) bool {
328+
return strings.EqualFold(mode, ClusterWideScalingResponse)
329+
}

internal/cli/deployments/options/deployment_opts_telemetry.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ var (
3939
type DeploymentTelemetry interface {
4040
AppendDeploymentType()
4141
AppendDeploymentUUID()
42+
AppendClusterWideScalingMode()
43+
AppendIndependentShardScalingMode()
4244
}
4345

4446
func NewDeploymentTypeTelemetry(opts *DeploymentOpts) DeploymentTelemetry {
@@ -109,3 +111,17 @@ func (opts *DeploymentOpts) AppendDeploymentUUID() {
109111
_, _ = log.Debugf("error collecting deployment uuid: %v", err)
110112
}
111113
}
114+
115+
func (opts *DeploymentOpts) AppendClusterWideScalingMode() {
116+
if opts.IsLocalDeploymentType() {
117+
return
118+
}
119+
telemetry.AppendOption(telemetry.WithDetectedAutoScalingMode("clusterWideScaling"))
120+
}
121+
122+
func (opts *DeploymentOpts) AppendIndependentShardScalingMode() {
123+
if opts.IsLocalDeploymentType() {
124+
return
125+
}
126+
telemetry.AppendOption(telemetry.WithDetectedAutoScalingMode("independentShardScaling"))
127+
}

internal/cli/deployments/pause.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ func (opts *PauseOpts) RunAtlas() error {
108108
defer opts.StopSpinner()
109109

110110
clusterAutoScalingConfig, err := opts.store.GetClusterAutoScalingConfig(opts.ConfigProjectID(), opts.DeploymentName)
111-
if err != nil || clusterAutoScalingConfig.GetAutoScalingMode() == options.ClusterWideScaling {
111+
if err != nil || options.IsClusterWideScaling(clusterAutoScalingConfig.GetAutoScalingMode()) {
112+
opts.DeploymentTelemetry.AppendClusterWideScalingMode()
112113
r, err := opts.store.PauseCluster(opts.ConfigProjectID(), opts.DeploymentName)
113114
if err != nil {
114115
return err
@@ -117,6 +118,7 @@ func (opts *PauseOpts) RunAtlas() error {
117118
}
118119

119120
// If cluster is not cluster wide scaling, we use the latest API version
121+
opts.DeploymentTelemetry.AppendIndependentShardScalingMode()
120122
r, err := opts.store.PauseClusterLatest(opts.ConfigProjectID(), opts.DeploymentName)
121123
if err != nil {
122124
return err

internal/cli/deployments/pause_test.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,16 @@ func TestPause_RunAtlas_clusterWideScaling(t *testing.T) {
9999
GetClusterAutoScalingConfig(projectID, deploymentName).
100100
Return(
101101
&atlasv2.ClusterDescriptionAutoScalingModeConfiguration{
102-
AutoScalingMode: pointer.Get(options.ClusterWideScaling),
102+
AutoScalingMode: pointer.Get(options.ClusterWideScalingResponse),
103103
}, nil).
104104
Times(1)
105105

106+
deploymentTest.
107+
MockDeploymentTelemetry.
108+
EXPECT().
109+
AppendClusterWideScalingMode().
110+
Times(1)
111+
106112
mockStore.
107113
EXPECT().
108114
PauseCluster(projectID, deploymentName).
@@ -147,10 +153,16 @@ func TestPause_RunAtlas_independentShardScaling(t *testing.T) {
147153
GetClusterAutoScalingConfig(projectID, deploymentName).
148154
Return(
149155
&atlasv2.ClusterDescriptionAutoScalingModeConfiguration{
150-
AutoScalingMode: pointer.Get(string(options.IndependentShardScaling)),
156+
AutoScalingMode: pointer.Get(string(options.IndependentShardScalingResponse)),
151157
}, nil).
152158
Times(1)
153159

160+
deploymentTest.
161+
MockDeploymentTelemetry.
162+
EXPECT().
163+
AppendIndependentShardScalingMode().
164+
Times(1)
165+
154166
mockStore.
155167
EXPECT().
156168
PauseClusterLatest(projectID, deploymentName).

internal/cli/deployments/start.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/config"
2424
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/flag"
2525
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/store"
26+
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/telemetry"
2627
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/usage"
2728
"github.com/spf13/cobra"
2829
atlasClustersPinned "go.mongodb.org/atlas-sdk/v20240530005/admin"
@@ -87,7 +88,12 @@ func (opts *StartOpts) RunAtlas() error {
8788
defer opts.StopSpinner()
8889

8990
clusterAutoScalingConfig, err := opts.store.GetClusterAutoScalingConfig(opts.ConfigProjectID(), opts.DeploymentName)
90-
if err != nil || clusterAutoScalingConfig.GetAutoScalingMode() == options.ClusterWideScaling {
91+
if err != nil {
92+
telemetry.AppendOption(telemetry.WithDetectedAutoScalingMode(clusterAutoScalingConfig.GetAutoScalingMode()))
93+
}
94+
95+
if err != nil || options.IsClusterWideScaling(clusterAutoScalingConfig.GetAutoScalingMode()) {
96+
opts.DeploymentTelemetry.AppendClusterWideScalingMode()
9197
r, err := opts.store.StartCluster(opts.ConfigProjectID(), opts.DeploymentName)
9298
if err != nil {
9399
return err
@@ -96,6 +102,7 @@ func (opts *StartOpts) RunAtlas() error {
96102
}
97103

98104
// If cluster is not cluster wide scaling, we use the latest API version
105+
opts.DeploymentTelemetry.AppendIndependentShardScalingMode()
99106
r, err := opts.store.StartClusterLatest(opts.ConfigProjectID(), opts.DeploymentName)
100107
if err != nil {
101108
return err

internal/cli/deployments/start_test.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,16 @@ func TestStart_RunAtlas_clusterWideScaling(t *testing.T) {
124124
GetClusterAutoScalingConfig(projectID, deploymentName).
125125
Return(
126126
&atlasv2.ClusterDescriptionAutoScalingModeConfiguration{
127-
AutoScalingMode: pointer.Get(string(options.ClusterWideScaling)),
127+
AutoScalingMode: pointer.Get(string(options.ClusterWideScalingResponse)),
128128
}, nil).
129129
Times(1)
130130

131+
deploymentsTest.
132+
MockDeploymentTelemetry.
133+
EXPECT().
134+
AppendClusterWideScalingMode().
135+
Times(1)
136+
131137
mockStore.
132138
EXPECT().
133139
StartCluster(projectID, deploymentName).
@@ -170,10 +176,16 @@ func TestStart_RunAtlas_independentShardScaling(t *testing.T) {
170176
GetClusterAutoScalingConfig(projectID, deploymentName).
171177
Return(
172178
&atlasv2.ClusterDescriptionAutoScalingModeConfiguration{
173-
AutoScalingMode: pointer.Get(string(options.IndependentShardScaling)),
179+
AutoScalingMode: pointer.Get(string(options.IndependentShardScalingResponse)),
174180
}, nil).
175181
Times(1)
176182

183+
deploymentsTest.
184+
MockDeploymentTelemetry.
185+
EXPECT().
186+
AppendIndependentShardScalingMode().
187+
Times(1)
188+
177189
mockStore.
178190
EXPECT().
179191
StartClusterLatest(projectID, deploymentName).

internal/mocks/mock_deployment_opts_telemetry.go

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/telemetry/event.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,12 @@ func WithSearchIndexType(indexType string) EventOpt {
411411
}
412412
}
413413

414+
func WithDetectedAutoScalingMode(autoScalingMode string) EventOpt {
415+
return func(event Event) {
416+
event.Properties["cluster_scaling_type"] = autoScalingMode
417+
}
418+
}
419+
414420
func newEvent(opts ...EventOpt) Event {
415421
var event = Event{
416422
Timestamp: time.Now(),

0 commit comments

Comments
 (0)