sensu 0.9.5 → 0.9.6.beta

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.
@@ -0,0 +1,280 @@
1
+ module Sensu
2
+ class Settings
3
+ attr_reader :indifferent_access, :loaded_env, :loaded_files
4
+
5
+ def initialize
6
+ @logger = Cabin::Channel.get
7
+ @settings = Hash.new
8
+ @indifferent_access = false
9
+ @loaded_env = false
10
+ @loaded_files = Array.new
11
+ end
12
+
13
+ def [](key)
14
+ unless @indifferent_access
15
+ indifferent_access!
16
+ end
17
+ @settings[key.to_sym]
18
+ end
19
+
20
+ def indifferent_access!
21
+ @settings = indifferent_access(@settings)
22
+ @indifferent_access = true
23
+ end
24
+
25
+ def load_env
26
+ if ENV['RABBITMQ_URL']
27
+ @settings[:rabbitmq] = ENV['RABBITMQ_URL']
28
+ @logger.warn('using rabbitmq url environment variable', {
29
+ :rabbitmq_url => ENV['RABBITMQ_URL']
30
+ })
31
+ end
32
+ ENV['REDIS_URL'] ||= ENV['REDISTOGO_URL']
33
+ if ENV['REDIS_URL']
34
+ @settings[:redis] = ENV['REDIS_URL']
35
+ @logger.warn('using redis url environment variable', {
36
+ :redis_url => ENV['REDIS_URL']
37
+ })
38
+ end
39
+ ENV['API_PORT'] ||= ENV['PORT']
40
+ if ENV['API_PORT']
41
+ @settings[:api] ||= Hash.new
42
+ @settings[:api][:port] = ENV['API_PORT']
43
+ @logger.warn('using api port environment variable', {
44
+ :api_port => ENV['API_PORT']
45
+ })
46
+ end
47
+ @indifferent_access = false
48
+ @loaded_env = true
49
+ end
50
+
51
+ def load_file(file)
52
+ if File.readable?(file)
53
+ begin
54
+ contents = File.open(file, 'r').read
55
+ config = JSON.parse(contents, :symbolize_names => true)
56
+ merged = deep_merge(@settings, config)
57
+ unless @loaded_files.empty?
58
+ @logger.warn('config file applied changes', {
59
+ :config_file => file,
60
+ :changes => deep_diff(@settings, merged)
61
+ })
62
+ end
63
+ @settings = merged
64
+ @indifferent_access = false
65
+ @loaded_files.push(file)
66
+ rescue JSON::ParserError => error
67
+ @logger.error('config file must be valid json', {
68
+ :config_file => file,
69
+ :error => error.to_s
70
+ })
71
+ @logger.warn('ignoring config file', {
72
+ :config_file => file
73
+ })
74
+ end
75
+ else
76
+ @logger.error('config file does not exist or is not readable', {
77
+ :config_file => file
78
+ })
79
+ @logger.warn('ignoring config file', {
80
+ :config_file => file
81
+ })
82
+ end
83
+ end
84
+
85
+ def checks
86
+ @settings[:checks].map do |check_name, check_details|
87
+ check_details.merge(:name => check_name.to_s)
88
+ end
89
+ end
90
+
91
+ def handlers
92
+ @settings[:handlers].map do |handler_name, handler_details|
93
+ handler_details.merge(:name => handler_name.to_s)
94
+ end
95
+ end
96
+
97
+ def check_exists?(check_name)
98
+ @settings[:checks].has_key?(check_name.to_sym)
99
+ end
100
+
101
+ def handler_exists?(handler_name)
102
+ @settings[:handlers].has_key?(handler_name.to_sym)
103
+ end
104
+
105
+ def validate
106
+ @logger.debug('validating settings')
107
+ validate_checks
108
+ case File.basename($0)
109
+ when 'rake'
110
+ validate_client
111
+ validate_api
112
+ validate_server
113
+ when 'sensu-client'
114
+ validate_client
115
+ when 'sensu-api'
116
+ validate_api
117
+ when 'sensu-server'
118
+ validate_server
119
+ end
120
+ @logger.debug('settings are valid')
121
+ end
122
+
123
+ private
124
+
125
+ def indifferent_access(hash)
126
+ hash = indifferent_hash.merge(hash)
127
+ hash.each do |key, value|
128
+ if value.is_a?(Hash)
129
+ hash[key] = indifferent_access(value)
130
+ end
131
+ end
132
+ end
133
+
134
+ def indifferent_hash
135
+ Hash.new do |hash, key|
136
+ if key.is_a?(String)
137
+ hash[key.to_sym]
138
+ end
139
+ end
140
+ end
141
+
142
+ def deep_merge(hash_one, hash_two)
143
+ merged = hash_one.dup
144
+ hash_two.each do |key, value|
145
+ merged[key] = case
146
+ when hash_one[key].is_a?(Hash) && value.is_a?(Hash)
147
+ deep_merge(hash_one[key], value)
148
+ when hash_one[key].is_a?(Array) && value.is_a?(Array)
149
+ hash_one[key].concat(value).uniq
150
+ else
151
+ value
152
+ end
153
+ end
154
+ merged
155
+ end
156
+
157
+ def deep_diff(hash_one, hash_two)
158
+ keys = hash_one.keys.concat(hash_two.keys).uniq
159
+ keys.inject(Hash.new) do |diff, key|
160
+ unless hash_one[key] == hash_two[key]
161
+ if hash_one[key].is_a?(Hash) && hash_two[key].is_a?(Hash)
162
+ diff[key] = deep_diff(hash_one[key], hash_two[key])
163
+ else
164
+ diff[key] = [hash_one[key], hash_two[key]]
165
+ end
166
+ end
167
+ diff
168
+ end
169
+ end
170
+
171
+ def validate_checks
172
+ unless @settings[:checks].is_a?(Hash)
173
+ raise('missing check configuration')
174
+ end
175
+ checks.each do |check|
176
+ unless check[:interval].is_a?(Integer) && check[:interval] > 0
177
+ raise('missing interval for check: ' + check[:name])
178
+ end
179
+ unless check[:command].is_a?(String)
180
+ raise('missing command for check: ' + check[:name])
181
+ end
182
+ unless check[:standalone]
183
+ unless check[:subscribers].is_a?(Array) && check[:subscribers].count > 0
184
+ raise('missing subscribers for check: ' + check[:name])
185
+ end
186
+ check[:subscribers].each do |subscriber|
187
+ unless subscriber.is_a?(String) && !subscriber.empty?
188
+ raise('a check subscriber must be a string for check: ' + check[:name])
189
+ end
190
+ end
191
+ end
192
+ if check.has_key?(:handler)
193
+ unless check[:handler].is_a?(String)
194
+ raise('handler must be a string for check: ' + check[:name])
195
+ end
196
+ end
197
+ if check.has_key?(:handlers)
198
+ unless check[:handlers].is_a?(Array)
199
+ raise('handlers must be an array for check: ' + check[:name])
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+ def validate_client
206
+ unless @settings[:client].is_a?(Hash)
207
+ raise('missing client configuration')
208
+ end
209
+ unless @settings[:client][:name].is_a?(String)
210
+ raise('client must have a name')
211
+ end
212
+ unless @settings[:client][:address].is_a?(String)
213
+ raise('client must have an address')
214
+ end
215
+ unless @settings[:client][:subscriptions].is_a?(Array) && @settings[:client][:subscriptions].count > 0
216
+ raise('client must have subscriptions')
217
+ end
218
+ @settings[:client][:subscriptions].each do |subscription|
219
+ unless subscription.is_a?(String) && !subscription.empty?
220
+ raise('a client subscription must be a string')
221
+ end
222
+ end
223
+ end
224
+
225
+ def validate_api
226
+ unless @settings[:api].is_a?(Hash)
227
+ raise('missing api configuration')
228
+ end
229
+ unless @settings[:api][:port].is_a?(Integer)
230
+ raise('api port must be an integer')
231
+ end
232
+ if @settings[:api].has_key?(:user) || @settings[:api].has_key?(:password)
233
+ unless @settings[:api][:user].is_a?(String)
234
+ raise('api user must be a string')
235
+ end
236
+ unless @settings[:api][:password].is_a?(String)
237
+ raise('api password must be a string')
238
+ end
239
+ end
240
+ end
241
+
242
+ def validate_server
243
+ unless @settings[:handlers].is_a?(Hash)
244
+ raise('missing handler configuration')
245
+ end
246
+ unless @settings[:handlers].include?(:default)
247
+ raise('missing default handler')
248
+ end
249
+ handlers.each do |handler|
250
+ unless handler[:type].is_a?(String)
251
+ raise('missing type for handler: ' + handler[:name])
252
+ end
253
+ case handler[:type]
254
+ when 'pipe'
255
+ unless handler[:command].is_a?(String)
256
+ raise('missing command for pipe handler: ' + handler[:name])
257
+ end
258
+ when 'amqp'
259
+ unless handler[:exchange].is_a?(Hash)
260
+ raise('missing exchange details for amqp handler: ' + handler[:name])
261
+ end
262
+ unless handler[:exchange][:name].is_a?(String)
263
+ raise('missing exchange name for amqp handler: ' + handler[:name])
264
+ end
265
+ if handler[:exchange].has_key?(:type)
266
+ unless %w[direct fanout topic].include?(handler[:exchange][:type])
267
+ raise('invalid exchange type for amqp handler: ' + handler[:name])
268
+ end
269
+ end
270
+ when 'set'
271
+ unless handler[:handlers].is_a?(Array) && handler[:handlers].count > 0
272
+ raise('missing handler set for handler: ' + handler[:name])
273
+ end
274
+ else
275
+ raise('unknown type for handler: ' + handler[:name])
276
+ end
277
+ end
278
+ end
279
+ end
280
+ end
@@ -0,0 +1,52 @@
1
+ module Sensu
2
+ class Socket < EM::Connection
3
+ attr_accessor :protocol, :logger, :settings, :amq
4
+
5
+ def reply(data)
6
+ if @protocol == :tcp
7
+ send_data(data)
8
+ end
9
+ end
10
+
11
+ def receive_data(data)
12
+ if data == 'ping'
13
+ @logger.debug('socket received ping')
14
+ reply('pong')
15
+ else
16
+ @logger.debug('socket received data', {
17
+ :data => data
18
+ })
19
+ begin
20
+ check = JSON.parse(data, :symbolize_names => true)
21
+ validates = [:name, :output].all? do |key|
22
+ check[key].is_a?(String)
23
+ end
24
+ check[:issued] = Time.now.to_i
25
+ check[:status] ||= 0
26
+ if validates && check[:status].is_a?(Integer)
27
+ payload = {
28
+ :client => @settings[:client][:name],
29
+ :check => check
30
+ }
31
+ @logger.info('publishing check result', {
32
+ :payload => payload
33
+ })
34
+ @amq.queue('results').publish(payload.to_json)
35
+ reply('ok')
36
+ else
37
+ @logger.warn('invalid check result', {
38
+ :check => check
39
+ })
40
+ reply('invalid')
41
+ end
42
+ rescue JSON::ParserError => error
43
+ @logger.warn('check result must be valid json', {
44
+ :data => data,
45
+ :error => error.to_s
46
+ })
47
+ reply('invalid')
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
data/sensu.gemspec CHANGED
@@ -1,32 +1,31 @@
1
- require File.expand_path("../lib/sensu/version", __FILE__)
1
+ require File.join(File.dirname(__FILE__), 'lib', 'sensu', 'constants')
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = "sensu"
4
+ s.name = 'sensu'
5
5
  s.version = Sensu::VERSION
