Sha256: 2fc9d5edc0336d49f703a2b36072f7ff40a69b211f42d3ca1b73645ab65d9975

Contents?: true

Size: 1.94 KB

Versions: 9

Compression:

Stored size: 1.94 KB

Contents

require 'state_machine'
require 'state_machine/version'

class Eye::Process

  # do transition
  def switch(name, reason = nil)
    @state_reason = reason || last_scheduled_reason
    self.send("#{name}!")
  end

  state_machine :state, :initial => :unmonitored do
    state :unmonitored, :up, :down
    state :starting, :stopping, :restarting

    event :starting do
      transition [:unmonitored, :down] => :starting
    end

    event :already_running do
      transition [:unmonitored, :down, :up] => :up
    end

    event :started do
      transition :starting => :up
    end

    event :crashed do
      transition [:starting, :restarting, :up] => :down
    end

    event :stopping do
      transition [:up, :restarting] => :stopping
    end

    event :stopped do
      transition :stopping => :down
    end

    event :cant_kill do
      transition :stopping => :up
    end

    event :restarting do
      transition [:unmonitored, :up, :down] => :restarting
    end

    event :restarted do
      transition :restarting => :up
    end

    event :unmonitoring do
      transition any => :unmonitored
    end

    after_transition any => any, :do => :log_transition
    after_transition any => any, :do => :check_triggers

    after_transition any => :unmonitored, :do => :on_unmonitored

    after_transition any-:up => :up, :do => :add_watchers
    after_transition :up => any-:up, :do => :remove_watchers

    after_transition any-:up => :up, :do => :add_childs
    after_transition any => [:unmonitored, :down], :do => :remove_childs

    after_transition :on => :crashed, :do => :on_crashed
  end

  def on_crashed
    schedule :check_crash, Eye::Reason.new(:crashed)
  end

  def on_unmonitored
    self.pid = nil
  end

  def log_transition(transition)
    @states_history.push transition.to_name, @state_reason
    info "switch :#{transition.event} [:#{transition.from_name} => :#{transition.to_name}] #{@state_reason ? "(reason: #{@state_reason})" : nil}"
  end

end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
reel-eye-0.5.1 lib/eye/process/states.rb
eye-0.5.1 lib/eye/process/states.rb
reel-eye-0.5 lib/eye/process/states.rb
eye-0.5 lib/eye/process/states.rb
eye-0.4.2 lib/eye/process/states.rb
reel-eye-0.4.1 lib/eye/process/states.rb
eye-0.4.1 lib/eye/process/states.rb
reel-eye-0.4 lib/eye/process/states.rb
eye-0.4 lib/eye/process/states.rb