rrrspec-server 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3dd5351ecddcebbc6fbc7f89e1102c06b02dcb21
4
- data.tar.gz: 33b7df062b10d6f6d9099372c931d85663bb68bc
3
+ metadata.gz: 130e42b6ea51f45c286e7c21fe8aae49014eef81
4
+ data.tar.gz: 1563ac90134f3837f0c705a6cce802c6b854c478
5
5
  SHA512:
6
- metadata.gz: c5bd9cf986be28aa07d504e771a2be2fef1260c7e0a76f9e6bf91b405c81331b51f0d5c7ca551b9080b4383d22de9391c7551e8343b03c8392a75130e7bb204b
7
- data.tar.gz: b85287965ddcf34ee7f64e1dc857bc2106257fac8b927ea2bd1862249a5f935473a4bfe7a690aa013ab9d435b4272e4177e4da626e187790b61423b5403ef9a3
6
+ metadata.gz: 8cccda69622490863225f289edb743f1182ded6beb1e32cad0b2aaefe0b3dd7ea65070254496c78b9a71eccc8bb6e3191be9f356af68393c2594fe44ba7bcc00
7
+ data.tar.gz: bde828da11f815a64fed9de13cfee92cdd9a5b6c0357d905caafe01140ff7f441ca133f417d4b6f3ff6576ae53a058a532749735cb15312188fd4bf59736346f
@@ -10,4 +10,5 @@ require 'rrrspec/server/json_constructor'
10
10
  require 'rrrspec/server/log_file_persister'
11
11
  require 'rrrspec/server/persistent_models'
12
12
  require 'rrrspec/server/persister'
13
+ require 'rrrspec/server/statistics_updater'
13
14
  require 'rrrspec/server/worker_runner'
@@ -30,6 +30,7 @@ module RRRSpec
30
30
  Thread.fork { Dispatcher.work_loop }
31
31
  Thread.fork { Arbiter.work_loop }
32
32
  Thread.fork { Persister.work_loop }
33
+ Thread.fork { StatisticsUpdater.work_loop }
33
34
  Kernel.sleep
34
35
  end
35
36
  end
@@ -32,8 +32,9 @@ module RRRSpec
32
32
  create_api_cache(taskset, RRRSpec.configuration.json_cache_path)
33
33
  end
34
34
  taskset.expire(PERSISTED_RESIDUE_SEC)
35
- update_estimate_sec(taskset)
36
35
  end
36
+
37
+ StatisticsUpdaterQueue.enqueue(taskset)
37
38
  rescue
38
39
  RRRSpec.logger.error($!)
39
40
  end
@@ -45,6 +46,9 @@ module RRRSpec
45
46
  taskset_finished_at = taskset.finished_at
46
47
  return if taskset_finished_at.blank?
47
48
 
49
+ RRRSpec.logger.debug("Persisting taskset #{taskset.key}")
50
+ start = Time.now
51
+
48
52
  p_taskset = ActiveRecord::Base.transaction do
49
53
  h = taskset.to_h
50
54
  h.delete('tasks')
@@ -115,6 +119,8 @@ module RRRSpec
115
119
  Persistence::WorkerLog.import(p_worker_logs)
116
120
  p_worker_logs.each { |p_worker_log| p_worker_log.run_callbacks(:save) {} }
117
121
  end
122
+
123
+ RRRSpec.logger.info("Taskset #{taskset.key} persisted (#{Time.now - start} seconds taken)")
118
124
  end
119
125
 
120
126
  def create_api_cache(taskset, path)
@@ -126,29 +132,6 @@ module RRRSpec
126
132
  IO.write(json_path, json)
127
133
  Zlib::GzipWriter.open(json_path + ".gz") { |gz| gz.write(json) }
128
134
  end
129
-
130
- ESTIMATION_FIELDS = [
131
- "`spec_file`",
132
- "avg(UNIX_TIMESTAMP(`trials`.`finished_at`)-UNIX_TIMESTAMP(`trials`.`started_at`)) as `avg`",
133
- # "avg(`trials`.`finished_at`-`trials`.`started_at`) as `avg`",
134
- ]
135
-
136
- def update_estimate_sec(taskset)
137
- p_obj = Persistence::Taskset.where(key: taskset.key).first
138
- taskset_class = p_obj.taskset_class
139
- query = Persistence::Task.joins(:trials).joins(:taskset).
140
- select(ESTIMATION_FIELDS).
141
- where('tasksets.taskset_class' => taskset_class).
142
- where('trials.status' => ["passed", "pending"]).
143
- group('spec_file')
144
- estimation = {}
145
- query.each do |row|
146
- estimation[row.spec_file] = row.avg.to_i
147
- end
148
- unless estimation.empty?
149
- TasksetEstimation.update_estimate_secs(taskset_class, estimation)
150
- end
151
- end
152
135
  end
