Added doc, improved performance through ActiveRecord::Base.transaction.
This commit is contained in:
parent
506e2f1e04
commit
e1dc0b1707
1 changed files with 112 additions and 73 deletions
185
lib/fill_db.rb
185
lib/fill_db.rb
|
@ -1,5 +1,18 @@
|
|||
# rubocop:disable Rails/Output
|
||||
module FillDB
|
||||
|
||||
=begin
|
||||
|
||||
fill your database with demo records
|
||||
|
||||
FillDB.load(agents, customers, groups, organizations, tickets)
|
||||
|
||||
e. g.
|
||||
|
||||
FillDB.load(10, 100, 5, 40, 1000)
|
||||
|
||||
=end
|
||||
|
||||
def self.load( agents, customers, groups, organizations, tickets )
|
||||
puts 'load db with:'
|
||||
puts " agents:#{agents}"
|
||||
|
@ -14,10 +27,15 @@ module FillDB
|
|||
# organizations
|
||||
organization_pool = []
|
||||
if organizations && !organizations.zero?
|
||||
(1..organizations).each {
|
||||
organization = Organization.create( name: 'FillOrganization::' + rand(999_999).to_s, active: true )
|
||||
organization_pool.push organization
|
||||
}
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
|
||||
(1..organizations).each {
|
||||
organization = Organization.create( name: 'FillOrganization::' + rand(999_999).to_s, active: true )
|
||||
organization_pool.push organization
|
||||
}
|
||||
|
||||
end
|
||||
else
|
||||
organization_pool = Organization.where(active: true)
|
||||
end
|
||||
|
@ -27,20 +45,25 @@ module FillDB
|
|||
if agents && !agents.zero?
|
||||
roles = Role.where( name: [ 'Agent'] )
|
||||
groups_all = Group.all
|
||||
(1..agents).each {
|
||||
suffix = rand(99_999).to_s
|
||||
user = User.create_or_update(
|
||||
login: "filldb-agent-#{suffix}",
|
||||
firstname: "agent #{suffix}",
|
||||
lastname: "agent #{suffix}",
|
||||
email: "filldb-agent-#{suffix}@example.com",
|
||||
password: 'agentpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
groups: groups_all,
|
||||
)
|
||||
agent_pool.push user
|
||||
}
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
|
||||
(1..agents).each {
|
||||
suffix = rand(99_999).to_s
|
||||
user = User.create_or_update(
|
||||
login: "filldb-agent-#{suffix}",
|
||||
firstname: "agent #{suffix}",
|
||||
lastname: "agent #{suffix}",
|
||||
email: "filldb-agent-#{suffix}@example.com",
|
||||
password: 'agentpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
groups: groups_all,
|
||||
)
|
||||
agent_pool.push user
|
||||
}
|
||||
|
||||
end
|
||||
else
|
||||
agent_pool = Role.where(name: 'Agent').first.users.where(active: true)
|
||||
puts " take #{agent_pool.length} agents"
|
||||
|
@ -51,24 +74,29 @@ module FillDB
|
|||
if customers && !customers.zero?
|
||||
roles = Role.where( name: [ 'Customer'] )
|
||||
groups_all = Group.all
|
||||
(1..customers).each {
|
||||
suffix = rand(99_999).to_s
|
||||
organization = nil
|
||||
if !organization_pool.empty? && rand(2) == 1
|
||||
organization = organization_pool[ organization_pool.length - 1 ]
|
||||
end
|
||||
user = User.create_or_update(
|
||||
login: "filldb-customer-#{suffix}",
|
||||
firstname: "customer #{suffix}",
|
||||
lastname: "customer #{suffix}",
|
||||
email: "filldb-customer-#{suffix}@example.com",
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization: organization,
|
||||
roles: roles,
|
||||
)
|
||||
customer_pool.push user
|
||||
}
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
|
||||
(1..customers).each {
|
||||
suffix = rand(99_999).to_s
|
||||
organization = nil
|
||||
if !organization_pool.empty? && rand(2) == 1
|
||||
organization = organization_pool[ organization_pool.length - 1 ]
|
||||
end
|
||||
user = User.create_or_update(
|
||||
login: "filldb-customer-#{suffix}",
|
||||
firstname: "customer #{suffix}",
|
||||
lastname: "customer #{suffix}",
|
||||
email: "filldb-customer-#{suffix}@example.com",
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization: organization,
|
||||
roles: roles,
|
||||
)
|
||||
customer_pool.push user
|
||||
}
|
||||
|
||||
end
|
||||
else
|
||||
customer_pool = Role.where(name: 'Customer').first.users.where(active: true)
|
||||
end
|
||||
|
@ -77,16 +105,21 @@ module FillDB
|
|||
group_pool = []
|
||||
if groups && !groups.zero?
|
||||
puts "1..#{groups}"
|
||||
(1..groups).each {
|
||||
group = Group.create( name: 'FillGroup::' + rand(999_999).to_s, active: true )
|
||||
group_pool.push group
|
||||
Role.where(name: 'Agent').first.users.where(active: true).each {|user|
|
||||
user_groups = user.groups
|
||||
user_groups.push group
|
||||
user.groups = user_groups
|
||||
user.save
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
|
||||
(1..groups).each {
|
||||
group = Group.create( name: 'FillGroup::' + rand(999_999).to_s, active: true )
|
||||
group_pool.push group
|
||||
Role.where(name: 'Agent').first.users.where(active: true).each {|user|
|
||||
user_groups = user.groups
|
||||
user_groups.push group
|
||||
user.groups = user_groups
|
||||
user.save
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
end
|
||||
else
|
||||
group_pool = Group.where(active: true)
|
||||
end
|
||||
|
@ -94,35 +127,41 @@ module FillDB
|
|||
# create tickets
|
||||
priority_pool = Ticket::Priority.all
|
||||
state_pool = Ticket::State.all
|
||||
|
||||
if tickets && !tickets.zero?
|
||||
(1..tickets).each {
|
||||
customer = customer_pool[ rand(customer_pool.length - 1) ]
|
||||
agent = agent_pool[ rand(agent_pool.length - 1) ]
|
||||
ticket = Ticket.create(
|
||||
title: 'some title äöüß' + rand(999_999).to_s,
|
||||
group: group_pool[ rand(group_pool.length - 1) ],
|
||||
customer: customer,
|
||||
owner: agent,
|
||||
state: state_pool[ rand(state_pool.length - 1) ],
|
||||
priority: priority_pool[ rand(priority_pool.length - 1) ],
|
||||
updated_by_id: agent.id,
|
||||
created_by_id: agent.id,
|
||||
)
|
||||
# create article
|
||||
article = Ticket::Article.create(
|
||||
ticket_id: ticket.id,
|
||||
from: customer.email,
|
||||
to: 'some_recipient@example.com',
|
||||
subject: 'some subject' + rand(999_999).to_s,
|
||||
message_id: 'some@id-' + rand(999_999).to_s,
|
||||
body: 'some message ...',
|
||||
internal: false,
|
||||
sender: Ticket::Article::Sender.where(name: 'Customer').first,
|
||||
type: Ticket::Article::Type.where(name: 'phone').first,
|
||||
updated_by_id: agent.id,
|
||||
created_by_id: agent.id,
|
||||
)
|
||||
}
|
||||
|
||||
ActiveRecord::Base.transaction do
|
||||
|
||||
(1..tickets).each {
|
||||
customer = customer_pool[ rand(customer_pool.length - 1) ]
|
||||
agent = agent_pool[ rand(agent_pool.length - 1) ]
|
||||
ticket = Ticket.create(
|
||||
title: 'some title äöüß' + rand(999_999).to_s,
|
||||
group: group_pool[ rand(group_pool.length - 1) ],
|
||||
customer: customer,
|
||||
owner: agent,
|
||||
state: state_pool[ rand(state_pool.length - 1) ],
|
||||
priority: priority_pool[ rand(priority_pool.length - 1) ],
|
||||
updated_by_id: agent.id,
|
||||
created_by_id: agent.id,
|
||||
)
|
||||
# create article
|
||||
article = Ticket::Article.create(
|
||||
ticket_id: ticket.id,
|
||||
from: customer.email,
|
||||
to: 'some_recipient@example.com',
|
||||
subject: 'some subject' + rand(999_999).to_s,
|
||||
message_id: 'some@id-' + rand(999_999).to_s,
|
||||
body: 'some message ...',
|
||||
internal: false,
|
||||
sender: Ticket::Article::Sender.where(name: 'Customer').first,
|
||||
type: Ticket::Article::Type.where(name: 'phone').first,
|
||||
updated_by_id: agent.id,
|
||||
created_by_id: agent.id,
|
||||
)
|
||||
}
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue