database.rake
2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
require 'digest/sha1'
namespace :errbit do
namespace :db do
desc "Updates cached attributes on Problem"
task :update_problem_attrs => :environment do
puts "Updating problems"
Problem.all.each{|problem|
ProblemUpdaterCache.new(self).update
}
end
desc "Updates Problem#notices_count"
task :update_notices_count => :environment do
puts "Updating problem.notices_count"
Problem.all.each do |p|
p.update_attributes(:notices_count => p.notices.count)
end
end
desc "Delete resolved errors from the database. (Useful for limited heroku databases)"
task :clear_resolved => :environment do
require 'resolved_problem_clearer'
puts "=== Cleared #{ResolvedProblemClearer.new.execute} resolved errors from the database."
end
desc "Regenerate fingerprints"
task :regenerate_fingerprints => :environment do
def normalize_backtrace(backtrace)
backtrace[0...3].map do |trace|
trace.merge 'method' => trace['method'].to_s.gsub(/[0-9_]{10,}+/, "__FRAGMENT__")
end
end
def fingerprint(source)
Digest::SHA1.hexdigest(source.to_s)
end
puts "Regenerating Err fingerprints"
Err.create_indexes
Err.all.each do |err|
next if err.notices.count == 0
source = {
:backtrace => normalize_backtrace(err.notices.first.backtrace).to_s,
:error_class => err.error_class,
:component => err.component,
:action => err.action,
:environment => err.environment,
:api_key => err.app.api_key
}
err.update_attributes(:fingerprint => fingerprint(source))
end
end
desc "Remove notices in batch"
task :notices_delete, [ :problem_id ] => [ :environment ] do
BATCH_SIZE = 1000
if args[:problem_id]
item_count = Problem.find(args[:problem_id]).notices.count
removed_count = 0
puts "Notices to remove: #{item_count}"
while item_count > 0
Problem.find(args[:problem_id]).notices.limit(BATCH_SIZE).each do |notice|
notice.remove
removed_count += 1
end
item_count -= BATCH_SIZE
puts "Removed #{removed_count} notices"
end
end
end
end
end