Auth: Add empty role usage metrics for service and user accounts (#73108)
* Add tests for service accounts metrics usage * Add service account store implementation * Add service account service implementation * Add tests for org metrics usage * Add org implementation * Add service implementation
This commit is contained in:
@@ -40,6 +40,7 @@ type store interface {
|
||||
Search(context.Context, *user.SearchUsersQuery) (*user.SearchUserQueryResult, error)
|
||||
|
||||
Count(ctx context.Context) (int64, error)
|
||||
CountUserAccountsWithEmptyRole(ctx context.Context) (int64, error)
|
||||
}
|
||||
|
||||
type sqlStore struct {
|
||||
@@ -532,6 +533,27 @@ func (ss *sqlStore) Count(ctx context.Context) (int64, error) {
|
||||
return r.Count, err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) CountUserAccountsWithEmptyRole(ctx context.Context) (int64, error) {
|
||||
sb := &db.SQLBuilder{}
|
||||
sb.Write("SELECT ")
|
||||
sb.Write(`(SELECT COUNT (*) from ` + ss.dialect.Quote("org_user") + ` AS ou ` +
|
||||
`LEFT JOIN ` + ss.dialect.Quote("user") + ` AS u ON u.id = ou.user_id ` +
|
||||
`WHERE ou.role =? ` +
|
||||
`AND u.is_service_account = ` + ss.dialect.BooleanStr(false) + ` ` +
|
||||
`AND u.is_disabled = ` + ss.dialect.BooleanStr(false) + `) AS user_accounts_with_no_role`)
|
||||
sb.AddParams("None")
|
||||
|
||||
var countStats int64
|
||||
if err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
_, err := sess.SQL(sb.GetSQLString(), sb.GetParams()...).Get(&countStats)
|
||||
return err
|
||||
}); err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
return countStats, nil
|
||||
}
|
||||
|
||||
// validateOneAdminLeft validate that there is an admin user left
|
||||
func validateOneAdminLeft(ctx context.Context, sess *db.Session) error {
|
||||
count, err := sess.Where("is_admin=?", true).Count(&user.User{})
|
||||
|
||||
Reference in New Issue
Block a user