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