diff --git a/r2/r2/controllers/validator/validator.py b/r2/r2/controllers/validator/validator.py index b00974ca8..0b7467075 100644 --- a/r2/r2/controllers/validator/validator.py +++ b/r2/r2/controllers/validator/validator.py @@ -564,8 +564,10 @@ class VCaptcha(Validator): def run(self, iden, solution): if (not c.user_is_loggedin or c.user.needs_captcha()): - if not captcha.valid_solution(iden, solution): + valid_captcha = captcha.valid_solution(iden, solution) + if not valid_captcha: self.set_error(errors.BAD_CAPTCHA) + g.stats.action_event_count("captcha", valid_captcha) class VUser(Validator): def run(self, password = None): diff --git a/r2/r2/lib/stats.py b/r2/r2/lib/stats.py index 478292f64..598166428 100644 --- a/r2/r2/lib/stats.py +++ b/r2/r2/lib/stats.py @@ -41,6 +41,20 @@ class Stats: else: return None + def action_count(self, counter_name, name, delta=1): + counter = self.get_counter(counter_name) + if counter: + from pylons import request + counter.increment('%s.%s' % (request.environ["pylons.routes_dict"]["action"], name), delta=delta) + + def action_event_count(self, event_name, state=None, delta=1, true_name="success", false_name="fail"): + counter_name = 'event.%s' % event_name + if state == True: + self.action_count(counter_name, true_name, delta=delta) + elif state == False: + self.action_count(counter_name, false_name, delta=delta) + self.action_count(counter_name, 'total', delta=delta) + def cache_count(self, name, delta=1): counter = self.get_counter('cache') if counter and random.random() < self.CACHE_SAMPLE_RATE: