sensu 0.8.7 → 0.8.9
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 +16 -9
- data/Rakefile +0 -6
- data/bin/sensu-api +0 -2
- data/bin/sensu-server +0 -2
- data/lib/sensu.rb +1 -1
- data/lib/sensu/api.rb +18 -25
- data/lib/sensu/config.rb +1 -0
- data/lib/sensu/server.rb +3 -3
- data/sensu.gemspec +5 -3
- metadata +59 -28
- data/sensu.windows +0 -31
data/Gemfile.lock
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sensu (0.8.
|
4
|
+
sensu (0.8.9)
|
5
5
|
amqp (= 0.7.4)
|
6
6
|
async_sinatra
|
7
7
|
cabin (= 0.1.7)
|
8
|
-
|
8
|
+
eventmachine (~> 1.0.0.beta.4)
|
9
9
|
hashie
|
10
10
|
json
|
11
11
|
rack (~> 1.3.4)
|
12
|
+
ruby-redis
|
12
13
|
thin
|
13
14
|
uuidtools
|
14
15
|
|
15
16
|
GEM
|
16
17
|
remote: http://rubygems.org/
|
17
18
|
specs:
|
19
|
+
addressable (2.2.6)
|
18
20
|
amqp (0.7.4)
|
19
21
|
eventmachine
|
20
22
|
async_sinatra (0.5.0)
|
@@ -25,21 +27,23 @@ GEM
|
|
25
27
|
json
|
26
28
|
daemons (1.1.4)
|
27
29
|
diff-lcs (1.1.3)
|
28
|
-
em-
|
29
|
-
|
30
|
+
em-http-request (0.3.0)
|
31
|
+
addressable (>= 2.0.0)
|
32
|
+
escape_utils
|
33
|
+
eventmachine (>= 0.12.9)
|
30
34
|
em-spec (0.2.5)
|
31
35
|
bacon
|
32
36
|
eventmachine
|
33
37
|
rspec (~> 2.6.0)
|
34
38
|
test-unit
|
35
|
-
|
39
|
+
escape_utils (0.2.4)
|
40
|
+
eventmachine (1.0.0.beta.4)
|
36
41
|
hashie (1.2.0)
|
37
|
-
hiredis (0.3.2)
|
38
42
|
json (1.6.1)
|
39
43
|
rack (1.3.5)
|
40
44
|
rack-protection (1.1.4)
|
41
45
|
rack
|
42
|
-
rake (0.9.2)
|
46
|
+
rake (0.9.2.2)
|
43
47
|
rspec (2.6.0)
|
44
48
|
rspec-core (~> 2.6.0)
|
45
49
|
rspec-expectations (~> 2.6.0)
|
@@ -48,12 +52,14 @@ GEM
|
|
48
52
|
rspec-expectations (2.6.0)
|
49
53
|
diff-lcs (~> 1.1.2)
|
50
54
|
rspec-mocks (2.6.0)
|
55
|
+
ruby-redis (0.0.2)
|
56
|
+
eventmachine
|
51
57
|
sinatra (1.3.1)
|
52
58
|
rack (~> 1.3, >= 1.3.4)
|
53
59
|
rack-protection (~> 1.1, >= 1.1.2)
|
54
60
|
tilt (~> 1.3, >= 1.3.3)
|
55
|
-
test-unit (2.4.
|
56
|
-
thin (1.
|
61
|
+
test-unit (2.4.1)
|
62
|
+
thin (1.3.1)
|
57
63
|
daemons (>= 1.0.9)
|
58
64
|
eventmachine (>= 0.12.6)
|
59
65
|
rack (>= 1.0.0)
|
@@ -64,6 +70,7 @@ PLATFORMS
|
|
64
70
|
ruby
|
65
71
|
|
66
72
|
DEPENDENCIES
|
73
|
+
em-http-request
|
67
74
|
em-spec
|
68
75
|
rake
|
69
76
|
sensu!
|
data/Rakefile
CHANGED
data/bin/sensu-api
CHANGED
data/bin/sensu-server
CHANGED
data/lib/sensu.rb
CHANGED
data/lib/sensu/api.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'config')
|
2
2
|
require 'sinatra/async'
|
3
|
-
require '
|
3
|
+
require 'redis'
|
4
4
|
|
5
5
|
module Sensu
|
6
6
|
class API < Sinatra::Base
|
@@ -24,7 +24,7 @@ module Sensu
|
|
24
24
|
@settings = config.settings
|
25
25
|
$logger = config.logger
|
26
26
|
$logger.debug('[setup] -- connecting to redis')
|
27
|
-
$redis = EM
|
27
|
+
$redis = EM.connect(@settings.redis.host, @settings.redis.port, Redis::Client)
|
28
28
|
$logger.debug('[setup] -- connecting to rabbitmq')
|
29
29
|
connection = AMQP.connect(@settings.rabbitmq.to_hash.symbolize_keys)
|
30
30
|
$amq = MQ.new(connection)
|
@@ -69,21 +69,13 @@ module Sensu
|
|
69
69
|
adelete '/client/:name' do |client|
|
70
70
|
$logger.debug('[client] -- ' + request.ip + ' -- DELETE -- request for client -- ' + client)
|
71
71
|
$redis.sismember('clients', client).callback do |client_exists|
|
72
|
-
|
73
|
-
$redis.
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
EM.add_timer(5) do
|
81
|
-
$redis.srem('clients', client)
|
82
|
-
$redis.del('events:' + client)
|
83
|
-
$redis.del('client:' + client)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
else
|
72
|
+
if client_exists
|
73
|
+
$redis.hgetall('events:' + client).callback do |events|
|
74
|
+
events.keys.each do |check_name|
|
75
|
+
check = {:name => check_name, :issued => Time.now.to_i, :status => 0, :output => 'Client is being removed'}
|
76
|
+
$amq.queue('results').publish({:client => client, :check => check}.to_json)
|
77
|
+
end
|
78
|
+
EM.add_timer(5) do
|
87
79
|
$redis.srem('clients', client)
|
88
80
|
$redis.del('events:' + client)
|
89
81
|
$redis.del('client:' + client)
|
@@ -105,7 +97,7 @@ module Sensu
|
|
105
97
|
unless clients.empty?
|
106
98
|
clients.each_with_index do |client, index|
|
107
99
|
$redis.hgetall('events:' + client).callback do |events|
|
108
|
-
client_events =
|
100
|
+
client_events = events
|
109
101
|
client_events.each do |key, value|
|
110
102
|
client_events[key] = JSON.parse(value)
|
111
103
|
end
|
@@ -122,7 +114,7 @@ module Sensu
|
|
122
114
|
aget '/event/:client/:check' do |client, check|
|
123
115
|
$logger.debug('[event] -- ' + request.ip + ' -- GET -- request for event -- ' + client + ' -- ' + check)
|
124
116
|
$redis.hgetall('events:' + client).callback do |events|
|
125
|
-
client_events =
|
117
|
+
client_events = events
|
126
118
|
event = client_events[check]
|
127
119
|
status 404 if event.nil?
|
128
120
|
body event
|
@@ -139,7 +131,7 @@ module Sensu
|
|
139
131
|
end
|
140
132
|
if event.has_key?('client') && event.has_key?('check')
|
141
133
|
$redis.hgetall('events:' + event['client']).callback do |events|
|
142
|
-
if
|
134
|
+
if events.has_key?(event['check'])
|
143
135
|
check = {:name => event['check'], :issued => Time.now.to_i, :status => 0, :output => 'Resolving on request of the API'}
|
144
136
|
$amq.queue('results').publish({:client => event['client'], :check => check}.to_json)
|
145
137
|
status 201
|
@@ -177,7 +169,7 @@ module Sensu
|
|
177
169
|
body nil
|
178
170
|
end
|
179
171
|
stashes = Hash.new
|
180
|
-
if paths.is_a?(Array)
|
172
|
+
if paths.is_a?(Array) && paths.size > 0
|
181
173
|
paths.each_with_index do |path, index|
|
182
174
|
$redis.get('stash:' + path).callback do |stash|
|
183
175
|
stashes[path] = JSON.parse(stash) unless stash.nil?
|
@@ -201,7 +193,7 @@ module Sensu
|
|
201
193
|
adelete '/stash/*' do |path|
|
202
194
|
$logger.debug('[stash] -- ' + request.ip + ' -- DELETE -- request for stash -- ' + path)
|
203
195
|
$redis.exists('stash:' + path).callback do |stash_exist|
|
204
|
-
|
196
|
+
if stash_exist
|
205
197
|
$redis.del('stash:' + path).callback do
|
206
198
|
status 204
|
207
199
|
body nil
|
@@ -215,7 +207,7 @@ module Sensu
|
|
215
207
|
|
216
208
|
def self.test(options={})
|
217
209
|
self.setup(options)
|
218
|
-
$redis.set('client:
|
210
|
+
$redis.set('client:' + @settings.client.name, @settings.client.to_json).callback do
|
219
211
|
$redis.sadd('clients', @settings.client.name).callback do
|
220
212
|
$redis.hset('events:' + @settings.client.name, 'test', {
|
221
213
|
:status => 2,
|
@@ -223,11 +215,12 @@ module Sensu
|
|
223
215
|
:flapping => false,
|
224
216
|
:occurrences => 1
|
225
217
|
}.to_json).callback do
|
226
|
-
$redis.set('stash:test/test', '{"key": "value"}')
|
218
|
+
$redis.set('stash:test/test', '{"key": "value"}').callback do
|
219
|
+
self.run!(:port => @settings.api.port)
|
220
|
+
end
|
227
221
|
end
|
228
222
|
end
|
229
223
|
end
|
230
|
-
self.run!(:port => @settings.api.port)
|
231
224
|
end
|
232
225
|
end
|
233
226
|
end
|
data/lib/sensu/config.rb
CHANGED
data/lib/sensu/server.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'config')
|
2
|
-
require '
|
2
|
+
require 'redis'
|
3
3
|
|
4
4
|
module Sensu
|
5
5
|
class Server
|
@@ -43,7 +43,7 @@ module Sensu
|
|
43
43
|
|
44
44
|
def setup_redis
|
45
45
|
@logger.debug('[redis] -- connecting to redis')
|
46
|
-
@redis = EM
|
46
|
+
@redis = EM.connect(@settings.redis.host, @settings.redis.port, Redis::Client)
|
47
47
|
end
|
48
48
|
|
49
49
|
def setup_amqp
|
@@ -229,7 +229,7 @@ module Sensu
|
|
229
229
|
@result_queue.publish(result.to_json)
|
230
230
|
else
|
231
231
|
@redis.hexists('events:' + client_id, 'keepalive').callback do |exists|
|
232
|
-
if exists
|
232
|
+
if exists
|
233
233
|
result.check.status = 0
|
234
234
|
result.check.output = 'Keep-alive sent from host'
|
235
235
|
@result_queue.publish(result.to_json)
|
data/sensu.gemspec
CHANGED
@@ -7,23 +7,25 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.authors = ["Sean Porter", "Justin Kolberg"]
|
8
8
|
s.email = ["sean.porter@sonian.net", "justin.kolberg@sonian.net"]
|
9
9
|
s.homepage = "https://github.com/sonian/sensu"
|
10
|
-
s.summary =
|
11
|
-
s.description =
|
10
|
+
s.summary = "A monitoring framework"
|
11
|
+
s.description = "A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model."
|
12
12
|
s.license = "MIT"
|
13
13
|
s.has_rdoc = false
|
14
14
|
|
15
|
+
s.add_dependency("eventmachine", "~> 1.0.0.beta.4")
|
15
16
|
s.add_dependency("amqp", "0.7.4")
|
16
17
|
s.add_dependency("json")
|
17
18
|
s.add_dependency("hashie")
|
18
19
|
s.add_dependency("uuidtools")
|
19
20
|
s.add_dependency("cabin", "0.1.7")
|
20
|
-
s.add_dependency("
|
21
|
+
s.add_dependency("ruby-redis")
|
21
22
|
s.add_dependency("rack", "~> 1.3.4")
|
22
23
|
s.add_dependency("async_sinatra")
|
23
24
|
s.add_dependency("thin")
|
24
25
|
|
25
26
|
s.add_development_dependency("rake")
|
26
27
|
s.add_development_dependency("em-spec")
|
28
|
+
s.add_development_dependency("em-http-request")
|
27
29
|
|
28
30
|
s.files = `git ls-files`.split("\n").reject {|f| f =~ /(dist|test|png)/}
|
29
31
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
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: 45
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 9
|
10
|
+
version: 0.8.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sean Porter
|
@@ -16,13 +16,31 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-11-
|
19
|
+
date: 2011-11-16 00:00:00 -08:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
|
-
name:
|
23
|
+
name: eventmachine
|
24
24
|
prerelease: false
|
25
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 62196363
|
31
|
+
segments:
|
32
|
+
- 1
|
33
|
+
- 0
|
34
|
+
- 0
|
35
|
+
- beta
|
36
|
+
- 4
|
37
|
+
version: 1.0.0.beta.4
|
38
|
+
type: :runtime
|
39
|
+
version_requirements: *id001
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: amqp
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
26
44
|
none: false
|
27
45
|
requirements:
|
28
46
|
- - "="
|
@@ -34,11 +52,11 @@ dependencies:
|
|
34
52
|
- 4
|
35
53
|
version: 0.7.4
|
36
54
|
type: :runtime
|
37
|
-
version_requirements: *
|
55
|
+
version_requirements: *id002
|
38
56
|
- !ruby/object:Gem::Dependency
|
39
57
|
name: json
|
40
58
|
prerelease: false
|
41
|
-
requirement: &
|
59
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
60
|
none: false
|
43
61
|
requirements:
|
44
62
|
- - ">="
|
@@ -48,11 +66,11 @@ dependencies:
|
|
48
66
|
- 0
|
49
67
|
version: "0"
|
50
68
|
type: :runtime
|
51
|
-
version_requirements: *
|
69
|
+
version_requirements: *id003
|
52
70
|
- !ruby/object:Gem::Dependency
|
53
71
|
name: hashie
|
54
72
|
prerelease: false
|
55
|
-
requirement: &
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
56
74
|
none: false
|
57
75
|
requirements:
|
58
76
|
- - ">="
|
@@ -62,11 +80,11 @@ dependencies:
|
|
62
80
|
- 0
|
63
81
|
version: "0"
|
64
82
|
type: :runtime
|
65
|
-
version_requirements: *
|
83
|
+
version_requirements: *id004
|
66
84
|
- !ruby/object:Gem::Dependency
|
67
85
|
name: uuidtools
|
68
86
|
prerelease: false
|
69
|
-
requirement: &
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
70
88
|
none: false
|
71
89
|
requirements:
|
72
90
|
- - ">="
|
@@ -76,11 +94,11 @@ dependencies:
|
|
76
94
|
- 0
|
77
95
|
version: "0"
|
78
96
|
type: :runtime
|
79
|
-
version_requirements: *
|
97
|
+
version_requirements: *id005
|
80
98
|
- !ruby/object:Gem::Dependency
|
81
99
|
name: cabin
|
82
100
|
prerelease: false
|
83
|
-
requirement: &
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
84
102
|
none: false
|
85
103
|
requirements:
|
86
104
|
- - "="
|
@@ -92,11 +110,11 @@ dependencies:
|
|
92
110
|
- 7
|
93
111
|
version: 0.1.7
|
94
112
|
type: :runtime
|
95
|
-
version_requirements: *
|
113
|
+
version_requirements: *id006
|
96
114
|
- !ruby/object:Gem::Dependency
|
97
|
-
name:
|
115
|
+
name: ruby-redis
|
98
116
|
prerelease: false
|
99
|
-
requirement: &
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
100
118
|
none: false
|
101
119
|
requirements:
|
102
120
|
- - ">="
|
@@ -106,11 +124,11 @@ dependencies:
|
|
106
124
|
- 0
|
107
125
|
version: "0"
|
108
126
|
type: :runtime
|
109
|
-
version_requirements: *
|
127
|
+
version_requirements: *id007
|
110
128
|
- !ruby/object:Gem::Dependency
|
111
129
|
name: rack
|
112
130
|
prerelease: false
|
113
|
-
requirement: &
|
131
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
114
132
|
none: false
|
115
133
|
requirements:
|
116
134
|
- - ~>
|
@@ -122,11 +140,11 @@ dependencies:
|
|
122
140
|
- 4
|
123
141
|
version: 1.3.4
|
124
142
|
type: :runtime
|
125
|
-
version_requirements: *
|
143
|
+
version_requirements: *id008
|
126
144
|
- !ruby/object:Gem::Dependency
|
127
145
|
name: async_sinatra
|
128
146
|
prerelease: false
|
129
|
-
requirement: &
|
147
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
130
148
|
none: false
|
131
149
|
requirements:
|
132
150
|
- - ">="
|
@@ -136,11 +154,11 @@ dependencies:
|
|
136
154
|
- 0
|
137
155
|
version: "0"
|
138
156
|
type: :runtime
|
139
|
-
version_requirements: *
|
157
|
+
version_requirements: *id009
|
140
158
|
- !ruby/object:Gem::Dependency
|
141
159
|
name: thin
|
142
160
|
prerelease: false
|
143
|
-
requirement: &
|
161
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
144
162
|
none: false
|
145
163
|
requirements:
|
146
164
|
- - ">="
|
@@ -150,11 +168,11 @@ dependencies:
|
|
150
168
|
- 0
|
151
169
|
version: "0"
|
152
170
|
type: :runtime
|
153
|
-
version_requirements: *
|
171
|
+
version_requirements: *id010
|
154
172
|
- !ruby/object:Gem::Dependency
|
155
173
|
name: rake
|
156
174
|
prerelease: false
|
157
|
-
requirement: &
|
175
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
158
176
|
none: false
|
159
177
|
requirements:
|
160
178
|
- - ">="
|
@@ -164,11 +182,11 @@ dependencies:
|
|
164
182
|
- 0
|
165
183
|
version: "0"
|
166
184
|
type: :development
|
167
|
-
version_requirements: *
|
185
|
+
version_requirements: *id011
|
168
186
|
- !ruby/object:Gem::Dependency
|
169
187
|
name: em-spec
|
170
188
|
prerelease: false
|
171
|
-
requirement: &
|
189
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
172
190
|
none: false
|
173
191
|
requirements:
|
174
192
|
- - ">="
|
@@ -178,7 +196,21 @@ dependencies:
|
|
178
196
|
- 0
|
179
197
|
version: "0"
|
180
198
|
type: :development
|
181
|
-
version_requirements: *
|
199
|
+
version_requirements: *id012
|
200
|
+
- !ruby/object:Gem::Dependency
|
201
|
+
name: em-http-request
|
202
|
+
prerelease: false
|
203
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
204
|
+
none: false
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
hash: 3
|
209
|
+
segments:
|
210
|
+
- 0
|
211
|
+
version: "0"
|
212
|
+
type: :development
|
213
|
+
version_requirements: *id013
|
182
214
|
description: A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model.
|
183
215
|
email:
|
184
216
|
- sean.porter@sonian.net
|
@@ -209,7 +241,6 @@ files:
|
|
209
241
|
- lib/sensu/helpers.rb
|
210
242
|
- lib/sensu/server.rb
|
211
243
|
- sensu.gemspec
|
212
|
-
- sensu.windows
|
213
244
|
has_rdoc: true
|
214
245
|
homepage: https://github.com/sonian/sensu
|
215
246
|
licenses:
|
data/sensu.windows
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path("../lib/sensu", __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = "sensu"
|
5
|
-
s.version = Sensu::VERSION
|
6
|
-
s.authors = ["Sean Porter", "Justin Kolberg"]
|
7
|
-
s.email = ["sean.porter@sonian.net", "justin.kolberg@sonian.net"]
|
8
|
-
s.homepage = "https://github.com/sonian/sensu"
|
9
|
-
s.summary = %q{A monitoring framework}
|
10
|
-
s.description = %q{A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model.}
|
11
|
-
s.license = "MIT"
|
12
|
-
s.has_rdoc = false
|
13
|
-
|
14
|
-
s.platform = case ENV['BUILD']
|
15
|
-
when "mswin"
|
16
|
-
"x86-mswin32"
|
17
|
-
when "mingw"
|
18
|
-
"x86-mingw32"
|
19
|
-
end
|
20
|
-
|
21
|
-
s.add_dependency("eventmachine", "1.0.0.beta.4.1")
|
22
|
-
s.add_dependency("amqp", "0.7.4")
|
23
|
-
s.add_dependency("json")
|
24
|
-
s.add_dependency("hashie")
|
25
|
-
s.add_dependency("uuidtools")
|
26
|
-
s.add_dependency("cabin", "0.1.7")
|
27
|
-
|
28
|
-
s.files = `git ls-files`.split("\n").reject {|f| f =~ /(dist|test|server|api|png)/}
|
29
|
-
s.executables = "sensu-client"
|
30
|
-
s.require_paths = ["lib"]
|
31
|
-
end
|