mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package sync
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/grafana/grafana/pkg/services/authn"
|
|
"github.com/grafana/grafana/pkg/services/user"
|
|
)
|
|
|
|
func ProvideUserLastSeenSync(service user.Service) *UserLastSeenSync {
|
|
return &UserLastSeenSync{log.New("userlastseen.sync"), service}
|
|
}
|
|
|
|
type UserLastSeenSync struct {
|
|
log log.Logger
|
|
service user.Service
|
|
}
|
|
|
|
func (s *UserLastSeenSync) SyncLastSeen(ctx context.Context, identity *authn.Identity, _ *authn.Request) error {
|
|
namespace, id := identity.NamespacedID()
|
|
|
|
if namespace != authn.NamespaceUser && namespace != authn.NamespaceServiceAccount {
|
|
// skip sync
|
|
return nil
|
|
}
|
|
|
|
if !shouldUpdateLastSeen(identity.LastSeenAt) {
|
|
return nil
|
|
}
|
|
|
|
go func(userID int64) {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
s.log.Error("panic during user last seen sync", "err", err)
|
|
}
|
|
}()
|
|
|
|
if err := s.service.UpdateLastSeenAt(context.Background(), &user.UpdateUserLastSeenAtCommand{UserID: userID}); err != nil {
|
|
s.log.Error("failed to update last_seen_at", "err", err, "userId", userID)
|
|
}
|
|
}(id)
|
|
|
|
return nil
|
|
}
|
|
|
|
func shouldUpdateLastSeen(t time.Time) bool {
|
|
return time.Since(t) > time.Minute*5
|
|
}
|