1 | actions = ["buy", "like", "view"]
|
2 | people = [1..1000]
|
3 | things = [1..1000]
|
4 |
|
5 | random_created_at = ->
|
6 | moment().subtract(_.random(0, 120), 'minutes')
|
7 |
|
8 | esm_tests = (ESM) ->
|
9 | describe 'performance tests', ->
|
10 | ns = 'default'
|
11 |
|
12 | naction = 50
|
13 | nevents = 2000
|
14 | nevents_diff = 25
|
15 | nbevents = 10000
|
16 | nfindpeople = 25
|
17 | ncalcpeople = 25
|
18 | ncompact = 3
|
19 | nrecommendations = 40
|
20 | nrecpeople = 25
|
21 |
|
22 | it "adding #{nevents} events takes so much time", ->
|
23 | self = @
|
24 | console.log ""
|
25 | console.log ""
|
26 | console.log "####################################################"
|
27 | console.log "################# Performance Tests ################"
|
28 | console.log "####################################################"
|
29 | console.log ""
|
30 | console.log ""
|
31 | @timeout(360000)
|
32 | init_ger(ESM, ns)
|
33 | .then((ger) ->
|
34 | st = new Date().getTime()
|
35 | promises = []
|
36 | for x in [1..nevents]
|
37 | promises.push ger.event(ns, _.sample(people), _.sample(actions) , _.sample(things), created_at: random_created_at(), expires_at: tomorrow)
|
38 | bb.all(promises)
|
39 | .then(->
|
40 | et = new Date().getTime()
|
41 | time = et-st
|
42 | pe = time/nevents
|
43 | console.log "#{pe}ms per event"
|
44 | )
|
45 | .then( ->
|
46 | st = new Date().getTime()
|
47 | promises = []
|
48 | for x in [1..nevents/nevents_diff]
|
49 | events = []
|
50 | for y in [1..nevents_diff]
|
51 | events.push {namespace: ns, person: _.sample(people), action: _.sample(actions), thing: _.sample(things),created_at: random_created_at(), expires_at: tomorrow}
|
52 | promises.push ger.events(events)
|
53 | bb.all(promises)
|
54 | .then(->
|
55 | et = new Date().getTime()
|
56 | time = et-st
|
57 | pe = time/nevents
|
58 | console.log "#{pe}ms adding events in #{nevents_diff} per set"
|
59 | )
|
60 | )
|
61 | .then( ->
|
62 | st = new Date().getTime()
|
63 | promises = []
|
64 | for x in [1..ncompact]
|
65 | promises.push ger.compact_database(ns, actions: actions)
|
66 |
|
67 | bb.all(promises)
|
68 | .then(->
|
69 | et = new Date().getTime()
|
70 | time = et-st
|
71 | pe = time/ncompact
|
72 | console.log "#{pe}ms for compact"
|
73 | )
|
74 | )
|
75 | .then( ->
|
76 | st = new Date().getTime()
|
77 |
|
78 | promises = []
|
79 | for x in [1..nfindpeople]
|
80 | promises.push ger.esm.person_neighbourhood(ns, _.sample(people), actions)
|
81 | bb.all(promises)
|
82 |
|
83 | .then(->
|
84 | et = new Date().getTime()
|
85 | time = et-st
|
86 | pe = time/nfindpeople
|
87 | console.log "#{pe}ms per person_neighbourhood"
|
88 | )
|
89 | )
|
90 | .then( ->
|
91 | st = new Date().getTime()
|
92 |
|
93 | promises = []
|
94 | for x in [1..ncalcpeople]
|
95 | peeps = _.unique((_.sample(people) for i in [0..25]))
|
96 | promises.push ger.esm.calculate_similarities_from_person(ns, _.sample(people), peeps , actions)
|
97 | bb.all(promises)
|
98 |
|
99 | .then(->
|
100 | et = new Date().getTime()
|
101 | time = et-st
|
102 | pe = time/ncalcpeople
|
103 | console.log "#{pe}ms per calculate_similarities_from_person"
|
104 | )
|
105 | )
|
106 | .then( ->
|
107 | st = new Date().getTime()
|
108 |
|
109 | promises = []
|
110 | for x in [1..nrecpeople]
|
111 | peeps = _.unique((_.sample(people) for i in [0..25]))
|
112 | promises.push ger.esm.recent_recommendations_by_people(ns, actions, peeps)
|
113 | bb.all(promises)
|
114 |
|
115 | .then(->
|
116 | et = new Date().getTime()
|
117 | time = et-st
|
118 | pe = time/ncalcpeople
|
119 | console.log "#{pe}ms per recent_recommendations_by_people"
|
120 | )
|
121 | )
|
122 | .then( ->
|
123 | st = new Date().getTime()
|
124 | promises = []
|
125 | for x in [1..nrecommendations]
|
126 | promises.push ger.recommendations_for_person(ns, _.sample(people), actions: {buy:5, like:3, view:1})
|
127 | bb.all(promises)
|
128 | .then(->
|
129 | et = new Date().getTime()
|
130 | time = et-st
|
131 | pe = time/nrecommendations
|
132 | console.log "#{pe}ms per recommendations_for_person"
|
133 | )
|
134 | )
|
135 | .then( ->
|
136 | st = new Date().getTime()
|
137 | promises = []
|
138 | for x in [1..nrecommendations]
|
139 | promises.push ger.recommendations_for_thing(ns, _.sample(things), actions: {buy:5, like:3, view:1}, neighbourhood_size: 50, recommendations_per_neighbour: 3)
|
140 | bb.all(promises)
|
141 | .then(->
|
142 | et = new Date().getTime()
|
143 | time = et-st
|
144 | pe = time/nrecommendations
|
145 | console.log "#{pe}ms per recommendations_for_thing"
|
146 | )
|
147 | )
|
148 | )
|
149 | .then( ->
|
150 | console.log ""
|
151 | console.log ""
|
152 | console.log "####################################################"
|
153 | console.log "################# END OF Performance Tests #########"
|
154 | console.log "####################################################"
|
155 | console.log ""
|
156 | console.log ""
|
157 | )
|
158 |
|
159 |
|
160 | module.exports = esm_tests; |
\ | No newline at end of file |