6
6
  s.platform = Gem::Platform::RUBY
7
- s.authors = ["Sean Porter", "Justin Kolberg"]
8
- s.email = ["sean.porter@sonian.net", "justin.kolberg@sonian.net"]
9
- s.homepage = "https://github.com/sonian/sensu"
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
- s.license = "MIT"
7
+ s.authors = ['Sean Porter', 'Justin Kolberg']
8
+ s.email = ['sean.porter@sonian.net', 'justin.kolberg@sonian.net']
9
+ s.homepage = 'https://github.com/sensu/sensu'
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
+ s.license = 'MIT'
13
13
  s.has_rdoc = false
14
14
 
15
- s.add_dependency("bundler")
16
- s.add_dependency("eventmachine", "~> 1.0.0.beta.4")
17
- s.add_dependency("amqp", "0.7.4")
18
- s.add_dependency("json")
19
- s.add_dependency("hashie")
20
- s.add_dependency("cabin", "0.1.8")
21
- s.add_dependency("ruby-redis")
22
- s.add_dependency("async_sinatra", "1.0.0")
23
- s.add_dependency("thin")
15
+ s.add_dependency('bundler')
16
+ s.add_dependency('eventmachine', '~> 1.0.0.beta.4')
17
+ s.add_dependency('amqp', '0.7.4')
18
+ s.add_dependency('json')
19
+ s.add_dependency('cabin', '0.4.4')
20
+ s.add_dependency('ruby-redis')
21
+ s.add_dependency('async_sinatra', '1.0.0')
22
+ s.add_dependency('thin')
24
23
 
