Module: Maxwell::Agent::Work

Included in:
Host::Service
Defined in:
lib/maxwell/agent/work.rb

Defined Under Namespace

Classes: MissingRequiredAttributeError

Constant Summary collapse

REQUIRED_ATTRIBUTES =
[:name, :work_class]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.from_json(json) ⇒ Object



20
21
22
# File 'lib/maxwell/agent/work.rb', line 20

def self.from_json(json)
  JSON.parse(json)
end

.included(base) ⇒ Object

WORK_ATTRIBUTES = [:last_run, :frequency, :perform_at].

concat(REQUIRED_ATTRIBUTES)


10
11
12
# File 'lib/maxwell/agent/work.rb', line 10

def self.included(base)
  base.send(:include, DynamicAttributes)
end

.load(json) ⇒ Object



15
16
17
18
# File 'lib/maxwell/agent/work.rb', line 15

def self.load(json)
  work = from_json(json)
  work.delete('klass').constantize.new.load(work)
end

Instance Method Details

#expected_next_runObject



61
62
63
64
65
66
67
# File 'lib/maxwell/agent/work.rb', line 61

def expected_next_run
  case
    when perform_at               then perform_at + last_run.to_i
    when (last_run && frequency)  then last_run + frequency
    else                          Time.new
  end
end

#frequencyObject



49
50
51
# File 'lib/maxwell/agent/work.rb', line 49

def frequency
  super || self.frequency = 30.minutes
end

#generate_rankObject



69
70
71
# File 'lib/maxwell/agent/work.rb', line 69

def generate_rank
  expected_next_run.to_i
end

#last_runObject



45
46
47
# File 'lib/maxwell/agent/work.rb', line 45

def last_run
  super || self.last_run = Time.new(0)
end

#load(attrs = {}) ⇒ Object



24
25
26
27
28
29
# File 'lib/maxwell/agent/work.rb', line 24

def load(attrs={})
  attrs.each do |key, value|
    send("#{key}=", value )
  end
  self
end

#performObject



73
74
75
# File 'lib/maxwell/agent/work.rb', line 73

def perform
  work_class.perform(*arguments)
end

#to_jsonObject



31
32
33
34
35
36
# File 'lib/maxwell/agent/work.rb', line 31

def to_json
  verify_required_attributes!
  instance_variables.inject({}) do |result, attr|
    result.merge(attr.to_s.gsub('@','') => instance_variable_get(attr))
  end.merge({klass: self.class}).to_json
end

#verify_required_attributes!Object



38
39
40
41
42
43
# File 'lib/maxwell/agent/work.rb', line 38

def verify_required_attributes!
  REQUIRED_ATTRIBUTES.each do |required_attr|
    raise MissingRequiredAttributeError,
      "Must set #{required_attr}" unless send(required_attr)
  end
end

#work_now?Boolean

Returns:

  • (Boolean)


53
54
55
56
57
58
59
# File 'lib/maxwell/agent/work.rb', line 53

def work_now?
  case
    when perform_at then perform_at_less_than_now?
    when frequency  then stale?
    else                 true
  end
end