Class: Eye::Trigger::StartingGuard

Inherits:
Eye::Trigger show all
Defined in:
lib/eye/trigger/starting_guard.rb

Constant Summary

Constants inherited from Eye::Trigger

TYPES

Instance Attribute Summary

Attributes inherited from Eye::Trigger

#message, #options, #process

Instance Method Summary collapse

Methods inherited from Eye::Trigger

create, #defer, #exec_proc, #filter_transition, get_class, #inspect, #logger_sub_tag, #logger_tag, name_and_class, #notify, register, requires, #run_in_process_context, validate!

Methods included from Dsl::Validation

included

Constructor Details

#initialize(*args) ⇒ StartingGuard

Returns a new instance of StartingGuard.



15
16
17
18
19
20
# File 'lib/eye/trigger/starting_guard.rb', line 15

def initialize(*args)
  super

  @retry_count = 0
  @reretry_count = 0
end

Instance Method Details

#check(transition) ⇒ Object



22
23
24
# File 'lib/eye/trigger/starting_guard.rb', line 22

def check(transition)
  check_start if transition.to_name == :starting
end

#check_startObject

Raises:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/eye/trigger/starting_guard.rb', line 26

def check_start
  @retry_count += 1
  condition = defer { exec_proc(:should) }

  if condition
    info "ok, process ready to start #{condition.inspect}"
    @retry_count = 0
    @reretry_count = 0
    return
  else
    info 'false executed condition'
  end

  new_time = nil
  if every
    if times
      if @retry_count < times
        new_time = Time.now + every
        process.schedule(in: every, command: :conditional_start,
                         by: :starting_guard, reason: 'starting_guard, retry start')
      else
        @retry_count = 0
        @reretry_count += 1
        if retry_in && (!retry_times || (@reretry_count < retry_times))
          new_time = Time.now + retry_in
          process.schedule(in: retry_in, command: :conditional_start,
                           by: :starting_guard, reason: 'restarting_guard, retry start')
        end
      end
    else
      new_time = Time.now + every
      process.schedule(in: every, command: :conditional_start,
                       by: :starting_guard, reason: 'starting_guard, retry start')
    end
  end

  retry_msg = new_time ? ", retry at '#{Eye::Utils.human_time2(new_time.to_i)}'" : ''
  process.switch :unmonitoring, by: :starting_guard, reason: "failed condition#{retry_msg}"

  raise Eye::Process::StateError, 'starting_guard, refused to start'
end