25
- s.add_development_dependency("rake")
26
- s.add_development_dependency("em-spec")
27
- s.add_development_dependency("em-http-request")
24
+ s.add_development_dependency('rake')
25
+ s.add_development_dependency('em-spec')
26
+ s.add_development_dependency('em-http-request')
28
27
 
29
- s.files = Dir.glob("{bin,lib}/**/*") + %w[sensu.gemspec README.org MIT-LICENSE.txt]
30
- s.executables = Dir.glob("bin/**/*").map { |file| File.basename(file) }
31
- s.require_paths = ["lib"]
28
+ s.files = Dir.glob('{bin,lib}/**/*') + %w[sensu.gemspec README.org MIT-LICENSE.txt]
29
+ s.executables = Dir.glob('bin/**/*').map { |file| File.basename(file) }
30
+ s.require_paths = ['lib']
32
31
  end
metadata CHANGED
@@ -1,263 +1,249 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sensu
3
- version: !ruby/object:Gem::Version
4
- hash: 49
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 9
9
- - 5
10
- version: 0.9.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.6.beta
5
+ prerelease: 6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Sean Porter
14
9
  - Justin Kolberg
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-03-28 00:00:00 -07:00
20
- default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
13
+ date: 2012-05-03 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
23
16
  name: bundler
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
26
18
  none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
