Sha256: ade60292141518036e935936f79c3b631835b20bc3fb2f58c9b7c60bffb8424a
Contents?: true
Size: 1.93 KB
Versions: 1
Compression:
Stored size: 1.93 KB
Contents
module QPush module Server module JobHelpers def mark_success @failed = false @total_success += 1 end def mark_failed @failed = true @total_fail += 1 end def retry_job? @retry_max > @total_fail end def perform_job? @start_at < Time.now.to_i && @cron.empty? end def delay_job? (@start_at > Time.now.to_i && @cron.empty?) || cron_job? end def cron_job? @start_at < Time.now.to_i && !@cron.empty? end def dead_job? @total_fail >= @retry_max end def cron_at CronParser.new(@cron).next(Time.now).to_i rescue => e raise ServerError, e.message end def delay_until @cron.empty? ? @start_at : cron_at end def retry_at Time.now.to_i + ((@total_fail**4) + 15 + (rand(30) * (@total_fail + 1))) end end class Job < QPush::Job::Base extend Forwardable include QPush::Server::JobHelpers include ObjectValidator::Validate def initialize(options) super @api = ApiWrapper.new(self) end def_delegators :@api, :queue, :execute, :perform, :delay, :retry, :morgue, :setup end class JobValidator include ObjectValidator::Validator validates :klass, with: { proc: proc { |j| Object.const_defined?(j.klass) }, msg: 'has not been defined' } validates :cron, with: { proc: proc { |j| j.cron.empty? ? true : CronParser.new(j.cron) }, msg: 'is not a valid expression' } validates :id, type: String validates :args, type: Hash validates :created_at, type: Integer validates :start_at, type: Integer validates :retry_max, type: Integer validates :total_fail, type: Integer validates :total_success, type: Integer end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
qpush-0.1.4 | lib/qpush/server/jobs.rb |