153
136
  end
154
137
  end
@@ -0,0 +1,62 @@
1
+ module RRRSpec
2
+ module Server
3
+ module StatisticsUpdater
4
+ ESTIMATION_FIELDS = [
5
+ "`spec_file`",
6
+ "avg(UNIX_TIMESTAMP(`trials`.`finished_at`)-UNIX_TIMESTAMP(`trials`.`started_at`)) as `avg`",
7
+ # "avg(`trials`.`finished_at`-`trials`.`started_at`) as `avg`",
8
+ ]
9
+
10
+ module_function
11
+
12
+ def work_loop
13
+ loop { work }
14
+ end
15
+
16
+ def work
17
+ taskset, recalculate = StatisticsUpdaterQueue.dequeue
18
+ recalculate = true
19
+
20
+ ActiveRecord::Base.connection_pool.with_connection do
21
+ unless Persistence::Taskset.where(key: taskset.key).exists?
22
+ RRRSpec.logger.warn("StatisticsUpdater: Ignoreing unpersisted taskset: #{taskset.key}")
23
+ end
24
+
25
+ if recalculate
26
+ recalculate_estimate_sec taskset
27
+ else
28
+ update_estimate_sec taskset
29
+ end
30
+ end
31
+ rescue
32
+ RRRSpec.logger.error($!)
33
+ end
34
+
35
+ def update_estimate_sec(taskset)
36
+ end
37
+
38
+ def recalculate_estimate_sec(taskset)
39
+ RRRSpec.logger.debug("Calculating estimate sec for taskset #{taskset.key}")
40
+
41
+ start = Time.now
42
+
43
+ p_obj = Persistence::Taskset.where(key: taskset.key).first
44
+ taskset_class = p_obj.taskset_class
45
+ query = Persistence::Task.joins(:trials).joins(:taskset).
46
+ select(ESTIMATION_FIELDS).
47
+ where('tasksets.taskset_class' => taskset_class).
48
+ where('trials.status' => ["passed", "pending"]).
49
+ group('spec_file')
50
+ estimation = {}
51
+ query.each do |row|
52
+ estimation[row.spec_file] = row.avg.to_i
53
+ end
54
+ unless estimation.empty?
55
+ TasksetEstimation.update_estimate_secs(taskset_class, estimation)
56
+ end
57
+
58
+ RRRSpec.logger.info("Recalculated estimate sec for taskset #{taskset.key} (total: #{Time.now - start} seconds)")
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  module RRRSpec
2
2
  module Server
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
  end
@@ -29,10 +29,10 @@ module RRRSpec
29
29
  it 'cancels the taskset' do
30
30
  Arbiter.cancel(taskset)
31
31
  expect(taskset.status).to eq('cancelled')
32
- expect(taskset.queue_empty?).to be_true
32
+ expect(taskset).to be_queue_empty
33
33
  expect(taskset.finished_at).not_to be_nil
34
34
  expect(ActiveTaskset.list).not_to include(taskset)
35
- expect(PersisterQueue.empty?).to be_false
35
+ expect(PersisterQueue).not_to be_empty
36
36
  end
37
37
  end
38
38
 
@@ -43,7 +43,7 @@ module RRRSpec
43
43
  Arbiter.cancel(taskset)
44
44
  expect(taskset.status).not_to eq('cancelled')
45
45
  expect(ActiveTaskset.list).not_to include(taskset)
46
- expect(PersisterQueue.empty?).to be_false
46
+ expect(PersisterQueue).not_to be_empty
47
47
  end
48
48
  end
49
49
  end
@@ -59,7 +59,7 @@ module RRRSpec
59
59
  it 'does nothing' do
60
60
  Arbiter.check(taskset)
61
61
  expect(ActiveTaskset.list).not_to include(taskset)
