Sha256: fdb8774718e653ae05e4f54a18a1692747c9df8b1a88a2b045935e83cbdb27f5

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

module SimpleWorker
  class EventMonitor < AbstractListener

    attr_reader :start_time, :latest_time, :expired_tasks

    def initialize(start_time = Time.now)
      @start_time = start_time
      @latest_time = start_time
      @expired_tasks = []
      @event_tracker = {}
    end

    def on_start(jobid)
      @jobid = jobid
    end

    def on_node_start(hostname)
      @event_tracker[hostname] = latest_time
    end

    def on_node_stop(hostname)
      @event_tracker.delete(hostname)
    end

    def on_task_start(hostname, task)
      @event_tracker[hostname] = latest_time
      @event_tracker[task] = latest_time
    end

    def on_task_stop(hostname, task)
      @event_tracker[hostname] = latest_time
      @event_tracker.delete(task)
    end

    def on_task_expire(hostname, task)
      @expired_tasks << {:task => task, :hostname => hostname, :time => latest_time}
      @event_tracker.delete(task)
    end

    def done?(remaining)
      (remaining == 0) && @event_tracker.empty?
    end

    def update(meth, *args)
      @latest_time = Time.now
      super(meth, *args)
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
simpleworker-0.1.1 lib/simpleworker/event_monitor.rb
simpleworker-0.1.0 lib/simpleworker/event_monitor.rb