Commit 12440cec8a8406ab60c1ca8653e1763e7d7e6ab6

Authored by Rodrigo Souto
1 parent 593da77e

Logging Spaminator movements

plugins/spaminator/controllers/spaminator_plugin_admin_controller.rb
@@ -34,7 +34,7 @@ class SpaminatorPluginAdminController < AdminController @@ -34,7 +34,7 @@ class SpaminatorPluginAdminController < AdminController
34 settings.scanning = true 34 settings.scanning = true
35 settings.save! 35 settings.save!
36 remove_scheduled_scan 36 remove_scheduled_scan
37 - Delayed::Job.enqueue(SpaminatorPlugin::ScanJob.new(environment)) 37 + Delayed::Job.enqueue(SpaminatorPlugin::ScanJob.new(environment.id))
38 end 38 end
39 redirect_to :action => 'index' 39 redirect_to :action => 'index'
40 end 40 end
plugins/spaminator/lib/spaminator_plugin/scan_job.rb
@@ -6,7 +6,11 @@ class SpaminatorPlugin::ScanJob < Struct.new(:environment_id) @@ -6,7 +6,11 @@ class SpaminatorPlugin::ScanJob < Struct.new(:environment_id)
6 settings.scanning = true 6 settings.scanning = true
7 settings.save! 7 settings.save!
8 8
9 - SpaminatorPlugin::Spaminator.run(environment) 9 + begin
  10 + SpaminatorPlugin::Spaminator.run(environment)
  11 + rescue Exception => exception
  12 + SpaminatorPlugin::Spaminator.log("Spaminator failed with the following error: \n ==> #{exception}\n#{exception.backtrace.join("\n")}")
  13 + end
10 14
11 settings.scanning = false 15 settings.scanning = false
12 SpaminatorPlugin.schedule_scan(environment) if settings.deployed 16 SpaminatorPlugin.schedule_scan(environment) if settings.deployed
plugins/spaminator/lib/spaminator_plugin/spaminator.rb
@@ -11,6 +11,14 @@ class SpaminatorPlugin::Spaminator @@ -11,6 +11,14 @@ class SpaminatorPlugin::Spaminator
11 def benchmark(environment) 11 def benchmark(environment)
12 puts Benchmark.measure { run(environment) } 12 puts Benchmark.measure { run(environment) }
13 end 13 end
  14 +
  15 + def initialize_logger(logpath)
  16 + @logger = Logger.new(logpath)
  17 + end
  18 +
  19 + def log(message)
  20 + @logger << "[#{Time.now.strftime("%F %T %z")}] #{message}\n"
  21 + end
14 end 22 end
15 23
16 24
@@ -20,9 +28,12 @@ class SpaminatorPlugin::Spaminator @@ -20,9 +28,12 @@ class SpaminatorPlugin::Spaminator
20 @report = SpaminatorPlugin::Report.new(:environment => environment, 28 @report = SpaminatorPlugin::Report.new(:environment => environment,
21 :total_people => Person.count, 29 :total_people => Person.count,
22 :total_comments => Comment.count) 30 :total_comments => Comment.count)
  31 + logpath = File.join(SpaminatorPlugin.root_path, 'log', "#{environment.name.to_slug}_#{ENV['RAILS_ENV']}_#{Time.now.strftime("%F_%T")}.log")
  32 + self.class.initialize_logger(logpath)
23 end 33 end
24 34
25 def run 35 def run
  36 + self.class.log("Starting Spaminator scan")
26 start_time = Time.now 37 start_time = Time.now
27 38
28 process_all_comments 39 process_all_comments
@@ -37,6 +48,7 @@ class SpaminatorPlugin::Spaminator @@ -37,6 +48,7 @@ class SpaminatorPlugin::Spaminator
37 finish_report 48 finish_report
38 @settings.last_run = start_time 49 @settings.last_run = start_time
39 @settings.save! 50 @settings.save!
  51 + self.class.log("Finishing Spaminator scan successfully")
