class Adminix::Watcher

Attributes

quit[R]

Public Class Methods

new(app_service, options) click to toggle source
# File lib/adminix/watcher.rb, line 44
def initialize(app_service, options)
  @options = options
  @running_jobs = []
  @app_service = app_service
  @system_load_service = Services::SystemLoadService.new(service)
  @quit = false
end
run!(app_service, options) click to toggle source
# File lib/adminix/watcher.rb, line 7
def self.run!(app_service, options)
  Adminix.logger.info "Starting watcher PID is #{Process.pid}"
  EM.run do
    w = Adminix.watcher = Adminix::Watcher.new(app_service, options)
    c = Adminix.config
    p = c.watcher_period

    if c.web_debugger_enabled?
      Adminix.logger.info "Web debugger is running on port #{c.server_port}"
      EM.start_server('0.0.0.0', c.server_port, Web::Router)
    end
    if Adminix.config.watch_system_load?
      EM.add_periodic_timer(p[:check_system_load]) { w.perform(:check_system_load) }
      EM.add_periodic_timer(p[:send_system_load]) { w.perform(:send_system_load) }
    end
    if Adminix.config.watch_logs?
      EM.add_periodic_timer(p[:send_logs]) { w.perform(:send_logs) }
      Adminix.config.log_files.each do |path|
        EventMachine.file_tail(path, Adminix::Helpers::LogReader)
      end
    end
    if c.credentials_defined?
      EM.add_periodic_timer(p[:sync_service]) { w.perform(:sync_service) }
    end
    EM.add_periodic_timer(p[:execute_jobs]) { w.perform(:execute_jobs) }
    EM.add_periodic_timer(2) do
      if w.quit && !w.wait?
        Adminix.logger.info 'Stopping watcher...'
        EM.stop
      end
    end

    trap('TERM') { w.stop }
    trap('INT') { w.stop }
  end
end

Public Instance Methods

app_service() click to toggle source
# File lib/adminix/watcher.rb, line 98
def app_service
  @app_service
end
check_logs() click to toggle source
# File lib/adminix/watcher.rb, line 60
def check_logs
  Adminix.logger.debug 'Checking logs...'
end
check_system_load() click to toggle source
# File lib/adminix/watcher.rb, line 64
def check_system_load
  Adminix.logger.debug 'Checking system load...'
  @system_load_service.create_stamp
end
execute_jobs() click to toggle source
# File lib/adminix/watcher.rb, line 74
def execute_jobs
  return unless @app_service.service.new_jobs?
  Adminix.logger.info 'Executing jobs...'
  @app_service.run_jobs
end
perform(job) click to toggle source
# File lib/adminix/watcher.rb, line 52
def perform(job)
  return if @running_jobs.include?(job) || @quit

  @running_jobs << job
  send(job)
  @running_jobs.delete(job)
end
send_logs() click to toggle source
# File lib/adminix/watcher.rb, line 80
def send_logs
  Adminix.logger.debug 'Adding logs to sending queue...'
  @app_service.allow_sending_logs
end
send_system_load() click to toggle source
# File lib/adminix/watcher.rb, line 85
def send_system_load
  Adminix.logger.debug 'Adding system load to sending queue...'
  @app_service.allow_sending_system_load
end
service() click to toggle source
# File lib/adminix/watcher.rb, line 94
def service
  @app_service.service
end
stop() click to toggle source
# File lib/adminix/watcher.rb, line 102
def stop
  @quit = true
end
sync_service() click to toggle source
# File lib/adminix/watcher.rb, line 69
def sync_service
  Adminix.logger.info 'Syncing service...'
  @app_service.sync
end
wait?() click to toggle source
# File lib/adminix/watcher.rb, line 90
def wait?
  !@running_jobs.count.zero?
end