sensu 0.5.13 → 0.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/lib/sensu/client.rb +14 -5
- data/lib/sensu/config.rb +0 -14
- data/lib/sensu/server.rb +28 -42
- data/sensu.gemspec +1 -1
- metadata +2 -2
data/Gemfile.lock
CHANGED
data/lib/sensu/client.rb
CHANGED
@@ -52,19 +52,28 @@ module Sensu
|
|
52
52
|
@settings['client'][key].to_s
|
53
53
|
end
|
54
54
|
if unmatched_tokens.empty?
|
55
|
-
|
56
|
-
|
55
|
+
execute = proc do
|
56
|
+
IO.popen(command + ' 2>&1') do |io|
|
57
|
+
result['check']['output'] = io.read
|
58
|
+
end
|
59
|
+
result['check']['status'] = $?.exitstatus
|
60
|
+
result
|
61
|
+
end
|
62
|
+
publish = proc do |result|
|
57
63
|
@result_queue.publish(result.to_json)
|
58
|
-
@checks_in_progress.delete(check['name'])
|
64
|
+
@checks_in_progress.delete(result['check']['name'])
|
59
65
|
end
|
66
|
+
EM.defer(execute, publish)
|
60
67
|
else
|
61
|
-
result['check']
|
68
|
+
result['check']['status'] = 3
|
69
|
+
result['check']['output'] = 'Missing client attributes: ' + unmatched_tokens.join(', ')
|
62
70
|
@result_queue.publish(result.to_json)
|
63
71
|
@checks_in_progress.delete(check['name'])
|
64
72
|
end
|
65
73
|
end
|
66
74
|
else
|
67
|
-
result['check']
|
75
|
+
result['check']['status'] = 3
|
76
|
+
result['check']['output'] = 'Unknown check'
|
68
77
|
@result_queue.publish(result.to_json)
|
69
78
|
@checks_in_progress.delete(check['name'])
|
70
79
|
end
|
data/lib/sensu/config.rb
CHANGED
@@ -58,19 +58,5 @@ module Sensu
|
|
58
58
|
optparse.parse!(arguments)
|
59
59
|
options
|
60
60
|
end
|
61
|
-
|
62
|
-
def create_working_directory
|
63
|
-
begin
|
64
|
-
Dir.mkdir('/tmp/sensu')
|
65
|
-
rescue SystemCallError
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def purge_working_directory
|
70
|
-
Dir.foreach('/tmp/sensu') do |file|
|
71
|
-
next if file == '.' || file == '..'
|
72
|
-
File.delete('/tmp/sensu/' + file)
|
73
|
-
end
|
74
|
-
end
|
75
61
|
end
|
76
62
|
end
|
data/lib/sensu/server.rb
CHANGED
@@ -7,13 +7,13 @@ module Sensu
|
|
7
7
|
alias :redis_connection :redis
|
8
8
|
|
9
9
|
def self.run(options={})
|
10
|
+
EM.threadpool_size = 15
|
10
11
|
EM.run do
|
11
12
|
server = self.new(options)
|
12
13
|
server.setup_logging
|
13
14
|
server.setup_redis
|
14
15
|
server.setup_amqp
|
15
16
|
server.setup_keepalives
|
16
|
-
server.setup_handlers
|
17
17
|
server.setup_results
|
18
18
|
unless server.is_worker
|
19
19
|
server.setup_publisher
|
@@ -33,7 +33,6 @@ module Sensu
|
|
33
33
|
|
34
34
|
def initialize(options={})
|
35
35
|
config = Sensu::Config.new(:config_file => options[:config_file])
|
36
|
-
config.create_working_directory
|
37
36
|
@settings = config.settings
|
38
37
|
@is_worker = options[:worker]
|
39
38
|
end
|
@@ -61,39 +60,21 @@ module Sensu
|
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
file_name = '/tmp/sensu/event-' + UUIDTools::UUID.random_create.to_s
|
72
|
-
File.open(file_name, 'w') do |file|
|
73
|
-
file.write(JSON.pretty_generate(event))
|
74
|
-
end
|
75
|
-
file_name
|
76
|
-
end
|
77
|
-
handler = proc do |event_file|
|
78
|
-
EM.system('sh', '-c', @settings['handlers'][event['check']['handler']] + ' -f ' + event_file + ' 2>&1') do |output, status|
|
79
|
-
EM.debug('handled :: ' + event['check']['handler'] + ' :: ' + status.exitstatus.to_s + ' :: ' + output)
|
80
|
-
File.delete(event_file)
|
81
|
-
handlers_in_progress -= 1
|
82
|
-
end
|
83
|
-
end
|
84
|
-
EM.defer(event_file, handler)
|
85
|
-
else
|
86
|
-
@handler_queue.push(event)
|
87
|
-
end
|
88
|
-
EM.next_tick do
|
89
|
-
@handler_queue.pop(&handle)
|
63
|
+
def handle_event(event)
|
64
|
+
handler = proc do
|
65
|
+
result = Hash.new
|
66
|
+
IO.popen(@settings['handlers'][event['check']['handler']] + ' 2>&1', 'r+') do |io|
|
67
|
+
io.write(JSON.pretty_generate(event))
|
68
|
+
io.close_write
|
69
|
+
result['output'] = io.read
|
90
70
|
end
|
71
|
+
result['status'] = $?.exitstatus
|
72
|
+
result
|
91
73
|
end
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
@handler_queue.push(event)
|
74
|
+
report = proc do |result|
|
75
|
+
EM.debug('handled :: ' + event['check']['handler'] + ' :: ' + result['status'].to_s + ' :: ' + result['output'])
|
76
|
+
end
|
77
|
+
EM.defer(handler, report)
|
97
78
|
end
|
98
79
|
|
99
80
|
def process_result(result)
|
@@ -102,8 +83,8 @@ module Sensu
|
|
102
83
|
client = JSON.parse(client_json)
|
103
84
|
check = result['check']
|
104
85
|
check.merge!(@settings['checks'][check['name']]) if @settings['checks'].has_key?(check['name'])
|
105
|
-
check['handler']
|
106
|
-
event = {'client' => client, 'check' => check}
|
86
|
+
check['handler'] ||= 'default'
|
87
|
+
event = {'client' => client, 'check' => check, 'occurrences' => 1}
|
107
88
|
if check['type'] == 'metric'
|
108
89
|
handle_event(event)
|
109
90
|
else
|
@@ -114,12 +95,14 @@ module Sensu
|
|
114
95
|
event['action'] = 'resolve'
|
115
96
|
handle_event(event)
|
116
97
|
elsif check['status'] > 0
|
117
|
-
occurrences = 1
|
118
98
|
if previous_event && check['status'] == previous_event['status']
|
119
|
-
occurrences = previous_event['occurrences'] += 1
|
99
|
+
event['occurrences'] = previous_event['occurrences'] += 1
|
120
100
|
end
|
121
|
-
@redis.hset('events:' + client['name'], check['name'], {
|
122
|
-
|
101
|
+
@redis.hset('events:' + client['name'], check['name'], {
|
102
|
+
'status' => check['status'],
|
103
|
+
'output' => check['output'],
|
104
|
+
'occurrences' => event['occurrences']
|
105
|
+
}.to_json).callback do
|
123
106
|
event['action'] = 'create'
|
124
107
|
handle_event(event)
|
125
108
|
end
|
@@ -167,15 +150,18 @@ module Sensu
|
|
167
150
|
result = {'client' => client['name'], 'check' => {'name' => 'keepalive', 'issued' => Time.now.to_i}}
|
168
151
|
case
|
169
152
|
when time_since_last_check >= 180
|
170
|
-
result['check']
|
153
|
+
result['check']['status'] = 2
|
154
|
+
result['check']['output'] = 'No keep-alive sent from host in over 180 seconds'
|
171
155
|
@result_queue.publish(result.to_json)
|
172
156
|
when time_since_last_check >= 120
|
173
|
-
result['check']
|
157
|
+
result['check']['status'] = 1
|
158
|
+
result['check']['output'] = 'No keep-alive sent from host in over 120 seconds'
|
174
159
|
@result_queue.publish(result.to_json)
|
175
160
|
else
|
176
161
|
@redis.hexists('events:' + client_id, 'keepalive').callback do |exists|
|
177
162
|
if exists == 1
|
178
|
-
result['check']
|
163
|
+
result['check']['status'] = 0
|
164
|
+
result['check']['output'] = 'Keep-alive sent from host'
|
179
165
|
@result_queue.publish(result.to_json)
|
180
166
|
end
|
181
167
|
end
|
data/sensu.gemspec
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: sensu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.14
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Sean Porter
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-09-
|
14
|
+
date: 2011-09-26 00:00:00 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: amqp
|