40 end 52 end
41 53
42 # TODO considering run everything always 54 # TODO considering run everything always
@@ -53,6 +65,7 @@ class SpaminatorPlugin::Spaminator @@ -53,6 +65,7 @@ class SpaminatorPlugin::Spaminator
53 end 65 end
54 66
55 def process_all_comments 67 def process_all_comments
  68 + self.class.log("Starting to process all comments")
56 comments = comments_to_process 69 comments = comments_to_process
57 total = comments.count 70 total = comments.count
58 pbar = ProgressBar.new("☢ Comments", total) 71 pbar = ProgressBar.new("☢ Comments", total)
@@ -66,9 +79,11 @@ class SpaminatorPlugin::Spaminator @@ -66,9 +79,11 @@ class SpaminatorPlugin::Spaminator
66 end 79 end
67 @report.processed_comments = total 80 @report.processed_comments = total
68 pbar.finish 81 pbar.finish
  82 + self.class.log("All comments processed")
69 end 83 end
70 84
71 def process_all_people 85 def process_all_people
  86 + self.class.log("Starting to process all people")
72 people = people_to_process 87 people = people_to_process
73 total = people.count 88 total = people.count
74 pbar = ProgressBar.new("☢ People", total) 89 pbar = ProgressBar.new("☢ People", total)
@@ -79,9 +94,11 @@ class SpaminatorPlugin::Spaminator @@ -79,9 +94,11 @@ class SpaminatorPlugin::Spaminator
79 end 94 end
80 @report.processed_people = total 95 @report.processed_people = total
81 pbar.finish 96 pbar.finish
  97 + self.class.log("All people processed")
82 end 98 end
83 99
84 def process_comment(comment) 100 def process_comment(comment)
  101 + self.class.log("Processing Comment[#{comment.id.to_s}]")
85 comment = Comment.find(comment.id) 102 comment = Comment.find(comment.id)
86 comment.check_for_spam 103 comment.check_for_spam
87 @report.spams_by_content += 1 if comment.spam 104 @report.spams_by_content += 1 if comment.spam
@@ -97,6 +114,7 @@ class SpaminatorPlugin::Spaminator @@ -97,6 +114,7 @@ class SpaminatorPlugin::Spaminator
97 # person is author of more than 2 comments marked as spam 114 # person is author of more than 2 comments marked as spam
98 # → mark as spammer 115 # → mark as spammer
99 # 116 #
  117 + self.class.log("Processing Person[#{person.id.to_s}] by comments")
100 begin 118 begin
101 number_of_spam_comments = Comment.spam.where(:author_id => person.id).count 119 number_of_spam_comments = Comment.spam.where(:author_id => person.id).count
102 if number_of_spam_comments > 2 120 if number_of_spam_comments > 2
@@ -115,6 +133,7 @@ class SpaminatorPlugin::Spaminator @@ -115,6 +133,7 @@ class SpaminatorPlugin::Spaminator
115 # → disable the profile 133 # → disable the profile
116 # ? mark their comments as spam 134 # ? mark their comments as spam
117 # 135 #
  136 + self.class.log("Processing Person[#{person.id.to_s}] by network")
118 if person.created_at < (Time.now - 1.month) && 137 if person.created_at < (Time.now - 1.month) &&
119 person.friends.count == 0 && 138 person.friends.count == 0 &&
120 person.communities.count <= 1 139 person.communities.count <= 1
@@ -151,6 +170,7 @@ class SpaminatorPlugin::Spaminator @@ -151,6 +170,7 @@ class SpaminatorPlugin::Spaminator
151 end 170 end
152 171
153 def register_fail(kind, failed) 172 def register_fail(kind, failed)
  173 + self.class.log("Failed #{kind.to_s.camelize}[#{failed.id.to_s}]")
154 @report[:failed][kind.to_sym] << failed.id 174 @report[:failed][kind.to_sym] << failed.id
155 end 175 end
156 end 176 end