wackamole 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/Rakefile +1 -0
  2. data/bin/setup_indexes +44 -0
  3. data/bin/wackamole +8 -6
  4. data/config.ru +18 -0
  5. data/lib/app.rb +8 -5
  6. data/lib/controllers/dashboard.rb +13 -1
  7. data/lib/controllers/features.rb +4 -0
  8. data/lib/controllers/logs.rb +14 -5
  9. data/lib/controllers/mission.rb +19 -12
  10. data/lib/controllers/users.rb +7 -0
  11. data/lib/helpers/dashboard_helper.rb +7 -7
  12. data/lib/helpers/logs_helper.rb +29 -12
  13. data/lib/helpers/mission_helper.rb +21 -7
  14. data/lib/wackamole.rb +1 -1
  15. data/lib/wackamole/models/control.rb +45 -22
  16. data/lib/wackamole/models/log.rb +6 -4
  17. data/lib/wackamole/models/mission.rb +44 -132
  18. data/lib/wackamole/models/mole_info.rb +21 -15
  19. data/lib/wackamole/models/search_filter.rb +25 -11
  20. data/public/images/browsers_sprite.png +0 -0
  21. data/public/images/fault_small.png +0 -0
  22. data/public/images/perf_small.png +0 -0
  23. data/public/stylesheets/wackamole.css +135 -111
  24. data/spec/models/log_spec.rb +4 -4
  25. data/spec/models/mission_spec.rb +13 -192
  26. data/spec/models/search_filter_spec.rb +37 -9
  27. data/views/dashboard/_report.erb +2 -2
  28. data/views/dashboard/index.erb +2 -0
  29. data/views/features/index.erb +3 -1
  30. data/views/layout.erb +7 -7
  31. data/views/logs/_rows.erb +4 -3
  32. data/views/logs/index.erb +3 -1
  33. data/views/logs/show.erb +4 -8
  34. data/views/mission/_report.erb +66 -40
  35. data/views/mission/index.erb +1 -3
  36. data/views/mission/refresh_js.erb +5 -2
  37. data/views/mission/trash.txt +50 -0
  38. data/views/shared/_filter.erb +8 -9
  39. data/views/shared/_search.erb +2 -2
  40. data/views/users/index.erb +3 -1
  41. metadata +18 -2
Binary file
Binary file
Binary file
@@ -39,16 +39,28 @@ div#main {
39
39
  overflow: none;
40
40
  }
41
41
 
42
+ div.corners {
43
+ -moz-border-radius: 10px;
44
+ -webkit-border-radius: 10px;
45
+ }
46
+
47
+ div.spe_corners {
48
+ -moz-border-radius-topleft: 7px;
49
+ -moz-border-radius-topright: 7px;
50
+ -moz-border-radius-bottomleft: 7px;
51
+ -moz-border-radius-bottomright: 0px;
52
+ -webkit-border-top-left-radius: 7px;
53
+ -webkit-border-top-right-radius: 7px;
54
+ -webkit-border-bottom-left-radius: 7px;
55
+ -webkit-border-bottom-right-radius: 0px;
56
+ }
57
+
42
58
  div#navigation {
43
- margin: 10px 0px 20px 0px;
44
- padding: 5px 0px 5px 0px;
45
- font-size: 2.5em;
46
- text-align: center;
47
- background: #c1c1c1 url(../images/fade.png) repeat-x;
48
- -moz-border-radius-bottomleft: 2px;
49
- -moz-border-radius-topleft: 2px;
50
- -moz-border-radius-bottomright: 2px;
51
- -moz-border-radius-topright: 2px;
59
+ margin: 10px 0px 20px 0px;
60
+ padding: 5px 0px 5px 0px;
61
+ font-size: 1.5em;
62
+ text-align: center;
63
+ background: #c1c1c1 url(../images/fade.png) repeat-x;
52
64
  }
53
65
 
54
66
  a.site_link {
@@ -70,7 +82,13 @@ a.current {
70
82
 
71
83
  div#app_info {
72
84
  text-align: right;
73
- font-size: 4em;
85
+ font-size: 2em;
86
+ }
87
+ div#app_info li {
88
+ color:#3968ff;
89
+ }
90
+ div#app_info li span {
91
+ color:#666;
74
92
  }
75
93
  div#app_info li#env {
76
94
  color: #c1c1c1;
@@ -78,8 +96,10 @@ div#app_info li#env {
78
96
  font-style: italic;
79
97
  }
