master
 1require 'json'
 2require 'prime'
 3
 4class Seeds
 5  attr_reader :database, :event_types
 6
 7  def initialize(database)
 8    @database = database
 9    @event_types = (1..5).to_a
10    @threads = []
11  end
12
13  def run
14    100.times { create_business }
15    500.times { create_computer }
16    25_000.times { create_event }
17  ensure
18    @threads.map(&:join)
19  end
20
21  private
22
23  def background_thread(&block)
24    @threads << Thread.new(&block)
25  end
26
27  def create_computer(active: rand(100).even?, business: random_business)
28    database[:computers].insert(active: active, business_id: business[:id])
29  end
30
31  def create_business(name: FFaker::Company.name)
32    database[:businesses].insert(name: name, business_relationship_id: rand(3))
33  end
34
35  def create_event(computer: random_computer)
36    database[:events].insert(
37      computer_id: computer[:id],
38      occurred_at: DateTime.parse(FFaker::Time.datetime),
39      type: event_types.sample,
40      data: JSON.generate({
41        ip_address: FFaker::Internet.ip_v4_address,
42        mac: FFaker::Internet.mac,
43        url: FFaker::Internet.http_url,
44      })
45    )
46  end
47
48  def random_business
49    database[:businesses].limit(1).offset(rand(database[:businesses].count)).first
50  end
51
52  def random_computer
53    database[:computers].limit(1).offset(rand(database[:computers].count)).first
54  end
55end