class Eye::Group

Attributes

config[R]
hidden[R]
name[R]
processes[R]

Public Class Methods

new(name, config) click to toggle source
# File lib/eye/group.rb, line 13
def initialize(name, config)
  @name = name
  @config = config
  @processes = Eye::Utils::AliveArray.new
  @hidden = (name == '__default__')
  debug 'created'
end

Public Instance Methods

add_process(process) click to toggle source
# File lib/eye/group.rb, line 38
def add_process(process)
  @processes << process
end
app_name() click to toggle source
# File lib/eye/group.rb, line 25
def app_name
  @config[:application]
end
break_chain() click to toggle source
# File lib/eye/group.rb, line 116
def break_chain
  info 'break chain'
  scheduler_clear_pending_list
  @chain_breaker = true
end
clear() click to toggle source
# File lib/eye/group.rb, line 122
def clear
  @processes = Eye::Utils::AliveArray.new
end
debug_data() click to toggle source
# File lib/eye/group.rb, line 70
def debug_data
  {:queue => scheduler_actions_list, :chain => chain_status}
end
delete() click to toggle source
# File lib/eye/group.rb, line 99
def delete
  async_schedule :delete
  terminate
end
full_name() click to toggle source
# File lib/eye/group.rb, line 29
def full_name
  @full_name ||= "#{app_name}:#{@name}"
end
logger_tag() click to toggle source
# File lib/eye/group.rb, line 21
def logger_tag
  full_name
end
monitor() click to toggle source
# File lib/eye/group.rb, line 104
def monitor
  chain_command :monitor
end
resort_processes() click to toggle source

sort processes in name order

# File lib/eye/group.rb, line 43
def resort_processes
  @processes = @processes.sort_by(&:name)
end
restart() click to toggle source
# File lib/eye/group.rb, line 95
def restart
  chain_command :restart
end
send_command(command, *args) click to toggle source
# File lib/eye/group.rb, line 74
def send_command(command, *args)
  info "send_command: #{command}"

  case command
    when :delete
      delete *args
    when :break_chain
      break_chain *args
    else
      schedule command, *args, Eye::Reason::User.new(command)
  end
end
signal(sig) click to toggle source
# File lib/eye/group.rb, line 112
def signal(sig)
  async_schedule :signal, sig
end
start() click to toggle source
# File lib/eye/group.rb, line 87
def start
  chain_command :start
end
status_data(debug = false) click to toggle source
# File lib/eye/group.rb, line 47
def status_data(debug = false)
  plist = @processes.map{|p| p.status_data(debug) }

  h = { name: name, type: :group, subtree: plist }

  h.merge!(debug: debug_data) if debug

  # show current chain
  if current_scheduled_command
    h.update(current_command: current_scheduled_command)

    if (chain_commands = scheduler_actions_list) && chain_commands.present?
      h.update(chain_commands: chain_commands)
    end

    if @chain_processes_current && @chain_processes_count
      h.update(chain_progress: [@chain_processes_current, @chain_processes_count])
    end
  end

  h
end
stop() click to toggle source
# File lib/eye/group.rb, line 91
def stop
  async_schedule :stop
end
sub_object?(obj) click to toggle source
# File lib/eye/group.rb, line 126
def sub_object?(obj)
  @processes.include?(obj)
end
unmonitor() click to toggle source
# File lib/eye/group.rb, line 108
def unmonitor
  async_schedule :unmonitor
end
update_config(cfg) click to toggle source
# File lib/eye/group.rb, line 33
def update_config(cfg)
  @config = cfg
  @full_name = nil
end

Private Instance Methods

async_schedule(command, *args) click to toggle source
# File lib/eye/group.rb, line 132
def async_schedule(command, *args)
  info "send to all processes #{command} #{args.present? ? args*',' : nil}"

  @processes.each do |process|
    process.send_command(command, *args)
  end
end