80
98
  div#app_info p {
81
- text-align: right;
82
- font-size: 0.5em;
99
+ text-align: right;
100
+ font-size: 1.0em;
101
+ }
102
+ span#timestamp {
83
103
  }
84
104
 
85
105
  #header {
@@ -87,9 +107,9 @@ div#app_info p {
87
107
  }
88
108
 
89
109
  p {
90
- font-size: 2em;
110
+ font-size: 1.2em;
91
111
  text-align: left;
92
- color:#666;
112
+ color: #666;
93
113
  }
94
114
 
95
115
  .img {
@@ -181,10 +201,6 @@ div#filters {
181
201
  border: 1px #242424 solid;
182
202
  background: #242424 url(../images/fade.png) repeat-x;
183
203
  padding: 5px 10px 10px 10px;
184
- -moz-border-radius-topleft: 7px;
185
- -moz-border-radius-topright: 7px;
186
- -moz-border-radius-bottomleft: 7px;
187
- -moz-border-radius-bottomright: 7px;
188
204
  margin-bottom: 10px;
189
205
  overflow: auto;
190
206
  }
@@ -194,25 +210,29 @@ div#filters {
194
210
  div.ov_content {
195
211
  text-align: left;
196
212
  }
197
- p#info img {
198
- float: left;
199
- padding: 10px;
213
+ p#info {
214
+ margin: 10px 0px 10px 20px;
215
+ float: left;
200
216
  }
201
- p#info p#type {
217
+ img.info {
218
+ float: left;
219
+ margin-right: 10px;
220
+ }
221
+ p#info span#type {
202
222
  font-size: 2em;
203
223
  text-align: left;
204
- padding: 50px 0px 0px 20px;
224
+ color: #c1c1c1;
205
225
  }
206
- p#info p#feature {
226
+ p#info span#feature {
207
227
  clear: left;
208
228
  font-size: 2em;
209
229
  text-align: left;
210
- padding: 10px 0px 0px 20px;
230
+ color: #666;
211
231
  }
212
232
  div#info {
213
233
  clear: left;
214
234
  text-align: left;
215
- margin: 35px 10px 30px 10px;
235
+ margin: 10px 10px 30px 10px;
216
236
  }
217
237
 
218
238
  /* ------------------------------------------------------------------------- */
@@ -221,10 +241,6 @@ div#logs {
221
241
  border: 1px #242424 solid;
222
242
  background: #c1c1c1 url(../images/fade.png) repeat-x;
223
243
  padding: 0px 10px 10px 10px;
224
- -moz-border-radius-topleft: 7px;
225
- -moz-border-radius-topright: 7px;
226
- -moz-border-radius-bottomleft: 7px;
227
- -moz-border-radius-bottomright: 0px;
228
244
  margin-bottom: 10px;
229
245
  clear: left;
230
246
  }
@@ -233,10 +249,6 @@ div#users {
233
249
  border: 1px #242424 solid;
234
250
  background: #c1c1c1 url(../images/fade.png) repeat-x;
235
251
  padding: 0px 10px 10px 10px;
236
- -moz-border-radius-topleft: 7px;
237
- -moz-border-radius-topright: 7px;
238
- -moz-border-radius-bottomleft: 7px;
239
- -moz-border-radius-bottomright: 0px;
240
252
  margin-bottom: 10px;
241
253
  }
242
254
 
@@ -244,19 +256,15 @@ div#features {
244
256
  border: 1px #242424 solid;
245
257
  background: #c1c1c1 url(../images/fade.png) repeat-x;
246
258
  padding: 0px 10px 10px 10px;
247
- -moz-border-radius-topleft: 7px;
248
- -moz-border-radius-topright: 7px;
249
- -moz-border-radius-bottomleft: 7px;
250
- -moz-border-radius-bottomright: 0px;
251
259
  margin-bottom: 10px;
252
260
  }
253
261
 
254
262
 
255
263
  /* Titles */
256
264
  p.title {
257
- font-size: 3em;
265
+ font-size: 1.5em;
258
266
  text-align: left;
259
- color: #434343;
267
+ color: #808080;
260
268
  font-weight: bold;
261
269
  }
262
270
 
@@ -277,24 +285,28 @@ a.fault {
277
285
  font-variant: small-caps;
278
286
  }
279
287
 
