sensu 0.5.2 → 0.5.3

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/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