support/data/license_usage_seed.rb (56 lines of code) (raw):
# frozen_string_literal: true
# rubocop:disable Metrics/AbcSize
class LicenseUsageSeed
def self.seed!
admin_user = User.find_by(username: 'root')
group_count = seed_groups.count
user_count = seed_users.count
puts 'Start seeding license usage data...'
rand(5..20).times { create_group(admin_user) }
create_users_and_members
puts 'Creating License usage record...'
create_license_usage_record
puts "Created #{seed_users.count - user_count} users and #{seed_groups.count - group_count} groups."
puts 'License usage data seeding completed.'
end
def self.create_user
name = "test-user#{SecureRandom.hex(8)}"
User.create!(
email: "#{name}@test.com",
password: SecureRandom.hex.slice(0, 16),
username: name,
name: "User #{name}",
confirmed_at: Time.current
)
end
def self.create_group(user)
name = "test-group#{SecureRandom.hex(8)}"
group_params =
{
name: name,
path: name
}
::Groups::CreateService.new(user, group_params).execute
end
def self.create_users_and_members
seed_groups.pluck(:id).each do |group_id|
3.times { create_member(create_user, group_id) }
end
end
def self.create_member(user, group_id)
# Excludes GUEST role based on ultimate license seat count
roles = [Gitlab::Access::REPORTER, Gitlab::Access::DEVELOPER, Gitlab::Access::MAINTAINER]
GroupMember.create(user_id: user.id, access_level: roles.sample, source_id: group_id)
Users::UpdateHighestMemberRoleService.new(user).execute
end
def self.seed_users
User.where('username ~* ?', '^test-user')
end
def self.seed_groups
Group.where('name ~* ?', '^test-group')
end
def self.create_license_usage_record
# Force update daily billable users and historical license data
identifier = Analytics::UsageTrends::Measurement.identifiers[:billable_users]
::Analytics::UsageTrends::CounterJobWorker.new.perform(identifier, User.minimum(:id), User.maximum(:id),
Time.zone.now)
HistoricalData.track!
end
end
LicenseUsageSeed.seed!
# rubocop:enable Metrics/AbcSize