Commit 0321d1536a3d7abe6cdec6447e94e2bba8796cd6

Authored by Nathan Broadbent
2 parents 33f2ebcf c44f9c1d
Exists in master and in 1 other branch production

Merge pull request #468 from shingara/patch-1

launch a repairDatabase task on clear_resolved
Gemfile.lock
... ... @@ -7,9 +7,9 @@ GIT
7 7  
8 8 GIT
9 9 remote: https://github.com/rtomayko/tilt.git
10   - revision: 24ea7e9fa5a0624188069393abf033bb8b3f218c
  10 + revision: 74618967fbed3e206453516b92b47cd9aa922903
11 11 specs:
12   - tilt (1.3.6)
  12 + tilt (1.4.0)
13 13  
14 14 GEM
15 15 remote: http://rubygems.org/
... ... @@ -109,7 +109,7 @@ GEM
109 109 bcrypt-ruby (~> 3.0)
110 110 orm_adapter (~> 0.0.3)
111 111 warden (~> 1.1)
112   - diff-lcs (1.1.3)
  112 + diff-lcs (1.2.4)
113 113 email_spec (1.2.1)
114 114 mail (~> 2.2)
115 115 rspec (~> 2.0)
... ... @@ -131,7 +131,7 @@ GEM
131 131 has_scope (0.5.1)
132 132 hashie (1.2.0)
133 133 highline (1.6.15)
134   - hike (1.2.1)
  134 + hike (1.2.2)
135 135 hipchat (0.4.1)
136 136 httparty
137 137 hoi (0.0.6)
... ... @@ -188,7 +188,7 @@ GEM
188 188 bundler (>= 1.0.0)
189 189 rails (>= 3.0.0)
190 190 railties (>= 3.0.0)
191   - multi_json (1.7.0)
  191 + multi_json (1.7.2)
192 192 multi_xml (0.5.2)
193 193 multipart-post (1.1.5)
194 194 net-scp (1.0.4)
... ... @@ -270,7 +270,7 @@ GEM
270 270 rdoc (~> 3.4)
271 271 thor (>= 0.14.6, < 2.0)
272 272 raindrops (0.10.0)
273   - rake (10.0.3)
  273 + rake (10.0.4)
274 274 rbx-require-relative (0.0.9)
275 275 rdoc (3.12.2)
276 276 json (~> 1.4)
... ... @@ -280,19 +280,21 @@ GEM
280 280 rest-client (1.6.7)
281 281 mime-types (>= 1.16)
282 282 ri_cal (0.8.8)
283   - rspec (2.11.0)
284   - rspec-core (~> 2.11.0)
285   - rspec-expectations (~> 2.11.0)
286   - rspec-mocks (~> 2.11.0)
287   - rspec-core (2.11.1)
288   - rspec-expectations (2.11.2)
289   - diff-lcs (~> 1.1.3)
290   - rspec-mocks (2.11.1)
291   - rspec-rails (2.11.0)
  283 + rspec (2.13.0)
  284 + rspec-core (~> 2.13.0)
  285 + rspec-expectations (~> 2.13.0)
  286 + rspec-mocks (~> 2.13.0)
  287 + rspec-core (2.13.1)
  288 + rspec-expectations (2.13.0)
  289 + diff-lcs (>= 1.1.3, < 2.0)
  290 + rspec-mocks (2.13.1)
  291 + rspec-rails (2.13.1)
292 292 actionpack (>= 3.0)
293 293 activesupport (>= 3.0)
294 294 railties (>= 3.0)
295   - rspec (~> 2.11.0)
  295 + rspec-core (~> 2.13.0)
  296 + rspec-expectations (~> 2.13.0)
  297 + rspec-mocks (~> 2.13.0)
