diff --git a/internal/config/profile.go b/internal/config/profile.go index 2b190aecfc..30efb941ac 100644 --- a/internal/config/profile.go +++ b/internal/config/profile.go @@ -65,6 +65,9 @@ const ( ContainerizedHostNameEnv = "MONGODB_ATLAS_IS_CONTAINERIZED" GitHubActionsHostNameEnv = "GITHUB_ACTIONS" AtlasActionHostNameEnv = "ATLAS_GITHUB_ACTION" + CLIUserTypeEnv = "CLI_USER_TYPE" // CLIUserTypeEnv is used to separate MongoDB University users from default users + DefaultUser = "default" // Users that do NOT use ATLAS CLI with MongoDB University + UniversityUser = "university" // Users that uses ATLAS CLI with MongoDB University NativeHostName = "native" DockerContainerHostName = "container" GitHubActionsHostName = "all_github_actions" @@ -74,6 +77,7 @@ const ( var ( HostName = getConfigHostnameFromEnvs() UserAgent = fmt.Sprintf("%s/%s (%s;%s;%s)", AtlasCLI, version.Version, runtime.GOOS, runtime.GOARCH, HostName) + CLIUserType = newCLIUserTypeFromEnvs() defaultProfile = newProfile() ) @@ -196,6 +200,15 @@ func getConfigHostnameFromEnvs() string { return configHostName } +// newCLIUserTypeFromEnvs patches the user type information based on set env vars. +func newCLIUserTypeFromEnvs() string { + if value, ok := os.LookupEnv(CLIUserTypeEnv); ok { + return value + } + + return DefaultUser +} + func envIsTrue(env string) bool { return IsTrue(os.Getenv(env)) } diff --git a/internal/telemetry/event.go b/internal/telemetry/event.go index b5d2b08e7c..e2e8314b52 100644 --- a/internal/telemetry/event.go +++ b/internal/telemetry/event.go @@ -259,6 +259,12 @@ func withProjectID(cmd CmdFlags, c ProjectIDGetter) EventOpt { } } +func withCLIUserType() EventOpt { + return func(event Event) { + event.Properties["cli_user_type"] = config.CLIUserType + } +} + type OrgIDGetter interface { OrgID() string } diff --git a/internal/telemetry/event_test.go b/internal/telemetry/event_test.go index 5067df695f..9044820ad6 100644 --- a/internal/telemetry/event_test.go +++ b/internal/telemetry/event_test.go @@ -163,6 +163,17 @@ func TestWithService(t *testing.T) { a.Equal(url, e.Properties["ops_manager_url"]) } +func TestWithCLIUserType(t *testing.T) { + config.CLIUserType = config.DefaultUser + a := assert.New(t) + e := newEvent(withCLIUserType()) + a.Equal(config.DefaultUser, e.Properties["cli_user_type"]) + + config.CLIUserType = config.UniversityUser + e = newEvent(withCLIUserType()) + a.Equal(config.UniversityUser, e.Properties["cli_user_type"]) +} + func TestWithProjectID(t *testing.T) { cmd := &cobra.Command{ Use: "test-command", @@ -397,6 +408,7 @@ func (c configMock) PublicAPIKey() string { func (c configMock) PrivateAPIKey() string { return c.privateKey } + func (c configMock) AccessToken() string { return c.accessToken } diff --git a/internal/telemetry/tracker.go b/internal/telemetry/tracker.go index 21a3d3aab7..07114937f9 100644 --- a/internal/telemetry/tracker.go +++ b/internal/telemetry/tracker.go @@ -101,6 +101,7 @@ func (t *tracker) defaultCommandOptions() []EventOpt { withUserAgent(), withAnonymousID(), withCI(), + withCLIUserType(), withSkipUpdateCheck(config.Default()), } }