280
- /* Flashes */
281
- div#flash {
282
- background: #9f4f50 url(../images/fade.png) repeat-x;
283
- -moz-border-radius-topleft: 7px;
284
- -moz-border-radius-topright: 7px;
285
- -moz-border-radius-bottomleft: 7px;
286
- -moz-border-radius-bottomright: 7px;
287
- border: 1px solid #434343;
288
- margin: 10px;
288
+ /* ------------------------------------------------------------------------- */
289
+ /* Flash */
290
+
291
+ div.flash {
292
+ display: none;
293
+ width: 95%;
289
294
  padding: 10px;
290
295
  font-size: 1.5em;
296
+ color: #fff;
297
+ border: 1px #92b948 solid;
298
+ -moz-border-radius-bottomleft: 20px;
299
+ -moz-border-radius-topleft: 0px;
300
+ -moz-border-radius-bottomright: 0px;
301
+ -moz-border-radius-topright: 20px;
291
302
  }
292
-
293
- div#flash .error {
294
- color: red;
303
+ div.flash_error {
304
+ color: #f00;
305
+ border: 1px #f00 solid;
295
306
  }
296
- div#flash .info {
297
- color: blue;
307
+ div.flash_info {
308
+ color: #fff;
309
+ border: 1px #92b948 solid;
298
310
  }
299
311
 
300
312
  /* ------------------------------------------------------------------------- */
@@ -382,38 +394,13 @@ table.moled tr td {
382
394
  padding: 2px 10px;
383
395
  }
384
396
 
385
- /* Flash */
386
- div.flash {
387
- display: none;
388
- width: 95%;
389
- padding: 10px;
390
- margin: 20px 0 0px 300px;
391
- font-size: .5em;
392
- color: #fff;
393
- border: 1px #92b948 solid;
394
- -moz-border-radius-bottomleft: 20px;
395
- -moz-border-radius-topleft: 0px;
396
- -moz-border-radius-bottomright: 0px;
397
- -moz-border-radius-topright: 20px;
398
- }
399
- div.flash_error {
400
- color: #f00;
401
- border: 1px #f00 solid;
402
- }
403
- div.flash_info {
404
- color: #fff;
405
- border: 1px #92b948 solid;
406
- }
407
-
408
397
  /* ------------------------------------------------------------------------- */
409
398
  /* Overlay */
410
399
  .overlay {
411
400
  display: none;
412
401
  z-index: 10000;
413
- -moz-border-radius-topleft: 10px;
414
- -moz-border-radius-topright: 10px;
415
- -moz-border-radius-bottomleft: 10px;
416
- -moz-border-radius-bottomright: 10px;
402
+ -moz-border-radius: 10px;
403
+ -webkit-border-radius: 10px;
417
404
  background-color: #fff;
418
405
  width: 650px;
419
406
  min-height: 200px;
@@ -442,8 +429,8 @@ div.flash_info {
442
429
  float: left;
443
430
  }
444
431
  img#search_loader {
445
- margin-top: 9px;
446
- display: none;
432
+ vertical-align: sub;
433
+ display: none;
447
434
  }
448
435
 
449
436
  #filter_form {
@@ -454,7 +441,7 @@ img#search_loader {
454
441
  }
455
442
  fieldset#submit {
456
443
  float: left;
457
- margin-right: 10px;
444
+ margin: 0 10px 0 10px;
458
445
  min-width: 0px;
459
446
  }
460
447
  fieldset#submit input {
@@ -488,10 +475,14 @@ input.search {
488
475
  height: 17px;
489
476
  padding: 0px 0px 0px 20px;
490
477
  margin: 10px 0px 0px 0px;
491
- -moz-border-radius-topleft: 7px;
492
- -moz-border-radius-topright: 7px;
493
- -moz-border-radius-bottomleft: 7px;
494
- -moz-border-radius-bottomright: 0px;
478
+ -moz-border-radius-topleft: 7px;
479
+ -moz-border-radius-topright: 7px;
480
+ -moz-border-radius-bottomleft: 7px;
481
+ -moz-border-radius-bottomright: 0px;
482
+ -webkit-border-top-left-radius: 7px;
483
+ -webkit-border-top-right-radius: 7px;
484
+ -webkit-border-bottom-left-radius: 7px;
485
+ -webkit-border-bottom-right-radius: 0px;
495
486
  }
496
487
 
