Sha256: cbaa6f6b1331cd407a7fadc5bf0741e82daea6be1935a5df7b50af73cd709558

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

gem 'state_machine'
require 'state_machine'

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 :crushed 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 :on => :crushed, :do => :on_crushed
    after_transition any => :unmonitored, :do => :on_unmonitored
    after_transition any-:up => :up, :do => :on_up
    after_transition :up => any-:up, :do => :from_up
    after_transition any => any, :do => :log_transition
    after_transition any => any, :do => :upd_for_triggers
  end

  def on_crushed
    schedule :check_crush, 'crushed'
  end

  def on_unmonitored
    self.flapping = false
    self.pid = nil
  end

  def on_up
    add_watchers
    add_childs
  end

  def from_up
    remove_watchers
    remove_childs
  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 ? "(#{@state_reason})" : nil}"
  end

  def upd_for_triggers(transition)
    check_triggers
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
eye-0.2 lib/eye/process/states.rb
eye-0.1.11 lib/eye/process/states.rb