Class: Rearview::MetricsValidatorTask

Inherits:
Object
  • Object
show all
Includes:
Celluloid, Logger
Defined in:
lib/rearview/metrics_validator_task.rb

Defined Under Namespace

Classes: StatsTaskError

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logger

#logger

Constructor Details

#initialize(cron_expression, start = true) ⇒ MetricsValidatorTask

Returns a new instance of MetricsValidatorTask.



10
11
12
13
# File 'lib/rearview/metrics_validator_task.rb', line 10

def initialize(cron_expression,start=true)
  @cron_expression = cron_expression
  schedule if start
end

Instance Attribute Details

#cron_expressionObject (readonly)

Returns the value of attribute cron_expression.



8
9
10
# File 'lib/rearview/metrics_validator_task.rb', line 8

def cron_expression
  @cron_expression
end

Instance Method Details

#alert_validation_failed(job) ⇒ Object



49
50
51
52
# File 'lib/rearview/metrics_validator_task.rb', line 49

def alert_validation_failed(job)
  logger.debug "#{self} alerting on invalid metrics for #{job.id}"
  Rearview::MetricsValidationMailer.validation_failed_email(job.user.email,job).deliver
end

#runObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rearview/metrics_validator_task.rb', line 32

def run
  logger.debug "#{self} run"
  validator = Rearview::MetricsValidator.new({ attributes: [:metrics], cache: true })
  ActiveRecord::Base.connection_pool.with_connection do
    Rearview::Job.schedulable.load.each do |job|
      validator.validate_each(job,:metrics,job.metrics)
      unless job.errors[:metrics].empty?
        alert_validation_failed(job)
      end
    end
  end
rescue
  logger.error "#{self} run failed: #{$!}\n#{$@.join("\n")}"
ensure
  schedule
end

#scheduleObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rearview/metrics_validator_task.rb', line 15

def schedule
  logger.debug "#{self} schedule"
  if ActiveRecord::Base.connection_pool.active_connection?
    ActiveRecord::Base.connection_pool.release_connection
  end
  delay = if cron_expression == '0 * * * * ?'
            60.0
          else
            Rearview::CronHelper.next_valid_time_after(cron_expression)
          end
  logger.info "#{self} scheduled to run next in #{delay}s"
  if(@timer)
    @timer.cancel
  end
  @timer = after(delay) { self.run }
end