sensu 0.9.5 → 0.9.6.beta

Sign up to get free protection for your applications and to get access to all the features.
@@ -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