Sha256: 5dc99393c763a48ecdff1c6509461af993e8cf7608c6b155794a4fe3983c674a
Contents?: true
Size: 1.48 KB
Versions: 1
Compression:
Stored size: 1.48 KB
Contents
require 'fileutils' class Woodhouse::Dispatchers::FileDispatcher < Woodhouse::Dispatcher attr_accessor :jobs_dir, :queue_dir DEFAULT_QUEUE_DIR = '/tmp/woodhouse/queue' def initialize(config, opts = {}, &blk) super server_info = @config.server_info || {} self.queue_dir = server_info[:path] || DEFAULT_QUEUE_DIR self.jobs_dir = "#{queue_dir}/jobs" unless File.directory?(jobs_dir) # subdirectory of queue_dir @config.logger.debug "[Woodhouse initialize] Creating queue directory '#{queue_dir}'" FileUtils.mkdir_p jobs_dir end end private def deliver_job(job) filename = "#{jobs_dir}/#{job.job_id}" payload = YAML.dump(job) @config.logger.debug "[Woodhouse] Writing job #{job.exchange_name} to #{filename}" File.open(filename, 'w') {|f| f.write(YAML.dump(job)) } enqueue(filename) end def deliver_job_update(job, data) @config.logger.info "[Woodhouse job update] #{job.job_id} -- #{data.inspect}" end def enqueue(job_filename) enqueued_filename = Dir["#{queue_dir}/j-*"].max || "#{queue_dir}/j-00000000" 10.times do begin enqueued_filename.succ! File.symlink(job_filename, enqueued_filename) break rescue Errno::EEXIST # Another dispatcher beat us to this position, try again end raise "Woodhouse FileDispatcher is not designed for high load scenarios. " + "Maybe you should be using the AMQP dispatcher instead?" end enqueued_filename end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
woodhouse-1.0.0 | lib/woodhouse/dispatchers/file_dispatcher.rb |