sensu 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/sensu/api.rb CHANGED
@@ -87,15 +87,11 @@ module Sensu
87
87
  conn.redis.exists('events:' + client).callback do |events_exist|
88
88
  unless events_exist == 0
89
89
  conn.redis.hgetall('events:' + client).callback do |events|
90
- Hash[*events].keys.each do |check|
91
- conn.amq.queue('results').publish({
92
- 'check' => check,
93
- 'client' => client,
94
- 'status' => 0,
95
- 'output' => 'client is being removed...'
96
- }.to_json)
90
+ Hash[*events].keys.each do |check_name|
91
+ check = {'name' => check_name, 'issued' => Time.now.to_i, 'status' => 0, 'output' => 'client is being removed...'}
92
+ conn.amq.queue('results').publish({'client' => client, 'check' => check}.to_json)
97
93
  end
98
- EM.add_timer(10) do
94
+ EM.add_timer(8) do
99
95
  conn.redis.srem('clients', client)
100
96
  conn.redis.del('events:' + client)
101
97
  conn.redis.del('client:' + client)
@@ -117,15 +113,15 @@ module Sensu
117
113
  end
118
114
 
119
115
  apost '/test/client' do
120
- client = '{
116
+ attributes = '{
121
117
  "name": "test",
122
- "address": "127.0.0.1",
118
+ "address": "localhost",
123
119
  "subscriptions": [
124
120
  "foo",
125
121
  "bar"
126
122
  ]
127
123
  }'
128
- conn.redis.set('client:test', client).callback do
124
+ conn.redis.set('client:test', attributes).callback do
129
125
  conn.redis.sadd('clients', 'test')
130
126
  status 201
131
127
  body ''
@@ -133,7 +129,7 @@ module Sensu
133
129
  end
134
130
 
135
131
  apost '/test/event' do
136
- conn.redis.hset('events:test', 'test', {'status' => 2, 'output' => 'CRITICAL :: test'}.to_json).callback do
132
+ conn.redis.hset('events:test', 'test', {'status' => 2, 'output' => 'CRITICAL :: test', 'occurrences' => 1}.to_json).callback do
137
133
  status 201
138
134
  body ''
139
135
  end
data/lib/sensu/client.rb CHANGED
@@ -43,6 +43,7 @@ module Sensu
43
43
  if @settings['checks'].has_key?(check['name'])
44
44
  unless @checks_in_progress.include?(check['name'])
45
45
  @checks_in_progress.push(check['name'])
46
+ result = {'client' => @settings['client']['name'], 'check' => check}
46
47
  unmatched_tokens = Array.new
47
48
  command = @settings['checks'][check['name']]['command'].gsub(/:::(.*?):::/) do
48
49
  key = $1.to_s
@@ -51,31 +52,19 @@ module Sensu
51
52
  end
52
53
  if unmatched_tokens.empty?
53
54
  EM.system('sh', '-c', command + ' 2>&1') do |output, status|
54
- @result_queue.publish({
55
- 'check' => check['name'],
56
- 'client' => @settings['client']['name'],
57
- 'status' => status.exitstatus,
58
- 'output' => output
59
- }.to_json)
55
+ result['check'].merge!({'status' => status.exitstatus, 'output' => output})
56
+ @result_queue.publish(result.to_json)
60
57
  @checks_in_progress.delete(check['name'])
61
58
  end
62
59
  else
63
- @result_queue.publish({
64
- 'check' => check['name'],
65
- 'client' => @settings['client']['name'],
66
- 'status' => 3,
67
- 'output' => 'Missing client attributes: ' + unmatched_tokens.join(', ')
68
- }.to_json)
60
+ result['check'].merge!({'status' => 3, 'output' => 'Missing client attributes: ' + unmatched_tokens.join(', ')})
61
+ @result_queue.publish(result.to_json)
69
62
  @checks_in_progress.delete(check['name'])
70
63
  end
71
64
  end
72
65
  else
73
- @result_queue.publish({
74
- 'check' => check['name'],
75
- 'client' => @settings['client']['name'],
76
- 'status' => 3,
77
- 'output' => 'Unknown check'
78
- }.to_json)
66
+ result['check'].merge!({'status' => 3, 'output' => 'Unknown check'})
67
+ @result_queue.publish(result.to_json)
79
68
  @checks_in_progress.delete(check['name'])
80
69
  end
81
70
  end
data/lib/sensu/server.rb CHANGED
@@ -98,30 +98,38 @@ module Sensu
98
98
  @redis.get('client:' + result['client']).callback do |client_json|
99
99
  unless client_json.nil?
100
100
  client = JSON.parse(client_json)
101
- check = {'name' => result['check']}
102
- check.merge!(@settings['checks'][result['check']]) if @settings['checks'].has_key?(result['check'])
101
+ check = result['check']
102
+ check.merge!(@settings['checks'][check['name']]) if @settings['checks'].has_key?(check['name'])
103
103
  check['handler'] = 'default' unless check['handler']
104
104
  event = {
105
105
  'client' => client,
106
- 'check' => check,
107
- 'status' => result['status'],
108
- 'output' => result['output']
106
+ 'check' => check
109
107
  }