62
- expect(PersisterQueue.empty?).to be_false
62
+ expect(PersisterQueue).not_to be_empty
63
63
  end
64
64
  end
65
65
 
@@ -90,7 +90,7 @@ module RRRSpec
90
90
  expect(taskset.status).to eq('running')
91
91
  expect(taskset.finished_at).to be_blank
92
92
  expect(ActiveTaskset.list).to include(taskset)
93
- expect(PersisterQueue.empty?).to be_true
93
+ expect(PersisterQueue).to be_empty
94
94
  end
95
95
  end
96
96
  end
@@ -106,7 +106,7 @@ module RRRSpec
106
106
  expect(taskset.status).to eq("succeeded")
107
107
  expect(taskset.finished_at).not_to be_blank
108
108
  expect(ActiveTaskset.list).not_to include(taskset)
109
- expect(PersisterQueue.empty?).to be_false
109
+ expect(PersisterQueue).not_to be_empty
110
110
  end
111
111
  end
112
112
 
@@ -118,7 +118,7 @@ module RRRSpec
118
118
  expect(taskset.status).to eq("failed")
119
119
  expect(taskset.finished_at).not_to be_nil
120
120
  expect(ActiveTaskset.list).not_to include(taskset)
121
- expect(PersisterQueue.empty?).to be_false
121
+ expect(PersisterQueue).not_to be_empty
122
122
  end
123
123
  end
124
124
  end
@@ -295,10 +295,10 @@ module RRRSpec
295
295
  it 'fails the taskset' do
296
296
  Arbiter.fail(taskset)
297
297
  expect(taskset.status).to eq('failed')
298
- expect(taskset.queue_empty?).to be_true
298
+ expect(taskset).to be_queue_empty
299
299
  expect(taskset.finished_at).not_to be_nil
300
300
  expect(ActiveTaskset.list).not_to include(taskset)
301
- expect(PersisterQueue.empty?).to be_false
301
+ expect(PersisterQueue).not_to be_empty
302
302
  end
303
303
  end
304
304
 
@@ -309,7 +309,7 @@ module RRRSpec
309
309
  Arbiter.fail(taskset)
310
310
  expect(taskset.status).not_to eq('failed')
311
311
  expect(ActiveTaskset.list).not_to include(taskset)
312
- expect(PersisterQueue.empty?).to be_false
312
+ expect(PersisterQueue).not_to be_empty
313
313
  end
314
314
  end
315
315
  end
@@ -352,7 +352,7 @@ module RRRSpec
352
352
  expect(trial.status).to eq('error')
353
353
  expect(task1.status).to eq('failed')
354
354
  expect(taskset.tasks_left).not_to include(task1)
355
- expect(taskset.queue_empty?).to be_true
355
+ expect(taskset).to be_queue_empty
356
356
  expect(taskset.succeeded_count).to eq(0)
357
357
  expect(taskset.failed_count).to eq(1)
358
358
  end
@@ -380,7 +380,7 @@ module RRRSpec
380
380
  Arbiter.trial(trial)
381
381
  expect(task1.status).to eq('passed')
382
382
  expect(taskset.tasks_left).not_to include(task1)
383
- expect(taskset.queue_empty?).to be_true
383
+ expect(taskset).to be_queue_empty
384
384
  expect(taskset.succeeded_count).to eq(1)
385
385
  expect(taskset.failed_count).to eq(0)
386
386
  end
@@ -393,7 +393,7 @@ module RRRSpec
393
393
  Arbiter.trial(trial)
394
394
  expect(task1.status).to eq('pending')
395
395
  expect(taskset.tasks_left).not_to include(task1)
396
- expect(taskset.queue_empty?).to be_true
396
+ expect(taskset).to be_queue_empty
397
397
  expect(taskset.succeeded_count).to eq(1)
398
398
  expect(taskset.failed_count).to eq(0)
399
399
  end
@@ -427,7 +427,7 @@ module RRRSpec
427
427
  expect(trial.status).to eq('failed')
428
428
  expect(task1.status).to eq('failed')
429
429
  expect(taskset.tasks_left).not_to include(task1)
430
- expect(taskset.queue_empty?).to be_true
430
+ expect(taskset).to be_queue_empty
431
431
  expect(taskset.succeeded_count).to eq(0)
432
432
  expect(taskset.failed_count).to eq(1)
433
433
  end