497
488
  .example {
@@ -528,24 +519,23 @@ ul.section li {
528
519
  -moz-border-radius-bottomleft: 7px;
529
520
  -moz-border-radius-bottomright: 0px;
530
521
  margin: 10px;
522
+ min-height: 65px;
531
523
  }
532
524
 
533
525
  ul.section li p {
534
526
  color: #646464;
535
- padding: 2px 10px;
527
+ padding: 5px 0px 5px 30px;
536
528
  text-align: left;
537
- padding-left: 40px;
529
+ float: left;
530
+ width: 10%;
538
531
  }
539
532
  ul.section li p.no_report {
540
533
  text-align: center;
541
- }
542
-
543
- p.no_report {
544
534
  font-size: 1.2em;
545
535
  color: #434343;
536
+ width: 70%;
546
537
  }
547
538
 
548
-
549
539
  ul#summary li {
550
540
  border: none;
551
541
  border-top: 1px #c1c1c1 solid;
@@ -621,7 +611,6 @@ p.app_name {
621
611
  p.perf {
622
612
  color: #0000ff;
623
613
  }
624
-
625
614
  p.fault {
626
615
  color: #ff0000;
627
616
  }
@@ -642,8 +631,7 @@ div.environment {
642
631
  -moz-border-radius-topleft: 7px;
643
632
  -moz-border-radius-topright: 7px;
644
633
  -moz-border-radius-bottomleft: 7px;
645
- -moz-border-radius-bottomright: 7px;
646
-
634
+ -moz-border-radius-bottomright: 7px;
647
635
  }
648
636
 
649
637
  div.env {
@@ -659,26 +647,62 @@ div.details {
659
647
  text-align: right;
660
648
  }
661
649
 
662
- td.fault {
663
- color: white;
664
- background: red;
665
- }
666
-
667
- td.perf {
668
- color: white;
669
- background: blue;
650
+ span.last_tick_fault {
651
+ color: #fff;
652
+ background: #ff321d;
670
653
  }
671
-
672
- td.active {
673
- background: yellow;
654
+ span.last_tick_perf {
655
+ color: #fff;
656
+ background: #368bff;
674
657
  }
675
-
676
- td.inactive {
658
+ span.last_tick_feature {
677
659
  color: #fff;
678
- background: #434343;
660
+ background: #86ff36;
661
+ }
662
+ span.today_fault {
663
+ color: #ff321d;
664
+ }
665
+ span.today_perf {
666
+ color: #368bff;
667
+ }
668
+ span.today_feature {
669
+ color: #87b76c;
679
670
  }
680
671
 
672
+
681
673
  a.fixed {
682
674
  color: orange;
683
675
  text-decoration: none;
676
+ }
677
+
678
+ /* ------------------------------------------------------------------------- */
679
+ /* Browsers */
680
+ div.browser {
681
+ width: 21px;
682
+ height: 20px;
683
+ background: transparent url("../images/browsers_sprite.png" ) no-repeat top left;
684
+ }
685
+ div.safari {
686
+ background-position: 0 0;
687
+ }
688
+ div.firefox {
689
+ background-position: -21px 0;
690
+ }
691
+ div.chrome {
692
+ background-position: -42px 0;
693
+ }
694
+ div.opera {
695
+ background-position: -64px 0;
696
+ }
697
+ div.ie_6 {
698
+ background-position: -88px 0;
699
+ }
700
+ div.ie_7 {
701
+ background-position: -110px 0;
702
+ }
703
+ div.ie_8 {
704
+ background-position: -132px 0;
705
+ }
706
+ div.unknown {
707
+ background-position: -154px 0;
684
708
  }
@@ -26,18 +26,18 @@ describe Wackamole::Log do
26
26
  indexes = @cltn.index_information
27
27
  indexes.should have(1).item
28
28
  count = Wackamole::Log.ensure_indexes!
29
- count.should == 5
29
+ count.should == 2
30
30
  indexes = @cltn.index_information
31
- indexes.should have(6).items
31
+ indexes.should have(5).items
32
32
  end
33
33
 
34
34
  it "should do nothing if indexes are already present" do
35
35
  indexes = @cltn.index_information
36
- indexes.should have(6).items
36
+ indexes.should have(5).items
37
37
  count = Wackamole::Log.ensure_indexes!
38
38
  count.should == 0
39
39
  indexes = @cltn.index_information
40
- indexes.should have(6).items
40
+ indexes.should have(5).items
41
41
  end
42
42
  end
43
43
  end
@@ -24,202 +24,23 @@ describe Wackamole::Mission do
24
24
  end
25
25
  end
26
26
 
27
- describe "#rollups" do
28
- before( :each ) do
29
- @con = Wackamole::Control.connection
30
- db = @con.db( 'wackamole_mdb' )
31
- db['rollups'].remove( {} )
32
- end
33
-
34
- after( :each ) do
35
- @con.drop_database( "mole_blee_test_mdb" )
36
- @con.drop_database( "mole_blee_development_mdb" )
37
- end
38
-
39
- it "should rollup statuses for a time correctly" do
40
- rollups = Wackamole::Mission.rollups( @test_time, false )
41
- rollups.should have(1).item
42
- rollup = rollups.first
43
- rollup['envs'].should have(3).items
44
- envs = %w[development production test]
45
- rollup['app'].should == 'fred'
46
- rollup['envs'].each_pair do |env, info|
47
- envs.include?( env ).should == true
48
- envs = envs - [env]
49
- info.keys.sort.should == %w[faults features perfs]
50
- info.values.should == [2, 2, 2]
51
- end
52
- end
53
-
54
- it "should rollup statuses for the day correctly" do
55
- rollups = Wackamole::Mission.rollups( @test_time, true )
56
- rollups.should have(1).item
57
- rollup = rollups.first
58
- rollup['envs'].should have(3).items
59
- envs = %w[development production test]
60
- rollup['app'].should == 'fred'
61
- rollup['envs'].each_pair do |env, info|
62
- envs.include?( env ).should == true
63
- envs = envs - [env]
64
- info.keys.sort.should == %w[faults features perfs]
65
- info.values.should == [7, 7, 7]
66
- end
67
- end
68
-
69
- it "should update a rollup correctly" do
70
- Wackamole::Mission.rollups( @test_time, false )
71
- rollups = Wackamole::Mission.rollups( @test_time, false )
72
- rollups.should have(1).item
73
- rollup = rollups.first
74
- rollup['envs'].should have(3).items
75
- envs = %w[development production test]
76
- rollup['app'].should == 'fred'
77
- rollup['envs'].each_pair do |env, info|
78
- envs.include?( env ).should == true
79
- envs = envs - [env]
80
- info.keys.sort.should == %w[faults features perfs]
81
- info.values.should == [4, 4, 4]
82
- end
83
- end
84
-
85
- describe "#reset!" do
86
- it "should clear out a mole correctly" do
87
- Fixtures.create_valid_mole_db( @con, 'blee', "test" )
88
- rollups = Wackamole::Mission.rollups( @test_time, false )
89
- rollup = Wackamole::Mission.rollups_cltn.find_one( { :app => 'blee' } )
90
- rollup.should_not be_nil
91
- %w[features perfs faults].each do |type|
92
- rollup['envs']['test'][type].should == 2
93
- end
94
- Wackamole::Mission.reset!( 'blee', 'test', 'faults' )
95
- rollup = Wackamole::Mission.rollups_cltn.find_one( { :app => 'blee' } )
96
- rollup['envs']['test']['faults'].should == 0
97
- %w[features perfs].each do |type|
98
- rollup['envs']['test'][type].should == 2
99
- end
100
- end
101
- end
102
-
103
- describe '#clean!' do
104
- before( :each ) do
105
- @con.drop_database( "mole_blee_test_mdb" )
106
- @con.drop_database( "mole_blee_development_mdb" )
107
- end
108
-
109
- it "should update the rollups if an env is no longer in the db" do
110
- Fixtures.create_valid_mole_db( @con, 'blee', "test" )
111
- Fixtures.create_valid_mole_db( @con, 'blee', "development" )
112
- rollups = Wackamole::Mission.rollups( @test_time, false )
113
- rollups.should have(2).items
114
- @con.drop_database( "mole_blee_test_mdb" )
115
- rollups = Wackamole::Mission.rollups( @test_time, false )
116
- rollups.should have(2).items
117
- rollup = Wackamole::Mission.rollups_cltn.find_one( { :app => 'blee' } )
118
- rollup.should_not be_nil
119
- rollup['envs'].should have(1).item
120
- end
121
-
122
- it "should remove a rollup if an app is no longer in the db" do
123
- Fixtures.create_valid_mole_db( @con, 'blee', "test" )
124
- rollups = Wackamole::Mission.rollups( @test_time, false )
125
- rollups.should have(2).items
126
- @con.drop_database( "mole_blee_test_mdb" )
127
- rollups = Wackamole::Mission.rollups( @test_time, false )
128
- rollups.should have(1).items
129
- end
130
- end
131
- end
132
-
133
- describe "#comp_applications" do
134
- it "should gather report for a given day correctly" do
135
- report = Wackamole::Mission.comb_applications( @test_time, true )
136
- report.should have(1).item
137
- report['fred'].should_not be_nil
138
- report['fred']['envs'].should have(3).items
139
-
140
- envs = %w[development production test]
141
- expected = { 0 => 7, 1 => 7, 2 => 7}
142
- report['fred']['envs'].each_pair do |env, info|
143
- envs.include?( env ).should == true
144
- envs = envs - [env]
145
- info.should == expected
146
- end
147
- end
148
-
149
- it "should gather report for a given time correctly" do
150
- report = Wackamole::Mission.comb_applications( @test_time, false )
151
- report.should have(1).item
152
- report['fred'].should_not be_nil
153
- report['fred']['envs'].should have(3).items
154
-
155
- envs = %w[development production test]
156
- expected = { 0 => 2, 1 => 2, 2 => 2}
157
- report['fred']['envs'].each_pair do |env, info|
158
- envs.include?( env ).should == true
159
- envs = envs - [env]
160
- info.should == expected
161
- end
162
- end
163
- end
164
-
165
- describe "#analyse_logs" do
166
- before :all do
167
- @db = Wackamole::Control.switch_mole_db!( "fred", "test" )
168
- end
169
-
170
- it "should find no analyses after 2am" do
171
- test_time = Chronic.parse( "2010/01/01 02:00:00" ).utc
172
- analysis = Wackamole::Mission.analyse_logs( @db, test_time, false )
173
- [0, 1, 2].each{ |type| analysis[type].should == 0 }
174
- end
175
-
176
- it "should analyse a log for a given time correctly" do
177
- test_time = Chronic.parse( "2010/01/01 01:00:00" ).utc
178
- analysis = Wackamole::Mission.analyse_logs( @db, test_time, false )
179
- [0, 1, 2].each{ |type| analysis[type].should == 2 }
180
- end
181
-
182
- it "should analyse logs for a day correctly" do
183
- analysis = Wackamole::Mission.analyse_logs( @db, @test_time, true )
184
- [0, 1, 2].each{ |type| analysis[type].should == 7 }
185
- end
186
- end
187
-
188
- describe "#amend_report" do
189
- it "should amend an empty report correctly" do
190
- report = {}
191
- %w[development test production].each do |env|
192
- %w[feature fault perf].each do |type|
193
- type_num = Rackamole.send( type )
194
- log = { 'typ' => type_num }
195
- Wackamole::Mission.amend_report( report, "fred", env, log )
196
- report['fred']['envs'][env][type_num].should == 1
27
+ it "should pick up an app pulse correctly" do
28
+ pulse = Wackamole::Mission.pulse( @test_time )
29
+ pulse.should have(3).items
30
+ pulse[:to_date].should_not be_nil
31
+ pulse[:today].should_not be_nil
32
+ pulse[:last_tick].should_not be_nil
33
+ %w(to_date today).each do |p|
34
+ %w(production development test).each do |e|
35
+ [0, 1, 2].each do |type|
36
+ pulse[p.to_sym]["fred"][e][type].should == 7
197
37
  end
198
38
  end
199
39
  end
200
-
201
- it "should amend an existing report with no recorded info correctly" do
202
- report = { "fred" => { 'envs' => {} } }
203
- %w[development test production].each do |env|
204
- %w[feature fault perf].each do |type|
205
- type_num = Rackamole.send( type )
206
- log = { 'typ' => type_num }
207
- Wackamole::Mission.amend_report( report, "fred", env, log )
208
- report['fred']['envs'][env][type_num].should == 1
209
- end
40
+ %w(production development test).each do |e|
41
+ [0, 1, 2].each do |type|
42
+ pulse[:last_tick]["fred"][e][type].should == 2
210
43
  end
211
44
  end
212
-
213
- it "should amend an existing report correctly" do
214
- report = { "fred" => {'envs' => { 'test' => { 0 => 1, 1 => 1, 2 => 1 } } }}
215
- %w[development test production].each do |env|
216
- %w[feature fault perf].each do |type|
217
- type_num = Rackamole.send( type )
218
- log = { 'typ' => type_num }
219
- Wackamole::Mission.amend_report( report, "fred", env, log )
220
- report['fred']['envs'][env][type_num].should == (env == "test" ? 2 : 1)
221
- end
222
- end
223
- end
224
45
  end
225
46
  end