From e1dc0b1707bd819450520a5c6d3b6e9196acc647 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Fri, 7 Aug 2015 11:24:47 +0200 Subject: [PATCH] Added doc, improved performance through ActiveRecord::Base.transaction. --- lib/fill_db.rb | 185 ++++++++++++++++++++++++++++++------------------- 1 file changed, 112 insertions(+), 73 deletions(-) diff --git a/lib/fill_db.rb b/lib/fill_db.rb index 2ac9401b7..d2902f01a 100644 --- a/lib/fill_db.rb +++ b/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