34
23
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: eventmachine
38
24
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: eventmachine
33
+ requirement: !ruby/object:Gem::Requirement
40
34
  none: false
41
- requirements:
35
+ requirements:
42
36
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 62196363
45
- segments:
46
- - 1
47
- - 0
48
- - 0
49
- - beta
50
- - 4
37
+ - !ruby/object:Gem::Version
51
38
  version: 1.0.0.beta.4
52
39
  type: :runtime
53
- version_requirements: *id002
54
- - !ruby/object:Gem::Dependency
55
- name: amqp
56
40
  prerelease: false
57
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.0.beta.4
47
+ - !ruby/object:Gem::Dependency
48
+ name: amqp
49
+ requirement: !ruby/object:Gem::Requirement
58
50
  none: false
59
- requirements:
60
- - - "="
61
- - !ruby/object:Gem::Version
62
- hash: 11
63
- segments:
64
- - 0
65
- - 7
66
- - 4
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
67
54
  version: 0.7.4
68
55
  type: :runtime
69
- version_requirements: *id003
70
- - !ruby/object:Gem::Dependency
71
- name: json
72
56
  prerelease: false
73
- requirement: &id004 !ruby/object:Gem::Requirement
57
+ version_requirements: !ruby/object:Gem::Requirement
74
58
  none: false
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- hash: 3
79
- segments:
80
- - 0
81
- version: "0"
59
+ requirements:
60
+ - - '='
61
+ - !ruby/object:Gem::Version
62
+ version: 0.7.4
63
+ - !ruby/object:Gem::Dependency
64
+ name: json
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
82
71
  type: :runtime
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: hashie
86
72
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
73
+ version_requirements: !ruby/object:Gem::Requirement
88
74
  none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 3
93
- segments:
94
- - 0
95
- version: "0"
96
- type: :runtime
97
- version_requirements: *id005
98
- - !ruby/object:Gem::Dependency
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
99
80
  name: cabin
100
- prerelease: false
101
- requirement: &id006 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
102
82
  none: false
103
- requirements:
104
- - - "="
105
- - !ruby/object:Gem::Version
106
- hash: 11
107
- segments:
108
- - 0
109
- - 1
110
- - 8
111
- version: 0.1.8
83
+ requirements:
84
+ - - '='
85
+ - !ruby/object:Gem::Version
86
+ version: 0.4.4
112
87
  type: :runtime
113
- version_requirements: *id006
114
- - !ruby/object:Gem::Dependency
115
- name: ruby-redis
116
88
  prerelease: false
117
- requirement: &id007 !ruby/object:Gem::Requirement
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - '='
93
+ - !ruby/object:Gem::Version
94
+ version: 0.4.4
95
+ - !ruby/object:Gem::Dependency
96
+ name: ruby-redis
97
+ requirement: !ruby/object:Gem::Requirement
118
98
  none: false
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- hash: 3
123
- segments:
124
- - 0
125
- version: "0"
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
126
103
  type: :runtime
127
- version_requirements: *id007
128
- - !ruby/object:Gem::Dependency
129
- name: async_sinatra
130
104
  prerelease: false
131
- requirement: &id008 !ruby/object:Gem::Requirement
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: async_sinatra
113
+ requirement: !ruby/object:Gem::Requirement
132
114
  none: false
133
- requirements:
134
- - - "="
135
- - !ruby/object:Gem::Version
136
- hash: 23
137
- segments:
138
- - 1
139
- - 0
140
- - 0
115
+ requirements:
116
+ - - '='
117
+ - !ruby/object:Gem::Version
141
118
  version: 1.0.0
142
119
  type: :runtime
143
- version_requirements: *id008
144
- - !ruby/object:Gem::Dependency
145
- name: thin
146
120
  prerelease: false
