Users: Add config option to control how often last_seen is updated (#88721)

Users: Add config option to control how often last_seen is updated

Co-authored-by: Karl Persson <kalle.persson92@gmail.com>
This commit is contained in:
Rajguru
2024-06-24 16:54:56 +02:00
committed by GitHub
co-authored by Karl Persson
parent 399651b9ad
commit 1b2f110664
6 changed files with 30 additions and 3 deletions
+3 -3
View File
@@ -301,15 +301,15 @@ func (s *Service) UpdateLastSeenAt(ctx context.Context, cmd *user.UpdateUserLast
return err
}
if !shouldUpdateLastSeen(u.LastSeenAt) {
if !s.shouldUpdateLastSeen(u.LastSeenAt) {
return user.ErrLastSeenUpToDate
}
return s.store.UpdateLastSeenAt(ctx, cmd)
}
func shouldUpdateLastSeen(t time.Time) bool {
return time.Since(t) > time.Minute*15
func (s *Service) shouldUpdateLastSeen(t time.Time) bool {
return time.Since(t) > s.cfg.UserLastSeenUpdateInterval
}
func (s *Service) GetSignedInUser(ctx context.Context, query *user.GetSignedInUserQuery) (*user.SignedInUser, error) {
+1
View File
@@ -221,6 +221,7 @@ func TestUpdateLastSeenAt(t *testing.T) {
tracer: tracing.InitializeTracerForTest(),
}
userService.cfg = setting.NewCfg()
userService.cfg.UserLastSeenUpdateInterval = 5 * time.Minute
t.Run("update last seen at", func(t *testing.T) {
userStore.ExpectedSignedInUser = &user.SignedInUser{UserID: 1, OrgID: 1, Email: "email", Login: "login", Name: "name", LastSeenAt: time.Now().Add(-20 * time.Minute)}
+14
View File
@@ -306,6 +306,7 @@ type Cfg struct {
UserInviteMaxLifetime time.Duration
HiddenUsers map[string]struct{}
CaseInsensitiveLogin bool // Login and Email will be considered case insensitive
UserLastSeenUpdateInterval time.Duration
VerificationEmailMaxLifetime time.Duration
// Service Accounts
@@ -1695,6 +1696,19 @@ func readUserSettings(iniFile *ini.File, cfg *Cfg) error {
return errors.New("the minimum supported value for the `user_invite_max_lifetime_duration` configuration is 15m (15 minutes)")
}
cfg.UserLastSeenUpdateInterval, err = gtime.ParseDuration(valueAsString(users, "last_seen_update_interval", "15m"))
if err != nil {
return err
}
if cfg.UserLastSeenUpdateInterval < time.Minute*5 {
cfg.Logger.Warn("the minimum supported value for the `last_seen_update_interval` configuration is 5m (5 minutes)")
cfg.UserLastSeenUpdateInterval = time.Minute * 5
} else if cfg.UserLastSeenUpdateInterval > time.Hour*1 {
cfg.Logger.Warn("the maximum supported value for the `last_seen_update_interval` configuration is 1h (1 hour)")
cfg.UserLastSeenUpdateInterval = time.Hour * 1
}
cfg.HiddenUsers = make(map[string]struct{})
hiddenUsers := users.Key("hidden_users").MustString("")
for _, user := range strings.Split(hiddenUsers, ",") {