Class: Adminix::Watcher

Inherits:
Object
  • Object
show all
Defined in:
lib/adminix/watcher.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app_service, options) ⇒ Watcher

Returns a new instance of Watcher.



44
45
46
47
48
49
50
# 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

Instance Attribute Details

#quitObject (readonly)

Returns the value of attribute quit.



5
6
7
# File 'lib/adminix/watcher.rb', line 5

def quit
  @quit
end

Class Method Details

.run!(app_service, options) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 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

Instance Method Details

#app_serviceObject



98
99
100
# File 'lib/adminix/watcher.rb', line 98

def app_service
  @app_service
end

#check_logsObject



60
61
62
# File 'lib/adminix/watcher.rb', line 60

def check_logs
  Adminix.logger.debug 'Checking logs...'
end

#check_system_loadObject



64
65
66
67
# File 'lib/adminix/watcher.rb', line 64

def check_system_load
  Adminix.logger.debug 'Checking system load...'
  @system_load_service.create_stamp
end

#execute_jobsObject



74
75
76
77
78
# 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) ⇒ Object



52
53
54
55
56
57
58
# 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_logsObject



80
81
82
83
# 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_loadObject



85
86
87
88
# 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

#serviceObject



94
95
96
# File 'lib/adminix/watcher.rb', line 94

def service
  @app_service.service
end

#stopObject



102
103
104
# File 'lib/adminix/watcher.rb', line 102

def stop
  @quit = true
end

#sync_serviceObject



69
70
71
72
# File 'lib/adminix/watcher.rb', line 69

def sync_service
  Adminix.logger.info 'Syncing service...'
  @app_service.sync
end

#wait?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/adminix/watcher.rb', line 90

def wait?
  !@running_jobs.count.zero?
end