mirror of
https://github.com/redhat-developer/odo.git
synced 2025-10-19 03:06:19 +03:00
Add telemetry consent to preference (#4456)
* Add telemetry consent * Add telemetry preference to view * Add integration test for preference
This commit is contained in:
@@ -86,6 +86,13 @@ func toPreferenceItems(prefInfo PreferenceInfo) []PreferenceItem {
|
||||
Type: getType(prefInfo.GetPushTarget()),
|
||||
Description: PushTargetDescription,
|
||||
},
|
||||
{
|
||||
Name: ConsentTelemetrySetting,
|
||||
Value: odoSettings.ConsentTelemetry,
|
||||
Default: DefaultConsentTelemetrySetting,
|
||||
Type: getType(prefInfo.GetConsentTelemetry()),
|
||||
Description: ConsentTelemetryDescription,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,6 +90,12 @@ const (
|
||||
|
||||
// DefaultEphemeralSettings is a default value for Ephemeral preference
|
||||
DefaultEphemeralSettings = true
|
||||
|
||||
// ConsentTelemetrySettings specifies if the user consents to telemetry
|
||||
ConsentTelemetrySetting = "ConsentTelemetry"
|
||||
|
||||
// DefaultConsentTelemetry is a default value for ConsentTelemetry preference
|
||||
DefaultConsentTelemetrySetting = false
|
||||
)
|
||||
|
||||
// TimeoutSettingDescription is human-readable description for the timeout setting
|
||||
@@ -107,6 +113,9 @@ var RegistryCacheTimeDescription = fmt.Sprintf("For how long (in minutes) odo wi
|
||||
// EphemeralDescription adds a description for EphemeralSourceVolume
|
||||
var EphemeralDescription = fmt.Sprintf("If true odo will create a emptyDir volume to store source code (Default: %t)", DefaultEphemeralSettings)
|
||||
|
||||
//TelemetryConsentDescription adds a description for TelemetryConsentSetting
|
||||
var ConsentTelemetryDescription = fmt.Sprintf("If true odo will collect telemetry for the user's odo usage (Default: %t)\n\t\t For more information: https://developers.redhat.com/article/tool-data-collection", DefaultConsentTelemetrySetting)
|
||||
|
||||
// This value can be provided to set a seperate directory for users 'homedir' resolution
|
||||
// note for mocking purpose ONLY
|
||||
var customHomeDir = os.Getenv("CUSTOM_HOMEDIR")
|
||||
@@ -123,6 +132,7 @@ var (
|
||||
PushTargetSetting: PushTargetDescription,
|
||||
RegistryCacheTimeSetting: RegistryCacheTimeDescription,
|
||||
EphemeralSetting: EphemeralDescription,
|
||||
ConsentTelemetrySetting: ConsentTelemetryDescription,
|
||||
}
|
||||
|
||||
// set-like map to quickly check if a parameter is supported
|
||||
@@ -167,6 +177,9 @@ type OdoSettings struct {
|
||||
|
||||
// Ephemeral if true creates odo emptyDir to store odo source code
|
||||
Ephemeral *bool `yaml:"Ephemeral,omitempty"`
|
||||
|
||||
// ConsentTelemetry if true collects telemetry for odo
|
||||
ConsentTelemetry *bool `yaml:"ConsentTelemetry,omitempty"`
|
||||
}
|
||||
|
||||
// Registry includes the registry metadata
|
||||
@@ -411,6 +424,7 @@ func (c *PreferenceInfo) SetConfiguration(parameter string, value string) error
|
||||
}
|
||||
c.OdoSettings.UpdateNotification = &val
|
||||
|
||||
// TODO: should we add a validator here? What is the use of nameprefix?
|
||||
case "nameprefix":
|
||||
c.OdoSettings.NamePrefix = &value
|
||||
|
||||
@@ -434,6 +448,13 @@ func (c *PreferenceInfo) SetConfiguration(parameter string, value string) error
|
||||
return errors.Errorf("cannot set pushtarget to values other than '%s' or '%s'", DockerPushTarget, KubePushTarget)
|
||||
}
|
||||
c.OdoSettings.PushTarget = &val
|
||||
|
||||
case "consenttelemetry":
|
||||
val, err := strconv.ParseBool(strings.ToLower(value))
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "unable to set %s to %s", parameter, value)
|
||||
}
|
||||
c.OdoSettings.ConsentTelemetry = &val
|
||||
}
|
||||
} else {
|
||||
return errors.Errorf("unknown parameter :'%s' is not a parameter in odo preference", parameter)
|
||||
@@ -521,12 +542,19 @@ func (c *PreferenceInfo) GetExperimental() bool {
|
||||
}
|
||||
|
||||
// GetPushTarget returns the value of PushTarget from preferences
|
||||
// and if absent then returns defualt
|
||||
// and if absent then returns default
|
||||
// default value: kube, docker push target needs to be manually enabled
|
||||
func (c *PreferenceInfo) GetPushTarget() string {
|
||||
return util.GetStringOrDefault(c.OdoSettings.PushTarget, KubePushTarget)
|
||||
}
|
||||
|
||||
// GetConsentTelemetry returns the value of ConsentTelemetry from preferences
|
||||
// and if absent then returns default
|
||||
// default value: false, consent telemetry is disabled by default
|
||||
func (c *PreferenceInfo) GetConsentTelemetry() bool {
|
||||
return util.GetBoolOrDefault(c.OdoSettings.ConsentTelemetry, DefaultConsentTelemetrySetting)
|
||||
}
|
||||
|
||||
// FormatSupportedParameters outputs supported parameters and their description
|
||||
func FormatSupportedParameters() (result string) {
|
||||
for _, v := range GetSupportedParameters() {
|
||||
|
||||
@@ -919,3 +919,57 @@ func TestHandleWithRegistryExist(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetConsentTelemetry(t *testing.T) {
|
||||
tempConfigFile, err := ioutil.TempFile("", "odoconfig")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer tempConfigFile.Close()
|
||||
os.Setenv(GlobalConfigEnvName, tempConfigFile.Name())
|
||||
trueValue := true
|
||||
falseValue := false
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
existingConfig Preference
|
||||
want bool
|
||||
}{{
|
||||
name: fmt.Sprintf("Case 1: %s nil", ConsentTelemetrySetting),
|
||||
existingConfig: Preference{},
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 2: %s true", ConsentTelemetrySetting),
|
||||
existingConfig: Preference{
|
||||
OdoSettings: OdoSettings{
|
||||
ConsentTelemetry: &trueValue,
|
||||
},
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
name: fmt.Sprintf("Case 3: %s false", ConsentTelemetrySetting),
|
||||
existingConfig: Preference{
|
||||
OdoSettings: OdoSettings{
|
||||
ConsentTelemetry: &falseValue,
|
||||
},
|
||||
},
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
cfg := PreferenceInfo{
|
||||
Preference: tt.existingConfig,
|
||||
}
|
||||
output := cfg.GetConsentTelemetry()
|
||||
|
||||
if output != tt.want {
|
||||
t.Errorf("GetConsentTelemetry returned unexpeced value expected \ngot: %t \nexpected: %t\n", output, tt.want)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user