Module: Sensu::Daemon
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Utilities
#deep_merge, #random_uuid, #redact_sensitive, #retry_until_true, #testing?
Instance Attribute Details
#state ⇒ Object
Returns the value of attribute state.
33
34
35
|
# File 'lib/sensu/daemon.rb', line 33
def state
@state
end
|
Instance Method Details
#initialize(options = {}) ⇒ Object
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/sensu/daemon.rb', line 35
def initialize(options={})
@state = :initializing
@timers = {
:run => Array.new
}
setup_logger(options)
load_settings(options)
load_extensions(options)
setup_process(options)
end
|
#load_extensions(options = {}) ⇒ Object
70
71
72
73
74
75
76
77
78
|
# File 'lib/sensu/daemon.rb', line 70
def load_extensions(options={})
@extensions = Extensions.get(options)
log_concerns(@extensions.warnings)
extension_settings = @settings.to_hash.dup
@extensions.all.each do |extension|
extension.logger = @logger
extension.settings = extension_settings
end
end
|
#load_settings(options = {}) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/sensu/daemon.rb', line 58
def load_settings(options={})
@settings = Settings.get(options)
log_concerns(@settings.warnings)
failures = @settings.validate
unless failures.empty?
@logger.fatal('invalid settings')
log_concerns(failures, :fatal)
@logger.fatal('SENSU NOT RUNNING!')
exit 2
end
end
|
#log_concerns(concerns = [], level = :warn) ⇒ Object
51
52
53
54
55
56
|
# File 'lib/sensu/daemon.rb', line 51
def log_concerns(concerns=[], level=:warn)
concerns.each do |concern|
message = concern.delete(:message)
@logger.send(level, message, redact_sensitive(concern))
end
end
|
#pause ⇒ Object
93
94
95
|
# File 'lib/sensu/daemon.rb', line 93
def pause
@state = :paused
end
|
#resume ⇒ Object
97
98
99
|
# File 'lib/sensu/daemon.rb', line 97
def resume
@state = :running
end
|
#setup_logger(options = {}) ⇒ Object
46
47
48
49
|
# File 'lib/sensu/daemon.rb', line 46
def setup_logger(options={})
@logger = Logger.get(options)
@logger.setup_signal_traps
end
|
#setup_process(options) ⇒ Object
80
81
82
83
84
85
86
87
|
# File 'lib/sensu/daemon.rb', line 80
def setup_process(options)
if options[:daemonize]
daemonize
end
if options[:pid_file]
write_pid(options[:pid_file])
end
end
|
#setup_redis ⇒ Object
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
# File 'lib/sensu/daemon.rb', line 152
def setup_redis
@logger.debug('connecting to redis', {
:settings => @settings[:redis]
})
@redis = Redis.connect(@settings[:redis])
@redis.on_error do |error|
@logger.fatal('redis connection error', {
:error => error.to_s
})
stop
end
@redis.before_reconnect do
unless testing?
@logger.warn('reconnecting to redis')
pause
end
end
@redis.after_reconnect do
@logger.info('reconnected to redis')
resume
end
end
|
#setup_signal_traps ⇒ Object
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/sensu/daemon.rb', line 107
def setup_signal_traps
@signals = Array.new
STOP_SIGNALS.each do |signal|
Signal.trap(signal) do
@signals << signal
end
end
EM::PeriodicTimer.new(1) do
signal = @signals.shift
if STOP_SIGNALS.include?(signal)
@logger.warn('received signal', {
:signal => signal
})
stop
end
end
end
|
#setup_transport ⇒ Object
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/sensu/daemon.rb', line 125
def setup_transport
transport_name = @settings[:transport][:name] || 'rabbitmq'
transport_settings = @settings[transport_name]
@logger.debug('connecting to transport', {
:name => transport_name,
:settings => transport_settings
})
Transport.logger = @logger
@transport = Transport.connect(transport_name, transport_settings)
@transport.on_error do |error|
@logger.fatal('transport connection error', {
:error => error.to_s
})
stop
end
@transport.before_reconnect do
unless testing?
@logger.warn('reconnecting to transport')
pause
end
end
@transport.after_reconnect do
@logger.info('reconnected to transport')
resume
end
end
|
#start ⇒ Object
89
90
91
|
# File 'lib/sensu/daemon.rb', line 89
def start
@state = :running
end
|
#stop ⇒ Object
101
102
103
104
105
|
# File 'lib/sensu/daemon.rb', line 101
def stop
@state = :stopped
@logger.warn('stopping reactor')
EM::stop_event_loop
end
|