diff --git a/management/server/account.go b/management/server/account.go index dca105ddf..26691c3e0 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -1304,6 +1304,7 @@ func (am *DefaultAccountManager) UpdateAccountOnboarding(ctx context.Context, ac } func (am *DefaultAccountManager) GetAccountIDFromUserAuth(ctx context.Context, userAuth nbcontext.UserAuth) (string, string, error) { + defer util.TimeTrack(ctx, "GetAccountIDFromUserAuth")() if userAuth.UserId == "" { return "", "", errors.New(emptyUserID) } @@ -1348,6 +1349,7 @@ func (am *DefaultAccountManager) GetAccountIDFromUserAuth(ctx context.Context, u // and propagates changes to peers if group propagation is enabled. // requires userAuth to have been ValidateAndParseToken and EnsureUserAccessByJWTGroups by the AuthManager func (am *DefaultAccountManager) SyncUserJWTGroups(ctx context.Context, userAuth nbcontext.UserAuth) error { + defer util.TimeTrack(ctx, "SyncUserJWTGroups")() if userAuth.IsChild || userAuth.IsPAT { return nil } diff --git a/management/server/store/sql_store.go b/management/server/store/sql_store.go index 382d026c8..4de8b8f55 100644 --- a/management/server/store/sql_store.go +++ b/management/server/store/sql_store.go @@ -575,6 +575,8 @@ func (s *SqlStore) GetUserByPATID(ctx context.Context, lockStrength LockingStren } func (s *SqlStore) GetUserByUserID(ctx context.Context, lockStrength LockingStrength, userID string) (*types.User, error) { + defer util.TimeTrack(ctx, "GetUserByUserID")() + ctx, cancel := getDebuggingCtx(ctx) defer cancel() @@ -1127,6 +1129,8 @@ func (s *SqlStore) GetAccountCreatedBy(ctx context.Context, lockStrength Locking // SaveUserLastLogin stores the last login time for a user in DB. func (s *SqlStore) SaveUserLastLogin(ctx context.Context, accountID, userID string, lastLogin time.Time) error { + defer util.TimeTrack(ctx, "SyncUserJWTGroups")() + ctx, cancel := getDebuggingCtx(ctx) defer cancel() diff --git a/management/server/user.go b/management/server/user.go index d40d33c6a..61e202d5c 100644 --- a/management/server/user.go +++ b/management/server/user.go @@ -178,6 +178,8 @@ func (am *DefaultAccountManager) GetUserByID(ctx context.Context, id string) (*t // GetUser looks up a user by provided nbContext.UserAuths. // Expects account to have been created already. func (am *DefaultAccountManager) GetUserFromUserAuth(ctx context.Context, userAuth nbContext.UserAuth) (*types.User, error) { + defer util.TimeTrack(ctx, "SyncUserJWTGroups")() + user, err := am.Store.GetUserByUserID(ctx, store.LockingStrengthNone, userAuth.UserId) if err != nil { return nil, err diff --git a/management/server/util/util.go b/management/server/util/util.go index 617484274..cf81dfa79 100644 --- a/management/server/util/util.go +++ b/management/server/util/util.go @@ -1,5 +1,12 @@ package util +import ( + "context" + "time" + + log "github.com/sirupsen/logrus" +) + // Difference returns the elements in `a` that aren't in `b`. func Difference(a, b []string) []string { mb := make(map[string]struct{}, len(b)) @@ -50,3 +57,13 @@ func contains[T comparableObject[T]](slice []T, element T) bool { } return false } + +func TimeTrack(ctx context.Context, name string) func() { + start := time.Now() + return func() { + elapsed := time.Since(start) + if elapsed > time.Second { + log.WithContext(ctx).Infof("Slow Call: [%s] took %s", name, elapsed) + } + } +}