@@ -438,7 +438,7 @@ module RRRSpec
438
438
  Arbiter.trial(trial)
439
439
  expect(task1.status).to be_blank
440
440
  expect(taskset.tasks_left).to include(task1)
441
- expect(taskset.queue_empty?).to be_true
441
+ expect(taskset).to be_queue_empty
442
442
  expect(taskset.succeeded_count).to eq(0)
443
443
  expect(taskset.failed_count).to eq(0)
444
444
  end
@@ -474,7 +474,7 @@ module RRRSpec
474
474
  Arbiter.trial(trial)
475
475
  expect(task1.status).to eq('failed')
476
476
  expect(taskset.tasks_left).not_to include(task1)
477
- expect(taskset.queue_empty?).to be_true
477
+ expect(taskset).to be_queue_empty
478
478
  expect(taskset.succeeded_count).to eq(0)
479
479
  expect(taskset.failed_count).to eq(1)
480
480
  end
@@ -42,7 +42,7 @@ module RRRSpec
42
42
 
43
43
  it 'assignes worker upto the max_workers' do
44
44
  Dispatcher.work
45
- expect(worker1.queue_empty?).to be_true
45
+ expect(worker1).to be_queue_empty
46
46
  workers = [worker1, worker2, worker3, worker4]
47
47
  expect(workers.count { |worker| worker.queue_empty? }).to eq(2)
48
48
  end
@@ -141,18 +141,6 @@ module RRRSpec
141
141
  end
142
142
  end
143
143
  end
144
-
145
- describe '.update_estimate_sec' do
146
- before { Persister.persist(@taskset) }
147
-
148
- it 'udpates estimation of the time taken to finish the tasks' do
149
- pending "sqlite3 doesn't have UNIT_TIMESTAMP function"
150
- Persister.update_estimate_sec(@taskset)
151
- expect(RRRSpec::TasksetEstimation.estimate_secs(@taskset.taskset_class)).to eq(
152
- {"spec/test_spec.rb" => 0}
153
- )
154
- end
155
- end
156
144
  end
157
145
  end
158
146
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ module RRRSpec
4
+ module Server
5
+ describe StatisticsUpdater do
6
+ before do
7
+ RRRSpec.configuration = ServerConfiguration.new
8
+ RRRSpec.configuration.redis = @redis
9
+
10
+ @worker, @taskset, @task, @worker_log, @slave, @trial =
11
+ RRRSpec.finished_fullset
12
+ end
13
+
14
+ describe '.update_estimate_sec' do
15
+ before { Persister.persist(@taskset) }
16
+
17
+ xit 'updates estimation of the time taken to finish the tasks' do
18
+ pending "sqlite3 doesn't have UNIT_TIMESTAMP function"
19
+ Persister.update_estimate_sec(@taskset)
20
+ expect(RRRSpec::TasksetEstimation.estimate_secs(@taskset.taskset_class)).to eq(
21
+ {"spec/test_spec.rb" => 0}
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rrrspec-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaya Suzuki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-22 00:00:00.000000000 Z
11
+ date: 2014-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: database_cleaner
@@ -232,6 +232,7 @@ files:
232
232
  - lib/rrrspec/server/log_file_persister.rb
233
233
  - lib/rrrspec/server/persistent_models.rb
234
234
  - lib/rrrspec/server/persister.rb
235
+ - lib/rrrspec/server/statistics_updater.rb
235
236
  - lib/rrrspec/server/version.rb
236
237
  - lib/rrrspec/server/worker_runner.rb
237
238
  - rrrspec-server.gemspec
@@ -241,6 +242,7 @@ files:
241
242
  - spec/rrrspec/server/log_file_persister_spec.rb
242
243
  - spec/rrrspec/server/persistent_models_spec.rb
243
244
  - spec/rrrspec/server/persister_spec.rb
245
+ - spec/rrrspec/server/statistics_updater_spec.rb
244
246
  - spec/spec_helper.rb
245
247
  - tasks/db.rake
246
248
  homepage: ''
@@ -274,4 +276,5 @@ test_files:
274
276
  - spec/rrrspec/server/log_file_persister_spec.rb
275
277
  - spec/rrrspec/server/persistent_models_spec.rb
276
278
  - spec/rrrspec/server/persister_spec.rb
279
+ - spec/rrrspec/server/statistics_updater_spec.rb
277
280
  - spec/spec_helper.rb