296 298 ruby-debug (0.10.4)
297 299 columnize (>= 0.1)
298 300 ruby-debug-base (~> 0.10.4.0)
... ... @@ -327,7 +329,7 @@ GEM
327 329 daemons (>= 1.0.9)
328 330 eventmachine (>= 0.12.6)
329 331 rack (>= 1.0.0)
330   - thor (0.17.0)
  332 + thor (0.18.1)
331 333 timecop (0.3.5)
332 334 treetop (1.4.12)
333 335 polyglot
... ...
app/interactors/resolved_problem_clearer.rb 0 → 100644
... ... @@ -0,0 +1,32 @@
  1 +require 'problem_destroy'
  2 +
  3 +class ResolvedProblemClearer
  4 +
  5 + ##
  6 + # Clear all problem already resolved
  7 + #
  8 + def execute
  9 + nb_problem_resolved.tap { |nb|
  10 + if nb > 0
  11 + criteria.each do |problem|
  12 + ProblemDestroy.new(problem).execute
  13 + end
  14 + repair_database
  15 + end
  16 + }
  17 + end
  18 +
  19 + private
  20 +
  21 + def nb_problem_resolved
  22 + @count ||= criteria.count
  23 + end
  24 +
  25 + def criteria
  26 + @criteria = Problem.resolved
  27 + end
  28 +
  29 + def repair_database
  30 + Mongoid.config.master.command(:repairDatabase => 1)
  31 + end
  32 +end
... ...
lib/tasks/errbit/database.rake
... ... @@ -19,9 +19,8 @@ namespace :errbit do
19 19  
20 20 desc "Delete resolved errors from the database. (Useful for limited heroku databases)"
21 21 task :clear_resolved => :environment do
22   - count = Problem.resolved.count
23   - Problem.resolved.each {|problem| problem.destroy }
24   - puts "=== Cleared #{count} resolved errors from the database." if count > 0
  22 + require 'resolved_problem_clearer'
  23 + puts "=== Cleared #{ResolvedProblemClearer.new.execute} resolved errors from the database."
25 24 end
26 25  
27 26 desc "Regenerate fingerprints"
... ...
spec/interactors/resolved_problem_clearer_spec.rb 0 → 100644
... ... @@ -0,0 +1,52 @@
  1 +require 'spec_helper'
  2 +
  3 +describe ResolvedProblemClearer do
  4 + let(:resolved_problem_clearer) {
  5 + ResolvedProblemClearer.new
  6 + }
  7 + describe "#execute" do
  8 + let!(:problems) {
  9 + [
  10 + Fabricate(:problem),
  11 + Fabricate(:problem),
  12 + Fabricate(:problem)
  13 + ]
  14 + }
  15 + context 'without problem resolved' do
  16 + it 'do nothing' do
  17 + expect {
  18 + expect(resolved_problem_clearer.execute).to eq 0
  19 + }.to_not change {
  20 + Problem.count
  21 + }
  22 + end
  23 + it 'not repair database' do
  24 + Mongoid.config.master.should_receive(:command).and_call_original
  25 + Mongoid.config.master.should_not_receive(:command).with({:repairDatabase => 1})
  26 + resolved_problem_clearer.execute
  27 + end
  28 + end
  29 +
  30 + context "with problem resolve" do
  31 + before do
  32 + problems.first.resolve!
  33 + problems.second.resolve!
  34 + end
  35 + it 'delete problem resolve' do
  36 + expect {
  37 + expect(resolved_problem_clearer.execute).to eq 2
  38 + }.to change {
  39 + Problem.count
  40 + }.by(-2)
  41 + expect(Problem.where(:_id => problems.first.id).first).to be_nil
  42 + expect(Problem.where(:_id => problems.second.id).first).to be_nil
  43 + end
  44 +
  45 + it 'repair database' do
  46 + Mongoid.config.master.should_receive(:command).and_call_original
  47 + Mongoid.config.master.should_receive(:command).with({:repairDatabase => 1})
  48 + resolved_problem_clearer.execute
  49 + end
  50 + end
  51 + end
  52 +end
... ...