147
- requirement: &id009 !ruby/object:Gem::Requirement
121
+ version_requirements: !ruby/object:Gem::Requirement
148
122
  none: false
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- hash: 3
153
- segments:
154
- - 0
155
- version: "0"
123
+ requirements:
124
+ - - '='
125
+ - !ruby/object:Gem::Version
126
+ version: 1.0.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: thin
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
156
135
  type: :runtime
157
- version_requirements: *id009
158
- - !ruby/object:Gem::Dependency
159
- name: rake
160
136
  prerelease: false
161
- requirement: &id010 !ruby/object:Gem::Requirement
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: rake
145
+ requirement: !ruby/object:Gem::Requirement
162
146
  none: false
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- hash: 3
167
- segments:
168
- - 0
169
- version: "0"
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
170
151
  type: :development
171
- version_requirements: *id010
172
- - !ruby/object:Gem::Dependency
173
- name: em-spec
174
152
  prerelease: false
175
- requirement: &id011 !ruby/object:Gem::Requirement
153
+ version_requirements: !ruby/object:Gem::Requirement
176
154
  none: false
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- hash: 3
181
- segments:
182
- - 0
183
- version: "0"
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: em-spec
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
184
167
  type: :development
185
- version_requirements: *id011
186
- - !ruby/object:Gem::Dependency
187
- name: em-http-request
188
168
  prerelease: false
189
- requirement: &id012 !ruby/object:Gem::Requirement
169
+ version_requirements: !ruby/object:Gem::Requirement
190
170
  none: false
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- hash: 3
195
- segments:
196
- - 0
197
- version: "0"
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: em-http-request
177
+ requirement: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
198
183
  type: :development
199
- version_requirements: *id012
200
- description: A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model.
201
- email:
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ description: A monitoring framework that aims to be simple, malleable, and scalable.
192
+ Uses the publish/subscribe model.
193
+ email:
202
194
  - sean.porter@sonian.net
203
195
  - justin.kolberg@sonian.net
204
- executables:
196
+ executables:
205
197
  - sensu-api
206
198
  - sensu-client
207
199
  - sensu-server
208
200
  extensions: []
209
-
210
201
  extra_rdoc_files: []
211
-
212
- files:
202
+ files:
213
203
  - bin/sensu-api
214
204
  - bin/sensu-client
215
205
  - bin/sensu-server
216
206
  - lib/sensu/api.rb
207
+ - lib/sensu/base.rb
208
+ - lib/sensu/cli.rb
217
209
  - lib/sensu/client.rb
218
- - lib/sensu/config.rb
210
+ - lib/sensu/constants.rb
211
+ - lib/sensu/logger.rb
219
212
  - lib/sensu/patches/amqp.rb
220
213
  - lib/sensu/patches/redis.rb
221
214
  - lib/sensu/patches/ruby.rb
215
+ - lib/sensu/process.rb
222
216
  - lib/sensu/server.rb
223
- - lib/sensu/version.rb
217
+ - lib/sensu/settings.rb
218
+ - lib/sensu/socket.rb
224
219
  - lib/sensu.rb
225
220
  - sensu.gemspec
226
221
  - README.org
227
222
  - MIT-LICENSE.txt
228
- has_rdoc: true
229
- homepage: https://github.com/sonian/sensu
230
- licenses:
223
+ homepage: https://github.com/sensu/sensu
224
+ licenses:
231
225
  - MIT
232
226
  post_install_message:
233
227
  rdoc_options: []
234
-
235
- require_paths:
228
+ require_paths:
236
229
  - lib
237
- required_ruby_version: !ruby/object:Gem::Requirement
230
+ required_ruby_version: !ruby/object:Gem::Requirement
238
231
  none: false
239
- requirements:
240
- - - ">="
241
- - !ruby/object:Gem::Version
242
- hash: 3
243
- segments:
244
- - 0
245
- version: "0"
246
- required_rubygems_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ! '>='
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
237
  none: false
248
- requirements:
249
- - - ">="
250
- - !ruby/object:Gem::Version
251
- hash: 3
252
- segments:
253
- - 0
254
- version: "0"
238
+ requirements:
239
+ - - ! '>'
240
+ - !ruby/object:Gem::Version
241
+ version: 1.3.1
255
242
  requirements: []
256
-
257
243
  rubyforge_project:
258
- rubygems_version: 1.3.7
244
+ rubygems_version: 1.8.24
259
245
  signing_key:
260
246
  specification_version: 3
261
247
  summary: A monitoring framework
262
248
  test_files: []
263
-
249
+ has_rdoc: false