Sha256: c629dfd80c33daccbf6fb41fed1f9806efca47317ccad703f4641339ca817203

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

module RestFtpDaemon
  class JobWorker < Worker

    def initialize wid
      # Generic worker initialize
      super

      # Timeout config
      @timeout = (Settings.transfer.timeout rescue nil) || DEFAULT_WORKER_TIMEOUT

      # Start main loop
      log_info "JobWorker starting", ["timeout: #{@timeout}"]
      start
    end

  protected

    def work
      # Wait for a job to come into the queue
      worker_status WORKER_STATUS_WAITING
      #log_info "waiting"
      job = $queue.pop

      # Prepare the job for processing
      worker_status WORKER_STATUS_RUNNING, "job [#{job.id}]"
      worker_jid job.id
      job.wid = Thread.current.thread_variable_get :wid

      # Processs this job protected by a timeout
      Timeout.timeout(@timeout, RestFtpDaemon::JobTimeout) do
        job.process
      end

      # Processing done
      worker_status WORKER_STATUS_FINISHED, "job [#{job.id}]"
      worker_jid nil
      job.wid = nil

      # Increment total processed jobs count
      $queue.counter_inc :jobs_processed

    rescue RestFtpDaemon::JobTimeout => ex
      log_error "JOB TIMED OUT", ex.backtrace
      worker_status WORKER_STATUS_TIMEOUT
      worker_jid nil
      job.wid = nil

      job.oops_you_stop_now ex unless job.nil?
      sleep 1

    rescue StandardError => ex
      log_error "JOB UNHDNALED EXCEPTION: #{ex.message}", ex.backtrace
      worker_status WORKER_STATUS_CRASHED
      job.oops_after_crash ex unless job.nil?
      sleep 1

    else
      # Clean job status
      job.wid = nil
    end


    if Settings.newrelic_enabled?
      add_transaction_tracer :work,       category: :task
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rest-ftp-daemon-0.231.1 lib/rest-ftp-daemon/worker_job.rb
rest-ftp-daemon-0.231.0 lib/rest-ftp-daemon/worker_job.rb