Skip to content
This repository was archived by the owner on Jun 21, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ require (
github.com/minio/minio-go/v7 v7.0.10
github.com/percona-platform/dbaas-api v0.0.0-20210726192627-670b3725d0ac
github.com/percona-platform/saas v0.0.0-20210628125953-5bf84e6eefa0
github.com/percona/pmm v0.0.0-20210727064651-c6dbbddd9850
github.com/percona/pmm v0.0.0-20210728065534-7a7bfe95ccd9
github.com/percona/promconfig v0.2.1
github.com/pkg/errors v0.9.1
github.com/pmezard/go-difflib v1.0.0
Expand Down
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,12 @@ github.com/percona/pmm v0.0.0-20210721092629-8d0bba52fe8a h1:YpPgxdSwBeBmz35DiOL
github.com/percona/pmm v0.0.0-20210721092629-8d0bba52fe8a/go.mod h1:Cm2JKvJMlMimtAhmF/1BUvz3qVJZ2O2zxQXRvtQh93Q=
github.com/percona/pmm v0.0.0-20210727064651-c6dbbddd9850 h1:sV3uHzOKjZ1OgAi/6Eiq5Il9lJGNCAO4QTacPDG2h68=
github.com/percona/pmm v0.0.0-20210727064651-c6dbbddd9850/go.mod h1:Cm2JKvJMlMimtAhmF/1BUvz3qVJZ2O2zxQXRvtQh93Q=
github.com/percona/pmm v0.0.0-20210728063029-294734c0726e h1:p/DeRRPr1xFYZikY5c1yIc8ul0UcJjx9L2BRtxQ/vag=
github.com/percona/pmm v0.0.0-20210728063029-294734c0726e/go.mod h1:Cm2JKvJMlMimtAhmF/1BUvz3qVJZ2O2zxQXRvtQh93Q=
github.com/percona/pmm v0.0.0-20210728064606-5e0a50d0b1a2 h1:k0XDHyfjYQ9rfUN7tSHil3tnFg3dssy7x2El+9XkO18=
github.com/percona/pmm v0.0.0-20210728064606-5e0a50d0b1a2/go.mod h1:Cm2JKvJMlMimtAhmF/1BUvz3qVJZ2O2zxQXRvtQh93Q=
github.com/percona/pmm v0.0.0-20210728065534-7a7bfe95ccd9 h1:4wErKnKvoyh63li/nLld6oQ4qTqXGDg/O9Zm/Byn1NU=
github.com/percona/pmm v0.0.0-20210728065534-7a7bfe95ccd9/go.mod h1:Cm2JKvJMlMimtAhmF/1BUvz3qVJZ2O2zxQXRvtQh93Q=
github.com/percona/promconfig v0.2.1 h1:LBbCDSQRfy0aTHFJMgrVQIE2WvmPkMTkIoznTfBAvj8=
github.com/percona/promconfig v0.2.1/go.mod h1:Y2uXi5QNk71+ceJHuI9poank+0S1kjxd3K105fXKVkg=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
Expand Down
4 changes: 4 additions & 0 deletions models/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ type IntegratedAlerting struct {
type Settings struct {
PMMPublicAddress string `json:"pmm_public_address"`

Updates struct {
Disabled bool `json:"disabled"`
} `json:"updates"`

Telemetry struct {
Disabled bool `json:"disabled"`
UUID string `json:"uuid"`
Expand Down
14 changes: 11 additions & 3 deletions models/settings_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ func GetSettings(q reform.DBTX) (*Settings, error) {

// ChangeSettingsParams contains values to change data in settings table.
type ChangeSettingsParams struct {
// We don't save it to db
DisableUpdates bool
EnableUpdates bool

DisableTelemetry bool
EnableTelemetry bool
Expand Down Expand Up @@ -140,6 +140,12 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err
return nil, err
}

if params.DisableUpdates {
settings.Updates.Disabled = true
}
if params.EnableUpdates {
settings.Updates.Disabled = false
}
if params.DisableTelemetry {
settings.Telemetry.Disabled = true
settings.Telemetry.UUID = ""
Expand Down Expand Up @@ -293,6 +299,9 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err

// ValidateSettings validates settings changes.
func ValidateSettings(params *ChangeSettingsParams) error {
if params.EnableUpdates && params.DisableUpdates {
return fmt.Errorf("Both enable_updates and disable_updates are present.") //nolint:golint,stylecheck
Comment thread
JiriCtvrtka marked this conversation as resolved.
}
if params.EnableTelemetry && params.DisableTelemetry {
return fmt.Errorf("Both enable_telemetry and disable_telemetry are present.") //nolint:golint,stylecheck
}
Expand Down Expand Up @@ -422,9 +431,8 @@ func validateSettingsConflicts(params *ChangeSettingsParams, settings *Settings)
if params.DisableTelemetry && !params.DisableSTT && settings.SaaS.STTEnabled {
return fmt.Errorf("Cannot disable telemetry while STT is enabled.") //nolint:golint,stylecheck
}

if params.LogOut && (params.Email != "" || params.SessionID != "") {
return fmt.Errorf("Cannot loguot while updating Percona Platform user data.") //nolint:golint,stylecheck
return fmt.Errorf("Cannot logout while updating Percona Platform user data.") //nolint:golint,stylecheck
}

return nil
Expand Down
20 changes: 20 additions & 0 deletions models/settings_helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,26 @@ func TestSettings(t *testing.T) {
assert.EqualError(t, err, `data_retention: minimal resolution is 24h`)
})

t.Run("Updates validation", func(t *testing.T) {
ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{
DisableUpdates: false,
})
assert.NoError(t, err)
assert.False(t, ns.Updates.Disabled)

_, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{
EnableUpdates: true,
DisableUpdates: true,
})
assert.EqualError(t, err, `Both enable_updates and disable_updates are present.`)

ns, err = models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{
DisableUpdates: true,
})
assert.NoError(t, err)
assert.True(t, ns.Updates.Disabled)
})

t.Run("Telemetry and STT validation", func(t *testing.T) {
// ensure initial default state
ns, err := models.UpdateSettings(sqlDB, &models.ChangeSettingsParams{
Expand Down
8 changes: 7 additions & 1 deletion services/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ func (s *Server) readUpdateAuthToken() (string, error) {
// convertSettings merges database settings and settings from environment variables into API response.
func (s *Server) convertSettings(settings *models.Settings) *serverpb.Settings {
res := &serverpb.Settings{
UpdatesDisabled: s.envSettings.DisableUpdates,
UpdatesDisabled: settings.Updates.Disabled,
TelemetryEnabled: !settings.Telemetry.Disabled,
MetricsResolutions: &serverpb.MetricsResolutions{
Hr: durationpb.New(settings.MetricsResolutions.HR),
Expand Down Expand Up @@ -522,6 +522,10 @@ func (s *Server) validateChangeSettingsRequest(ctx context.Context, req *serverp

// check request parameters compatibility with environment variables

if req.EnableUpdates && s.envSettings.DisableUpdates {
return status.Error(codes.FailedPrecondition, "Updates are disabled via DISABLE_UPDATES environment variable.")
}

Comment thread
BupycHuk marked this conversation as resolved.
// ignore req.DisableTelemetry and req.DisableStt even if they are present since that will not change anything
if req.EnableTelemetry && s.envSettings.DisableTelemetry {
return status.Error(codes.FailedPrecondition, "Telemetry is disabled via DISABLE_TELEMETRY environment variable.")
Expand Down Expand Up @@ -582,6 +586,8 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverpb.ChangeSetting
metricsRes := req.MetricsResolutions
sttCheckIntervals := req.SttCheckIntervals
settingsParams := &models.ChangeSettingsParams{
DisableUpdates: req.DisableUpdates,
EnableUpdates: req.EnableUpdates,
DisableTelemetry: req.DisableTelemetry,
EnableTelemetry: req.EnableTelemetry,
STTCheckIntervals: models.STTCheckIntervals{
Expand Down
10 changes: 9 additions & 1 deletion services/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,16 @@ func TestServer(t *testing.T) {
RemoveAlertManagerRules: true,
}))

s.envSettings.DisableTelemetry = true
s.envSettings.DisableUpdates = true
expected = status.New(codes.FailedPrecondition, "Updates are disabled via DISABLE_UPDATES environment variable.")
tests.AssertGRPCError(t, expected, s.validateChangeSettingsRequest(ctx, &serverpb.ChangeSettingsRequest{
EnableUpdates: true,
}))
assert.NoError(t, s.validateChangeSettingsRequest(ctx, &serverpb.ChangeSettingsRequest{
DisableUpdates: true,
}))

s.envSettings.DisableTelemetry = true
expected = status.New(codes.FailedPrecondition, "Telemetry is disabled via DISABLE_TELEMETRY environment variable.")
tests.AssertGRPCError(t, expected, s.validateChangeSettingsRequest(ctx, &serverpb.ChangeSettingsRequest{
EnableTelemetry: true,
Expand Down