sensu 0.8.13 → 0.8.16
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 +0 -1
- data/Gemfile.lock +2 -4
- data/lib/sensu.rb +1 -1
- data/lib/sensu/client.rb +2 -2
- data/lib/sensu/config.rb +5 -2
- data/lib/sensu/helpers.rb +7 -1
- data/lib/sensu/server.rb +18 -17
- data/sensu.gemspec +0 -1
- metadata +20 -34
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -27,7 +27,7 @@ GEM
|
|
27
27
|
eventmachine (1.0.0.beta.4)
|
28
28
|
hashie (1.2.0)
|
29
29
|
http_parser.rb (0.5.3)
|
30
|
-
json (1.6.
|
30
|
+
json (1.6.3)
|
31
31
|
rack (1.3.5)
|
32
32
|
rack-protection (1.1.4)
|
33
33
|
rack
|
@@ -46,13 +46,12 @@ GEM
|
|
46
46
|
rack (~> 1.3, >= 1.3.4)
|
47
47
|
rack-protection (~> 1.1, >= 1.1.2)
|
48
48
|
tilt (~> 1.3, >= 1.3.3)
|
49
|
-
test-unit (2.4.
|
49
|
+
test-unit (2.4.2)
|
50
50
|
thin (1.3.1)
|
51
51
|
daemons (>= 1.0.9)
|
52
52
|
eventmachine (>= 0.12.6)
|
53
53
|
rack (>= 1.0.0)
|
54
54
|
tilt (1.3.3)
|
55
|
-
uuidtools (2.1.2)
|
56
55
|
|
57
56
|
PLATFORMS
|
58
57
|
ruby
|
@@ -71,4 +70,3 @@ DEPENDENCIES
|
|
71
70
|
rake
|
72
71
|
ruby-redis-portertech
|
73
72
|
thin
|
74
|
-
uuidtools
|
data/lib/sensu.rb
CHANGED
data/lib/sensu/client.rb
CHANGED
@@ -55,7 +55,7 @@ module Sensu
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def publish_result(check)
|
58
|
-
@logger.info('[result] -- publishing check result -- ' + check.name)
|
58
|
+
@logger.info('[result] -- publishing check result -- ' + check.status.to_s + ' -- ' + check.name)
|
59
59
|
@result_queue ||= @amq.queue('results')
|
60
60
|
@result_queue.publish({
|
61
61
|
:client => @settings.client.name,
|
@@ -110,7 +110,7 @@ module Sensu
|
|
110
110
|
|
111
111
|
def setup_subscriptions
|
112
112
|
@logger.debug('[subscribe] -- setup subscriptions')
|
113
|
-
@check_queue = @amq.queue(
|
113
|
+
@check_queue = @amq.queue(String.unique, :exclusive => true)
|
114
114
|
@settings.client.subscriptions.push('uchiwa')
|
115
115
|
@settings.client.subscriptions.each do |exchange|
|
116
116
|
@logger.debug('[subscribe] -- queue binding to exchange -- ' + exchange)
|
data/lib/sensu/config.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems' if RUBY_VERSION < '1.9.0'
|
2
|
+
require 'bundler'
|
2
3
|
require 'bundler/setup'
|
3
4
|
|
4
5
|
require File.join(File.dirname(__FILE__), 'helpers')
|
@@ -8,7 +9,6 @@ gem 'eventmachine', '~> 1.0.0.beta.4'
|
|
8
9
|
require 'optparse'
|
9
10
|
require 'json'
|
10
11
|
require 'hashie'
|
11
|
-
require 'uuidtools'
|
12
12
|
require 'amqp'
|
13
13
|
require 'cabin'
|
14
14
|
require 'cabin/outputs/em-stdlib-logger'
|
@@ -26,7 +26,10 @@ module Sensu
|
|
26
26
|
invalid_config('log file is not writable: ' + log_file)
|
27
27
|
end
|
28
28
|
@logger.subscribe(Cabin::Outputs::EmStdlibLogger.new(ruby_logger))
|
29
|
-
@logger.level = options[:verbose] ?
|
29
|
+
@logger.level = options[:verbose] ? :debug : :info
|
30
|
+
Signal.trap('USR1') do
|
31
|
+
@logger.level = @logger.level == :info ? :debug : :info
|
32
|
+
end
|
30
33
|
config_file = options[:config_file] || '/etc/sensu/config.json'
|
31
34
|
if File.readable?(config_file)
|
32
35
|
begin
|
data/lib/sensu/helpers.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Hash
|
2
|
-
def symbolize_keys(item
|
2
|
+
def symbolize_keys(item=self)
|
3
3
|
case item
|
4
4
|
when Array
|
5
5
|
item.map do |i|
|
@@ -18,3 +18,9 @@ class Hash
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
21
|
+
|
22
|
+
class String
|
23
|
+
def self.unique(chars=32)
|
24
|
+
rand(36**chars).to_s(36)
|
25
|
+
end
|
26
|
+
end
|
data/lib/sensu/server.rb
CHANGED
@@ -101,7 +101,7 @@ module Sensu
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def process_result(result)
|
104
|
-
@logger.debug('[result] -- processing result
|
104
|
+
@logger.debug('[result] -- processing result -- ' + result.client + ' -- ' + result.check.name)
|
105
105
|
@redis.get('client:' + result.client).callback do |client_json|
|
106
106
|
unless client_json.nil?
|
107
107
|
client = Hashie::Mash.new(JSON.parse(client_json))
|
@@ -132,20 +132,21 @@ module Sensu
|
|
132
132
|
total_state_change = (state_changes.fdiv(20) * 100).to_i
|
133
133
|
@redis.lpop(history_key)
|
134
134
|
end
|
135
|
-
high_flap_threshold = check.high_flap_threshold || 50
|
136
|
-
low_flap_threshold = check.low_flap_threshold || 40
|
137
135
|
@redis.hget('events:' + client.name, check.name).callback do |event_json|
|
138
|
-
|
139
|
-
is_flapping =
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
136
|
+
previous_occurrence = event_json ? Hashie::Mash.new(JSON.parse(event_json)) : false
|
137
|
+
is_flapping = false
|
138
|
+
if check.key?('low_flap_threshold') && check.key?('high_flap_threshold')
|
139
|
+
was_flapping = previous_occurrence ? previous_occurrence.flapping : false
|
140
|
+
is_flapping = case
|
141
|
+
when total_state_change >= check.high_flap_threshold
|
142
|
+
true
|
143
|
+
when was_flapping && total_state_change <= check.low_flap_threshold
|
144
|
+
false
|
145
|
+
else
|
146
|
+
was_flapping
|
147
|
+
end
|
147
148
|
end
|
148
|
-
if
|
149
|
+
if previous_occurrence && check.status == 0
|
149
150
|
unless is_flapping
|
150
151
|
unless check.auto_resolve == false && !check.force_resolve
|
151
152
|
@redis.hdel('events:' + client.name, check.name).callback do
|
@@ -157,11 +158,11 @@ module Sensu
|
|
157
158
|
end
|
158
159
|
else
|
159
160
|
@logger.debug('[result] -- check is flapping -- ' + client.name + ' -- ' + check.name)
|
160
|
-
@redis.hset('events:' + client.name, check.name,
|
161
|
+
@redis.hset('events:' + client.name, check.name, previous_occurrence.merge({'flapping' => true}).to_json)
|
161
162
|
end
|
162
163
|
elsif check['status'] != 0
|
163
|
-
if
|
164
|
-
event.occurrences =
|
164
|
+
if previous_occurrence && check.status == previous_occurrence.status
|
165
|
+
event.occurrences = previous_occurrence.occurrences += 1
|
165
166
|
end
|
166
167
|
@redis.hset('events:' + client.name, check.name, {
|
167
168
|
:status => check.status,
|
@@ -201,7 +202,7 @@ module Sensu
|
|
201
202
|
@settings.checks.each_with_index do |(name, details), index|
|
202
203
|
check = Hashie::Mash.new
|
203
204
|
check.name = name
|
204
|
-
unless details.
|
205
|
+
unless details.publish == false
|
205
206
|
EM.add_timer(stagger*index) do
|
206
207
|
details.subscribers.each do |subscriber|
|
207
208
|
if subscriber.is_a?(Hash)
|
data/sensu.gemspec
CHANGED
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency("amqp", "0.7.4")
|
18
18
|
s.add_dependency("json")
|
19
19
|
s.add_dependency("hashie")
|
20
|
-
s.add_dependency("uuidtools")
|
21
20
|
s.add_dependency("cabin", "0.1.7")
|
22
21
|
s.add_dependency("ruby-redis-portertech")
|
23
22
|
s.add_dependency("rack", "~> 1.3.4")
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 16
|
10
|
+
version: 0.8.16
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sean Porter
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-12-02 00:00:00 -08:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -95,24 +95,10 @@ dependencies:
|
|
95
95
|
version: "0"
|
96
96
|
type: :runtime
|
97
97
|
version_requirements: *id005
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: uuidtools
|
100
|
-
prerelease: false
|
101
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
102
|
-
none: false
|
103
|
-
requirements:
|
104
|
-
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
hash: 3
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
version: "0"
|
110
|
-
type: :runtime
|
111
|
-
version_requirements: *id006
|
112
98
|
- !ruby/object:Gem::Dependency
|
113
99
|
name: cabin
|
114
100
|
prerelease: false
|
115
|
-
requirement: &
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
116
102
|
none: false
|
117
103
|
requirements:
|
118
104
|
- - "="
|
@@ -124,11 +110,11 @@ dependencies:
|
|
124
110
|
- 7
|
125
111
|
version: 0.1.7
|
126
112
|
type: :runtime
|
127
|
-
version_requirements: *
|
113
|
+
version_requirements: *id006
|
128
114
|
- !ruby/object:Gem::Dependency
|
129
115
|
name: ruby-redis-portertech
|
130
116
|
prerelease: false
|
131
|
-
requirement: &
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
132
118
|
none: false
|
133
119
|
requirements:
|
134
120
|
- - ">="
|
@@ -138,11 +124,11 @@ dependencies:
|
|
138
124
|
- 0
|
139
125
|
version: "0"
|
140
126
|
type: :runtime
|
141
|
-
version_requirements: *
|
127
|
+
version_requirements: *id007
|
142
128
|
- !ruby/object:Gem::Dependency
|
143
129
|
name: rack
|
144
130
|
prerelease: false
|
145
|
-
requirement: &
|
131
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
146
132
|
none: false
|
147
133
|
requirements:
|
148
134
|
- - ~>
|
@@ -154,11 +140,11 @@ dependencies:
|
|
154
140
|
- 4
|
155
141
|
version: 1.3.4
|
156
142
|
type: :runtime
|
157
|
-
version_requirements: *
|
143
|
+
version_requirements: *id008
|
158
144
|
- !ruby/object:Gem::Dependency
|
159
145
|
name: async_sinatra
|
160
146
|
prerelease: false
|
161
|
-
requirement: &
|
147
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
162
148
|
none: false
|
163
149
|
requirements:
|
164
150
|
- - ">="
|
@@ -168,11 +154,11 @@ dependencies:
|
|
168
154
|
- 0
|
169
155
|
version: "0"
|
170
156
|
type: :runtime
|
171
|
-
version_requirements: *
|
157
|
+
version_requirements: *id009
|
172
158
|
- !ruby/object:Gem::Dependency
|
173
159
|
name: thin
|
174
160
|
prerelease: false
|
175
|
-
requirement: &
|
161
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
176
162
|
none: false
|
177
163
|
requirements:
|
178
164
|
- - ">="
|
@@ -182,11 +168,11 @@ dependencies:
|
|
182
168
|
- 0
|
183
169
|
version: "0"
|
184
170
|
type: :runtime
|
185
|
-
version_requirements: *
|
171
|
+
version_requirements: *id010
|
186
172
|
- !ruby/object:Gem::Dependency
|
187
173
|
name: rake
|
188
174
|
prerelease: false
|
189
|
-
requirement: &
|
175
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
190
176
|
none: false
|
191
177
|
requirements:
|
192
178
|
- - ">="
|
@@ -196,11 +182,11 @@ dependencies:
|
|
196
182
|
- 0
|
197
183
|
version: "0"
|
198
184
|
type: :development
|
199
|
-
version_requirements: *
|
185
|
+
version_requirements: *id011
|
200
186
|
- !ruby/object:Gem::Dependency
|
201
187
|
name: em-spec
|
202
188
|
prerelease: false
|
203
|
-
requirement: &
|
189
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
204
190
|
none: false
|
205
191
|
requirements:
|
206
192
|
- - ">="
|
@@ -210,11 +196,11 @@ dependencies:
|
|
210
196
|
- 0
|
211
197
|
version: "0"
|
212
198
|
type: :development
|
213
|
-
version_requirements: *
|
199
|
+
version_requirements: *id012
|
214
200
|
- !ruby/object:Gem::Dependency
|
215
201
|
name: em-http-request
|
216
202
|
prerelease: false
|
217
|
-
requirement: &
|
203
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
218
204
|
none: false
|
219
205
|
requirements:
|
220
206
|
- - ">="
|
@@ -224,7 +210,7 @@ dependencies:
|
|
224
210
|
- 0
|
225
211
|
version: "0"
|
226
212
|
type: :development
|
227
|
-
version_requirements: *
|
213
|
+
version_requirements: *id013
|
228
214
|
description: A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model.
|
229
215
|
email:
|
230
216
|
- sean.porter@sonian.net
|