sensu 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +3 -1
- data/lib/sensu/api.rb +11 -6
- data/lib/sensu/client.rb +37 -28
- data/lib/sensu/config.rb +15 -11
- data/lib/sensu/helpers.rb +17 -15
- data/lib/sensu/server.rb +69 -57
- data/lib/sensu.rb +1 -1
- data/sensu.gemspec +2 -1
- data/sensu.windows +3 -2
- metadata +27 -14
- data/sensu-logo.png +0 -0
data/Gemfile.lock
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sensu (0.
|
4
|
+
sensu (0.7.0)
|
5
5
|
amqp (= 0.7.4)
|
6
6
|
async_sinatra
|
7
7
|
em-hiredis
|
8
8
|
em-syslog
|
9
|
+
hashie
|
9
10
|
json
|
10
11
|
thin
|
11
12
|
uuidtools
|
@@ -29,6 +30,7 @@ GEM
|
|
29
30
|
callsite (~> 0.0.5)
|
30
31
|
eventmachine
|
31
32
|
eventmachine (0.12.10)
|
33
|
+
hashie (1.1.0)
|
32
34
|
hiredis (0.3.2)
|
33
35
|
json (1.6.1)
|
34
36
|
mime-types (1.16)
|
data/lib/sensu/api.rb
CHANGED
@@ -9,7 +9,7 @@ module Sensu
|
|
9
9
|
def self.run(options={})
|
10
10
|
EM.run do
|
11
11
|
self.setup(options)
|
12
|
-
self.run!(:port => @settings
|
12
|
+
self.run!(:port => @settings.api.port)
|
13
13
|
|
14
14
|
Signal.trap('INT') do
|
15
15
|
EM.stop
|
@@ -24,8 +24,8 @@ module Sensu
|
|
24
24
|
def self.setup(options={})
|
25
25
|
config = Sensu::Config.new(options)
|
26
26
|
@settings = config.settings
|
27
|
-
set :redis, EM::Hiredis.connect('redis://' + @settings
|
28
|
-
connection = AMQP.connect(
|
27
|
+
set :redis, EM::Hiredis.connect('redis://' + @settings.redis.host + ':' + @settings.redis.port.to_s)
|
28
|
+
connection = AMQP.connect(@settings.rabbitmq.to_hash.symbolize_keys)
|
29
29
|
set :amq, MQ.new(connection)
|
30
30
|
end
|
31
31
|
|
@@ -68,8 +68,8 @@ module Sensu
|
|
68
68
|
unless events_exist == 0
|
69
69
|
conn.redis.hgetall('events:' + client).callback do |events|
|
70
70
|
Hash[*events].keys.each do |check_name|
|
71
|
-
check = {
|
72
|
-
conn.amq.queue('results').publish({
|
71
|
+
check = {:name => check_name, :issued => Time.now.to_i, :status => 0, :output => 'Client is being removed'}
|
72
|
+
conn.amq.queue('results').publish({:client => client, :check => check}.to_json)
|
73
73
|
end
|
74
74
|
EM.add_timer(5) do
|
75
75
|
conn.redis.srem('clients', client)
|
@@ -160,7 +160,12 @@ module Sensu
|
|
160
160
|
}'
|
161
161
|
conn.redis.set('client:test', client).callback do
|
162
162
|
conn.redis.sadd('clients', 'test').callback do
|
163
|
-
conn.redis.hset('events:test', 'test', {
|
163
|
+
conn.redis.hset('events:test', 'test', {
|
164
|
+
:status => 2,
|
165
|
+
:output => 'CRITICAL',
|
166
|
+
:flapping => false,
|
167
|
+
:occurrences => 1
|
168
|
+
}.to_json).callback do
|
164
169
|
conn.redis.set('stash:test/test', '{"key": "value"}').callback do
|
165
170
|
status 201
|
166
171
|
body nil
|
data/lib/sensu/client.rb
CHANGED
@@ -23,69 +23,78 @@ module Sensu
|
|
23
23
|
def initialize(options={})
|
24
24
|
config = Sensu::Config.new(:config_file => options[:config_file])
|
25
25
|
@settings = config.settings
|
26
|
-
@checks_in_progress = Array.new
|
27
26
|
end
|
28
27
|
|
29
28
|
def setup_amqp
|
30
|
-
connection = AMQP.connect(
|
29
|
+
connection = AMQP.connect(@settings.rabbitmq.to_hash.symbolize_keys)
|
31
30
|
@amq = MQ.new(connection)
|
32
|
-
@keepalive_queue = @amq.queue('keepalives')
|
33
|
-
@result_queue = @amq.queue('results')
|
34
31
|
end
|
35
32
|
|
36
33
|
def setup_keepalives
|
37
|
-
|
34
|
+
keepalive_queue = @amq.queue('keepalives')
|
35
|
+
@settings.client.timestamp = Time.now.to_i
|
36
|
+
keepalive_queue.publish(@settings.client.to_json)
|
38
37
|
EM.add_periodic_timer(30) do
|
39
|
-
@
|
38
|
+
@settings.client.timestamp = Time.now.to_i
|
39
|
+
keepalive_queue.publish(@settings.client.to_json)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def publish_result(check)
|
44
|
+
@result_queue ||= @amq.queue('results')
|
45
|
+
@result_queue.publish({
|
46
|
+
:client => @settings.client.name,
|
47
|
+
:check => check.to_hash
|
48
|
+
}.to_json)
|
49
|
+
end
|
50
|
+
|
43
51
|
def execute_check(check)
|
44
|
-
|
45
|
-
if @settings
|
46
|
-
unless @checks_in_progress.include?(check
|
47
|
-
@checks_in_progress.push(check
|
52
|
+
@checks_in_progress ||= Array.new
|
53
|
+
if @settings.checks.key?(check.name)
|
54
|
+
unless @checks_in_progress.include?(check.name)
|
55
|
+
@checks_in_progress.push(check.name)
|
48
56
|
unmatched_tokens = Array.new
|
49
|
-
command = @settings
|
57
|
+
command = @settings.checks[check.name].command.gsub(/:::(.*?):::/) do
|
50
58
|
key = $1.to_s
|
51
|
-
unmatched_tokens.push(key) unless @settings
|
52
|
-
@settings
|
59
|
+
unmatched_tokens.push(key) unless @settings.client.key?(key)
|
60
|
+
@settings.client[key].to_s
|
53
61
|
end
|
54
62
|
if unmatched_tokens.empty?
|
55
63
|
execute = proc do
|
56
64
|
IO.popen(command + ' 2>&1') do |io|
|
57
|
-
|
65
|
+
check.output = io.read
|
58
66
|
end
|
59
|
-
|
60
|
-
result
|
67
|
+
check.status = $?.exitstatus
|
61
68
|
end
|
62
69
|
publish = proc do |result|
|
63
|
-
|
64
|
-
@checks_in_progress.delete(
|
70
|
+
publish_result(check)
|
71
|
+
@checks_in_progress.delete(check.name)
|
65
72
|
end
|
66
73
|
EM.defer(execute, publish)
|
67
74
|
else
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
75
|
+
check.status = 3
|
76
|
+
check.output = 'Missing client attributes: ' + unmatched_tokens.join(', ')
|
77
|
+
check.internal = true
|
78
|
+
publish_result(check)
|
79
|
+
@checks_in_progress.delete(check.name)
|
72
80
|
end
|
73
81
|
end
|
74
82
|
else
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
83
|
+
check.status = 3
|
84
|
+
check.output = 'Unknown check'
|
85
|
+
check.internal = true
|
86
|
+
publish_result(check)
|
87
|
+
@checks_in_progress.delete(check.name)
|
79
88
|
end
|
80
89
|
end
|
81
90
|
|
82
91
|
def setup_subscriptions
|
83
92
|
@check_queue = @amq.queue(UUIDTools::UUID.random_create.to_s, :exclusive => true)
|
84
|
-
@settings
|
93
|
+
@settings.client.subscriptions.each do |exchange|
|
85
94
|
@check_queue.bind(@amq.fanout(exchange))
|
86
95
|
end
|
87
96
|
@check_queue.subscribe do |check_json|
|
88
|
-
check = JSON.parse(check_json)
|
97
|
+
check = Hashie::Mash.new(JSON.parse(check_json))
|
89
98
|
execute_check(check)
|
90
99
|
end
|
91
100
|
end
|
data/lib/sensu/config.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems' if RUBY_VERSION < '1.9.0'
|
2
2
|
require 'optparse'
|
3
3
|
require 'json'
|
4
|
+
require 'hashie'
|
4
5
|
require 'uuidtools'
|
5
6
|
require 'amqp'
|
6
7
|
require 'em/syslog'
|
@@ -12,29 +13,29 @@ module Sensu
|
|
12
13
|
|
13
14
|
def initialize(options={})
|
14
15
|
config_file = options[:config_file] || '/etc/sensu/config.json'
|
15
|
-
@settings = JSON.parse(File.open(config_file, 'r').read)
|
16
|
+
@settings = Hashie::Mash.new(JSON.parse(File.open(config_file, 'r').read))
|
16
17
|
validate_config
|
17
18
|
end
|
18
19
|
|
19
20
|
def validate_config
|
20
|
-
@settings
|
21
|
-
unless
|
21
|
+
@settings.checks.each do |name, details|
|
22
|
+
unless details.interval.is_a?(Integer) && details.interval > 0
|
22
23
|
raise 'configuration invalid, missing interval for check ' + name
|
23
24
|
end
|
24
|
-
unless
|
25
|
+
unless details.command.is_a?(String)
|
25
26
|
raise 'configuration invalid, missing command for check ' + name
|
26
27
|
end
|
27
|
-
unless
|
28
|
+
unless details.subscribers.is_a?(Array) && details.subscribers.count > 0
|
28
29
|
raise 'configuration invalid, missing subscribers for check ' + name
|
29
30
|
end
|
30
31
|
end
|
31
|
-
unless @settings
|
32
|
+
unless @settings.client.name.is_a?(String)
|
32
33
|
raise 'configuration invalid, client must have a name'
|
33
34
|
end
|
34
|
-
unless @settings
|
35
|
+
unless @settings.client.address.is_a?(String)
|
35
36
|
raise 'configuration invalid, client must have an address (ip or hostname)'
|
36
37
|
end
|
37
|
-
unless @settings
|
38
|
+
unless @settings.client.subscriptions.is_a?(Array) && @settings.client.subscriptions.count > 0
|
38
39
|
raise 'configuration invalid, client must have subscriptions'
|
39
40
|
end
|
40
41
|
end
|
@@ -46,9 +47,12 @@ module Sensu
|
|
46
47
|
puts opts
|
47
48
|
exit
|
48
49
|
end
|
49
|
-
|
50
|
-
|
51
|
-
options[:worker] =
|
50
|
+
current_process = $0.split('/').last
|
51
|
+
if current_process == 'sensu-server' || current_process == 'rake_test_loader.rb'
|
52
|
+
options[:worker] = false
|
53
|
+
opts.on('-w', '--worker', 'Only consume jobs, no check publishing (default: false)') do
|
54
|
+
options[:worker] = true
|
55
|
+
end
|
52
56
|
end
|
53
57
|
options[:config_file] = nil
|
54
58
|
opts.on('-c', '--config FILE', 'Sensu JSON config FILE (default: /etc/sensu/config.json)') do |file|
|
data/lib/sensu/helpers.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
class Hash
|
2
|
+
def symbolize_keys(item = self)
|
3
|
+
case item
|
4
|
+
when Array
|
5
|
+
item.map do |i|
|
6
|
+
symbolize_keys(i)
|
7
|
+
end
|
8
|
+
when Hash
|
9
|
+
Hash[
|
10
|
+
item.map do |key, value|
|
11
|
+
new_key = key.is_a?(String) ? key.to_sym : key
|
12
|
+
new_value = symbolize_keys(value)
|
13
|
+
[new_key, new_value]
|
14
|
+
end
|
15
|
+
]
|
16
|
+
else
|
17
|
+
item
|
6
18
|
end
|
7
|
-
when Hash
|
8
|
-
Hash[
|
9
|
-
item.map do |key, value|
|
10
|
-
k = key.is_a?(String) ? key.to_sym : key
|
11
|
-
v = symbolize_keys(value)
|
12
|
-
[k,v]
|
13
|
-
end
|
14
|
-
]
|
15
|
-
else
|
16
|
-
item
|
17
19
|
end
|
18
20
|
end
|
data/lib/sensu/server.rb
CHANGED
@@ -38,24 +38,24 @@ module Sensu
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def setup_logging
|
41
|
-
EM.syslog_setup(@settings
|
41
|
+
EM.syslog_setup(@settings.syslog.host, @settings.syslog.port)
|
42
42
|
end
|
43
43
|
|
44
44
|
def setup_redis
|
45
|
-
@redis = EM::Hiredis.connect('redis://' + @settings
|
45
|
+
@redis = EM::Hiredis.connect('redis://' + @settings.redis.host + ':' + @settings.redis.port.to_s)
|
46
46
|
end
|
47
47
|
|
48
48
|
def setup_amqp
|
49
|
-
connection = AMQP.connect(
|
49
|
+
connection = AMQP.connect(@settings.rabbitmq.to_hash.symbolize_keys)
|
50
50
|
@amq = MQ.new(connection)
|
51
51
|
end
|
52
52
|
|
53
53
|
def setup_keepalives
|
54
54
|
@keepalive_queue = @amq.queue('keepalives')
|
55
55
|
@keepalive_queue.subscribe do |keepalive_json|
|
56
|
-
|
57
|
-
@redis.set('client:' +
|
58
|
-
@redis.sadd('clients',
|
56
|
+
client_id = JSON.parse(keepalive_json)['name']
|
57
|
+
@redis.set('client:' + client_id, keepalive_json).callback do
|
58
|
+
@redis.sadd('clients', client_id)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -63,7 +63,7 @@ module Sensu
|
|
63
63
|
def handle_event(event)
|
64
64
|
handler = proc do
|
65
65
|
output = ''
|
66
|
-
IO.popen(@settings
|
66
|
+
IO.popen(@settings.handlers[event.check.handler] + ' 2>&1', 'r+') do |io|
|
67
67
|
io.write(event.to_json)
|
68
68
|
io.close_write
|
69
69
|
output = io.read
|
@@ -79,20 +79,21 @@ module Sensu
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def process_result(result)
|
82
|
-
@redis.get('client:' + result
|
82
|
+
@redis.get('client:' + result.client).callback do |client_json|
|
83
83
|
unless client_json.nil?
|
84
|
-
client = JSON.parse(client_json)
|
85
|
-
check = result[
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
84
|
+
client = Hashie::Mash.new(JSON.parse(client_json))
|
85
|
+
check = @settings.checks.key?(result.check.name) ? result.check.merge(@settings.checks[result.check.name]) : result.check
|
86
|
+
check.handler ||= 'default'
|
87
|
+
event = Hashie::Mash.new({
|
88
|
+
:client => client,
|
89
|
+
:check => check,
|
90
|
+
:occurrences => 1
|
91
|
+
})
|
92
|
+
if check.type == 'metric'
|
92
93
|
handle_event(event)
|
93
94
|
else
|
94
|
-
history_key = 'history:' + client
|
95
|
-
@redis.rpush(history_key, check
|
95
|
+
history_key = 'history:' + client.name + ':' + check.name
|
96
|
+
@redis.rpush(history_key, check.status).callback do
|
96
97
|
@redis.lrange(history_key, -21, -1).callback do |history|
|
97
98
|
total_state_change = 0
|
98
99
|
unless history.count < 21
|
@@ -109,40 +110,45 @@ module Sensu
|
|
109
110
|
total_state_change = (state_changes.fdiv(20) * 100).to_i
|
110
111
|
@redis.lpop(history_key)
|
111
112
|
end
|
112
|
-
high_flap_threshold = check
|
113
|
-
low_flap_threshold = check
|
114
|
-
@redis.hget('events:' + client
|
115
|
-
previous_event = event_json ? JSON.parse(event_json) : false
|
116
|
-
|
117
|
-
|
113
|
+
high_flap_threshold = check.high_flap_threshold || 50
|
114
|
+
low_flap_threshold = check.low_flap_threshold || 40
|
115
|
+
@redis.hget('events:' + client.name, check.name).callback do |event_json|
|
116
|
+
previous_event = event_json ? Hashie::Mash.new(JSON.parse(event_json)) : false
|
117
|
+
is_flapping = previous_event ? previous_event.flapping : false
|
118
|
+
is_flapping = case
|
118
119
|
when total_state_change >= high_flap_threshold
|
119
120
|
true
|
120
|
-
when
|
121
|
+
when is_flapping && total_state_change <= low_flap_threshold
|
121
122
|
false
|
122
123
|
else
|
123
|
-
|
124
|
+
is_flapping
|
124
125
|
end
|
125
|
-
if previous_event && check
|
126
|
-
unless
|
127
|
-
@redis.hdel('events:' + client
|
128
|
-
|
129
|
-
|
126
|
+
if previous_event && check.status == 0
|
127
|
+
unless is_flapping
|
128
|
+
@redis.hdel('events:' + client.name, check.name).callback do
|
129
|
+
unless check.internal
|
130
|
+
event.action = 'resolve'
|
131
|
+
handle_event(event)
|
132
|
+
end
|
130
133
|
end
|
131
134
|
else
|
132
|
-
@redis.hset('events:' + client
|
135
|
+
@redis.hset('events:' + client.name, check.name, previous_event.merge({'flapping' => true}).to_json)
|
133
136
|
end
|
134
137
|
elsif check['status'] != 0
|
135
|
-
if previous_event && check
|
136
|
-
event
|
138
|
+
if previous_event && check.status == previous_event.status
|
139
|
+
event.occurrences = previous_event.occurrences += 1
|
137
140
|
end
|
138
|
-
@redis.hset('events:' + client
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
141
|
+
@redis.hset('events:' + client.name, check.name, {
|
142
|
+
:status => check.status,
|
143
|
+
:output => check.output,
|
144
|
+
:flapping => is_flapping,
|
145
|
+
:occurrences => event.occurrences
|
143
146
|
}.to_json).callback do
|
144
|
-
|
145
|
-
|
147
|
+
unless check.internal
|
148
|
+
event.check.flapping = is_flapping
|
149
|
+
event.action = 'create'
|
150
|
+
handle_event(event)
|
151
|
+
end
|
146
152
|
end
|
147
153
|
end
|
148
154
|
end
|
@@ -156,7 +162,7 @@ module Sensu
|
|
156
162
|
def setup_results
|
157
163
|
@result_queue = @amq.queue('results')
|
158
164
|
@result_queue.subscribe do |result_json|
|
159
|
-
result = JSON.parse(result_json)
|
165
|
+
result = Hashie::Mash.new(JSON.parse(result_json))
|
160
166
|
process_result(result)
|
161
167
|
end
|
162
168
|
end
|
@@ -164,13 +170,13 @@ module Sensu
|
|
164
170
|
def setup_publisher(options={})
|
165
171
|
exchanges = Hash.new
|
166
172
|
stagger = options[:test] ? 0 : 7
|
167
|
-
@settings
|
173
|
+
@settings.checks.each_with_index do |(name, details), index|
|
168
174
|
EM.add_timer(stagger*index) do
|
169
|
-
details
|
175
|
+
details.subscribers.each do |exchange|
|
170
176
|
if exchanges[exchange].nil?
|
171
177
|
exchanges[exchange] = @amq.fanout(exchange)
|
172
178
|
end
|
173
|
-
interval = options[:test] ? 0.5 : details
|
179
|
+
interval = options[:test] ? 0.5 : details.interval
|
174
180
|
EM.add_periodic_timer(interval) do
|
175
181
|
exchanges[exchange].publish({'name' => name, 'issued' => Time.now.to_i}.to_json)
|
176
182
|
EM.debug('name="Published Check" event_id=server action="Published check ' + name + ' to the ' + exchange + ' exchange"')
|
@@ -185,24 +191,30 @@ module Sensu
|
|
185
191
|
@redis.smembers('clients').callback do |clients|
|
186
192
|
clients.each do |client_id|
|
187
193
|
@redis.get('client:' + client_id).callback do |client_json|
|
188
|
-
client = JSON.parse(client_json)
|
189
|
-
time_since_last_check = Time.now.to_i - client
|
190
|
-
result = {
|
194
|
+
client = Hashie::Mash.new(JSON.parse(client_json))
|
195
|
+
time_since_last_check = Time.now.to_i - client.timestamp
|
196
|
+
result = Hashie::Mash.new({
|
197
|
+
:client => client.name,
|
198
|
+
:check => {
|
199
|
+
:name => 'keepalive',
|
200
|
+
:issued => Time.now.to_i
|
201
|
+
}
|
202
|
+
})
|
191
203
|
case
|
192
204
|
when time_since_last_check >= 180
|
193
|
-
result
|
194
|
-
result
|
195
|
-
|
205
|
+
result.check.status = 2
|
206
|
+
result.check.output = 'No keep-alive sent from host in over 180 seconds'
|
207
|
+
@result_queue.publish(result.to_json)
|
196
208
|
when time_since_last_check >= 120
|
197
|
-
result
|
198
|
-
result
|
199
|
-
|
209
|
+
result.check.status = 1
|
210
|
+
result.check.output = 'No keep-alive sent from host in over 120 seconds'
|
211
|
+
@result_queue.publish(result.to_json)
|
200
212
|
else
|
201
213
|
@redis.hexists('events:' + client_id, 'keepalive').callback do |exists|
|
202
214
|
if exists == 1
|
203
|
-
result
|
204
|
-
result
|
205
|
-
|
215
|
+
result.check.status = 0
|
216
|
+
result.check.output = 'Keep-alive sent from host'
|
217
|
+
@result_queue.publish(result.to_json)
|
206
218
|
end
|
207
219
|
end
|
208
220
|
end
|
data/lib/sensu.rb
CHANGED
data/sensu.gemspec
CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.add_dependency("amqp", "0.7.4")
|
16
16
|
s.add_dependency("json")
|
17
|
+
s.add_dependency("hashie")
|
17
18
|
s.add_dependency("uuidtools")
|
18
19
|
s.add_dependency("em-syslog")
|
19
20
|
s.add_dependency("em-hiredis")
|
@@ -25,7 +26,7 @@ Gem::Specification.new do |s|
|
|
25
26
|
s.add_development_dependency('em-ventually')
|
26
27
|
s.add_development_dependency('rest-client')
|
27
28
|
|
28
|
-
s.files = `git ls-files`.split("\n").reject {|f| f =~ /(dist|test)/}
|
29
|
+
s.files = `git ls-files`.split("\n").reject {|f| f =~ /(dist|test|png)/}
|
29
30
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
30
31
|
s.require_paths = ["lib"]
|
31
32
|
end
|
data/sensu.windows
CHANGED
@@ -21,10 +21,11 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_dependency("eventmachine", "1.0.0.beta.4.1")
|
22
22
|
s.add_dependency("amqp", "0.7.4")
|
23
23
|
s.add_dependency("json")
|
24
|
+
s.add_dependency("hashie")
|
24
25
|
s.add_dependency("uuidtools")
|
25
26
|
s.add_dependency("em-syslog")
|
26
27
|
|
27
|
-
s.files = `git ls-files`.split("\n").reject {|f| f =~ /(dist|test)/}
|
28
|
-
s.executables =
|
28
|
+
s.files = `git ls-files`.split("\n").reject {|f| f =~ /(dist|test|server|api|png)/}
|
29
|
+
s.executables = "sensu-client"
|
29
30
|
s.require_paths = ["lib"]
|
30
31
|
end
|
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: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 1
|
10
|
+
version: 0.7.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sean Porter
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
|
-
name:
|
53
|
+
name: hashie
|
54
54
|
prerelease: false
|
55
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
56
56
|
none: false
|
@@ -64,7 +64,7 @@ dependencies:
|
|
64
64
|
type: :runtime
|
65
65
|
version_requirements: *id003
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
|
-
name:
|
67
|
+
name: uuidtools
|
68
68
|
prerelease: false
|
69
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
70
70
|
none: false
|
@@ -78,7 +78,7 @@ dependencies:
|
|
78
78
|
type: :runtime
|
79
79
|
version_requirements: *id004
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
|
-
name: em-
|
81
|
+
name: em-syslog
|
82
82
|
prerelease: false
|
83
83
|
requirement: &id005 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
@@ -92,7 +92,7 @@ dependencies:
|
|
92
92
|
type: :runtime
|
93
93
|
version_requirements: *id005
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
95
|
+
name: em-hiredis
|
96
96
|
prerelease: false
|
97
97
|
requirement: &id006 !ruby/object:Gem::Requirement
|
98
98
|
none: false
|
@@ -106,7 +106,7 @@ dependencies:
|
|
106
106
|
type: :runtime
|
107
107
|
version_requirements: *id006
|
108
108
|
- !ruby/object:Gem::Dependency
|
109
|
-
name:
|
109
|
+
name: async_sinatra
|
110
110
|
prerelease: false
|
111
111
|
requirement: &id007 !ruby/object:Gem::Requirement
|
112
112
|
none: false
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
type: :runtime
|
121
121
|
version_requirements: *id007
|
122
122
|
- !ruby/object:Gem::Dependency
|
123
|
-
name:
|
123
|
+
name: thin
|
124
124
|
prerelease: false
|
125
125
|
requirement: &id008 !ruby/object:Gem::Requirement
|
126
126
|
none: false
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
segments:
|
132
132
|
- 0
|
133
133
|
version: "0"
|
134
|
-
type: :
|
134
|
+
type: :runtime
|
135
135
|
version_requirements: *id008
|
136
136
|
- !ruby/object:Gem::Dependency
|
137
|
-
name:
|
137
|
+
name: rake
|
138
138
|
prerelease: false
|
139
139
|
requirement: &id009 !ruby/object:Gem::Requirement
|
140
140
|
none: false
|
@@ -148,7 +148,7 @@ dependencies:
|
|
148
148
|
type: :development
|
149
149
|
version_requirements: *id009
|
150
150
|
- !ruby/object:Gem::Dependency
|
151
|
-
name:
|
151
|
+
name: minitest
|
152
152
|
prerelease: false
|
153
153
|
requirement: &id010 !ruby/object:Gem::Requirement
|
154
154
|
none: false
|
@@ -162,7 +162,7 @@ dependencies:
|
|
162
162
|
type: :development
|
163
163
|
version_requirements: *id010
|
164
164
|
- !ruby/object:Gem::Dependency
|
165
|
-
name:
|
165
|
+
name: em-ventually
|
166
166
|
prerelease: false
|
167
167
|
requirement: &id011 !ruby/object:Gem::Requirement
|
168
168
|
none: false
|
@@ -175,6 +175,20 @@ dependencies:
|
|
175
175
|
version: "0"
|
176
176
|
type: :development
|
177
177
|
version_requirements: *id011
|
178
|
+
- !ruby/object:Gem::Dependency
|
179
|
+
name: rest-client
|
180
|
+
prerelease: false
|
181
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
182
|
+
none: false
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
hash: 3
|
187
|
+
segments:
|
188
|
+
- 0
|
189
|
+
version: "0"
|
190
|
+
type: :development
|
191
|
+
version_requirements: *id012
|
178
192
|
description: A server monitoring framework using the publish-subscribe model
|
179
193
|
email:
|
180
194
|
- sean.porter@sonian.net
|
@@ -203,7 +217,6 @@ files:
|
|
203
217
|
- lib/sensu/config.rb
|
204
218
|
- lib/sensu/helpers.rb
|
205
219
|
- lib/sensu/server.rb
|
206
|
-
- sensu-logo.png
|
207
220
|
- sensu.gemspec
|
208
221
|
- sensu.windows
|
209
222
|
has_rdoc: true
|
data/sensu-logo.png
DELETED
Binary file
|