Sha256: aadc0ad63ecd1049f0dfe1ef197bb87a16520e5a26b2b41760430fdad8214500

Contents?: true

Size: 1002 Bytes

Versions: 9

Compression:

Stored size: 1002 Bytes

Contents

module Writefully
  module Tools
    class Dispatcher
      include Celluloid

      attr_reader :job

      def initialize
        every 1.second do 
          async.heartbeat
        end
      end

      def get_job_data
        Writefully.redis.with { |c| c.lpop 'jobs' }
      end

      def heartbeat
        @job      = Marshal.load(get_job_data)
        run_job if job_valid?
      end

      def run_job
        if    retry_valid?   then retry_job
        elsif job_valid?     then dispatch
        end
      end

      def dispatch
        Celluloid::Actor[job[:worker]].perform(job[:message])
      end

      def retry_job
        Celluloid::Actor[:retryer].retry(job)
      end

      def is_retry?
        job_valid? and job[:message].has_key?(:tries) and job[:message].has_key?(:run)
      end

      def job_valid?
        job.has_key?(:worker) and job.has_key?(:message)
      end

      def retry_valid?
        is_retry? and (job[:message][:run] == false)
      end

    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
writefully-0.6.9 lib/writefully/tools/dispatcher.rb
writefully-0.6.7 lib/writefully/tools/dispatcher.rb
writefully-0.6.6 lib/writefully/tools/dispatcher.rb
writefully-0.6.5 lib/writefully/tools/dispatcher.rb
writefully-0.6.4 lib/writefully/tools/dispatcher.rb
writefully-0.6.3 lib/writefully/tools/dispatcher.rb
writefully-0.6.2 lib/writefully/tools/dispatcher.rb
writefully-0.5.1 lib/writefully/tools/dispatcher.rb
writefully-0.5.0 lib/writefully/tools/dispatcher.rb