110
- if check['handler'] == 'metric'
108
+ if check['type'] == 'metric'
111
109
  handle_event(event)
112
110
  else
113
111
  if result['status'] == 0
114
- @redis.hexists('events:' + client['name'], result['check']).callback do |exists|
112
+ @redis.hexists('events:' + client['name'], check['name']).callback do |exists|
115
113
  if exists == 1
116
- @redis.hdel('events:' + client['name'], result['check'])
114
+ @redis.hdel('events:' + client['name'], check['name'])
117
115
  event['action'] = 'resolve'
118
116
  handle_event(event)
119
117
  end
120
118
  end
121
119
  else
122
- @redis.hset('events:' + client['name'], result['check'], {'status' => result['status'], 'output' => result['output']}.to_json).callback do
123
- event['action'] = 'create'
124
- handle_event(event)
120
+ @redis.hget('events:' + client['name'], check['name']).callback do |event_json|
121
+ occurrences = 1
122
+ unless event_json.nil?
123
+ previous_event = JSON.parse(event_json)
124
+ if previous_event['status'] == check['status']
125
+ occurrences = previous_event['occurrences'] += 1
126
+ end
127
+ end
128
+ @redis.hset('events:' + client['name'], check['name'], {'status' => check['status'], 'output' => check['output'], 'occurrences' => occurrences}.to_json).callback do
129
+ event['occurrences'] = occurrences
130
+ event['action'] = 'create'
131
+ handle_event(event)
132
+ end
125
133
  end
126
134
  end
127
135
  end
@@ -138,7 +146,7 @@ module Sensu
138
146
  if exchanges[exchange].nil?
139
147
  exchanges[exchange] = @amq.fanout(exchange)
140
148
  end
141
- exchanges[exchange].publish({'name' => check['name']}.to_json)
149
+ exchanges[exchange].publish({'name' => check['name'], 'issued' => Time.now.to_i}.to_json)
142
150
  EM.debug('published :: ' + exchange + ' :: ' + check['name'])
143
151
  end
144
152
  end
@@ -146,10 +154,10 @@ module Sensu
146
154
 
147
155
  def setup_populator
148
156
  check_queue = @amq.queue('checks')
149
- @settings['checks'].each_with_index do |(name, info), index|
157
+ @settings['checks'].each_with_index do |(name, details), index|
150
158
  EM.add_timer(7*index) do
151
- EM.add_periodic_timer(info['interval']) do
152
- check_queue.publish({'name' => name, 'subscribers' => info['subscribers']}.to_json)
159
+ EM.add_periodic_timer(details['interval']) do
160
+ check_queue.publish({'name' => name, 'subscribers' => details['subscribers']}.to_json)
153
161
  end
154
162
  end
155
163
  end
@@ -163,30 +171,19 @@ module Sensu
163
171
  @redis.get('client:' + client_id).callback do |client_json|
164
172
  client = JSON.parse(client_json)
165
173
  time_since_last_check = Time.now.to_i - client['timestamp']
174
+ result = {'client' => client['name'], 'check' => {'name' => 'keepalive', 'issued' => Time.now.to_i}}
166
175
  case
167
176
  when time_since_last_check >= 180
168
- result_queue.publish({
169
- 'check' => 'keepalive',
170
- 'client' => client['name'],
171
- 'status' => 2,
172
- 'output' => 'No keep-alive sent from host in over 180 seconds'
173
- }.to_json)
177
+ result['check'].merge!({'status' => 2, 'output' => 'No keep-alive sent from host in over 180 seconds'})
178
+ result_queue.publish(result.to_json)
174
179
  when time_since_last_check >= 120
175
- result_queue.publish({
176
- 'check' => 'keepalive',
177
- 'client' => client['name'],
178
- 'status' => 1,
179
- 'output' => 'No keep-alive sent from host in over 120 seconds'
180
- }.to_json)
180
+ result['check'].merge!({'status' => 1, 'output' => 'No keep-alive sent from host in over 120 seconds'})
181
+ result_queue.publish(result.to_json)
181
182
  else
182
183
  @redis.hexists('events:' + client_id, 'keepalive').callback do |exists|
183
184
  if exists == 1
184
- result_queue.publish({
185
- 'check' => 'keepalive',
186
- 'client' => client['name'],
187
- 'status' => 0,
188
- 'output' => 'Keep-alive sent from host'
189
- }.to_json)
185
+ result['check'].merge!({'status' => 0, 'output' => 'Keep-alive sent from host'})
186
+ result_queue.publish(result.to_json)
190
187
  end
191
188
  end
192
189
  end
data/sensu.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "sensu"
3
- s.version = "0.5.2"
3
+ s.version = "0.5.3"
4
4
  s.authors = ["Sean Porter", "Justin Kolberg"]
5
5
  s.email = ["sean.porter@sonian.net", "justin.kolberg@sonian.net"]
6
6
  s.homepage = "https://github.com/sonian/sensu"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sensu
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.2
5
+ version: 0.5.3
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-09 00:00:00 Z
14
+ date: 2011-09-15 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: amqp