sensu 0.16.0 → 0.17.0.beta

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 91fb6d60e337aca88549d8d25f0d4480ce91ad0d
4
- data.tar.gz: 627a57a4f255613f0d72cc01e610858a7cf7f6bd
3
+ metadata.gz: 353194762fe5d578ba9a0fab7a901d3d33dd2cce
4
+ data.tar.gz: 5a9eeacb29a9dce4103c3847181959bb431e9cf2
5
5
  SHA512:
6
- metadata.gz: cbd22b0ead3162029d213afaffeaf6932f26a9573987b44c85fb31d99b7bfa7265c32f381e819e1007ccd1b397571c5ce370f90f8dd908a44f71c66389746205
7
- data.tar.gz: e3b2ac67a7c19276243ca3ae055c651c8d388e23d498a8d0426d2675c415bd09404651f746c82576140d0de823303b5ff6a472077af3b46c9b2f836a0424f2fc
6
+ metadata.gz: 4945f1f379551daefb88be0a0b4ede8d82719f829b414410d5e66f65f069a482d62ec7718468b98379eede3e06941a9784ae663885a68aa359d336719f7459e1
7
+ data.tar.gz: 9db84ddb99d930aa80f632215616985a98f8b58a2c50078d1b4fc8896013b425329b60682759238c1b34c667d92b63f6425303a04ef6dca735bab7e5d8f8c47e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## 0.17.0 - TBD
2
+
3
+ ### Features
4
+
5
+ Improved Sensu client keepalive event check output.
6
+
7
+ Hashed initial check request/execution scheduling splay, consistent over
8
+ process restarts/reloads.
9
+
10
+ Sensu event ID logged for event handler output.
11
+
12
+ ### Other
13
+
14
+ Fixed TLS/SSL on Windows.
15
+
16
+ Fixed event filtering with event action, eg. `"action": "create"`.
17
+
1
18
  ## 0.16.0 - 2014-10-31
2
19
 
3
20
  ### Other
data/lib/sensu/client.rb CHANGED
@@ -184,18 +184,24 @@ module Sensu
184
184
  end
185
185
  end
186
186
 
187
+ def calculate_execution_splay(check)
188
+ key = [@settings[:client][:name], check[:name]].join(':')
189
+ splay_hash = Digest::MD5.digest(key).unpack('Q<').first
190
+ current_time = (Time.now.to_f * 1000).to_i
191
+ (splay_hash - current_time) % (check[:interval] * 1000) / 1000.0
192
+ end
193
+
187
194
  def schedule_checks(checks)
188
- check_count = 0
189
- stagger = testing? ? 0 : 2
190
195
  checks.each do |check|
191
- check_count += 1
192
- scheduling_delay = stagger * check_count % 30
193
- @timers[:run] << EM::Timer.new(scheduling_delay) do
194
- interval = testing? ? 0.5 : check[:interval]
195
- @timers[:run] << EM::PeriodicTimer.new(interval) do
196
- check[:issued] = Time.now.to_i
197
- process_check(check.dup)
198
- end
196
+ execute_check = Proc.new do
197
+ check[:issued] = Time.now.to_i
198
+ process_check(check.dup)
199
+ end
200
+ execution_splay = testing? ? 0 : calculate_execution_splay(check)
201
+ interval = testing? ? 0.5 : check[:interval]
202
+ @timers[:run] << EM::Timer.new(execution_splay) do
203
+ execute_check.call
204
+ @timers[:run] << EM::PeriodicTimer.new(interval, &execute_check)
199
205
  end
200
206
  end
201
207
  end
@@ -1,6 +1,6 @@
1
1
  module Sensu
2
2
  unless defined?(Sensu::VERSION)
3
- VERSION = '0.16.0'
3
+ VERSION = '0.17.0.beta'
4
4
 
5
5
  SEVERITIES = %w[ok warning critical unknown]
6
6
 
data/lib/sensu/daemon.rb CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  gem 'multi_json', '1.10.1'
4
4
 
5
- gem 'sensu-em', '2.4.0'
5
+ gem 'sensu-em', '2.4.1'
6
6
  gem 'sensu-logger', '1.0.0'
7
7
  gem 'sensu-settings', '1.2.0'
8
8
  gem 'sensu-extension', '1.0.0'
data/lib/sensu/server.rb CHANGED
@@ -94,6 +94,8 @@ module Sensu
94
94
  true
95
95
  when hash_one[key].is_a?(Hash) && hash_two[key].is_a?(Hash)
96
96
  filter_attributes_match?(hash_one[key], hash_two[key])
97
+ when hash_one[key].to_s == hash_two[key].to_s
98
+ true
97
99
  when hash_one[key].is_a?(String) && hash_one[key].start_with?('eval:')
98
100
  begin
99
101
  expression = hash_one[key].gsub(/^eval:(\s+)?/, '')
@@ -263,12 +265,11 @@ module Sensu
263
265
  when 'pipe'
264
266
  options = {:data => event_data, :timeout => handler[:timeout]}
265
267
  Spawn.process(handler[:command], options) do |output, status|
266
- output.each_line do |line|
267
- @logger.info('handler output', {
268
- :handler => handler,
269
- :output => line
270
- })
271
- end
268
+ @logger.info('handler output', {
269
+ :handler => handler,
270
+ :output => output.lines,
271
+ :event_id => event[:id]
272
+ })
272
273
  @handlers_in_progress_count -= 1
273
274
  end
274
275
  when 'tcp'
@@ -313,12 +314,11 @@ module Sensu
313
314
  @handlers_in_progress_count -= 1
314
315
  when 'extension'
315
316
  handler.safe_run(event_data) do |output, status|
316
- output.each_line do |line|
317
- @logger.info('handler extension output', {
318
- :extension => handler.definition,
319
- :output => line
320
- })
321
- end
317
+ @logger.info('handler extension output', {
318
+ :extension => handler.definition,
319
+ :output => output,
320
+ :event_id => event[:id]
321
+ })
322
322
  @handlers_in_progress_count -= 1
323
323
  end
324
324
  end
@@ -506,24 +506,29 @@ module Sensu
506
506
  end
507
507
  end
508
508
 
509
+ def calculate_execution_splay(check)
510
+ splay_hash = Digest::MD5.digest(check[:name]).unpack('Q<').first
511
+ current_time = (Time.now.to_f * 1000).to_i
512
+ (splay_hash - current_time) % (check[:interval] * 1000) / 1000.0
513
+ end
514
+
509
515
  def schedule_checks(checks)
510
- check_count = 0
511
- stagger = testing? ? 0 : 2
512
516
  checks.each do |check|
513
- check_count += 1
514
- scheduling_delay = stagger * check_count % 30
515
- @timers[:master] << EM::Timer.new(scheduling_delay) do
516
- interval = testing? ? 0.5 : check[:interval]
517
- @timers[:master] << EM::PeriodicTimer.new(interval) do
518
- unless check_request_subdued?(check)
519
- publish_check_request(check)
520
- else
521
- @logger.info('check request was subdued', {
522
- :check => check
523
- })
524
- end
517
+ process_check_request = Proc.new do
518
+ unless check_request_subdued?(check)
519
+ publish_check_request(check)
520
+ else
521
+ @logger.info('check request was subdued', {
522
+ :check => check
523
+ })
525
524
  end
526
525
  end
526
+ execution_splay = testing? ? 0 : calculate_execution_splay(check)
527
+ interval = testing? ? 0.5 : check[:interval]
528
+ @timers[:master] << EM::Timer.new(execution_splay) do
529
+ process_check_request.call
530
+ @timers[:master] << EM::PeriodicTimer.new(interval, &process_check_request)
531
+ end
527
532
  end
528
533
  end
529
534
 
@@ -580,18 +585,18 @@ module Sensu
580
585
  check[:issued] = Time.now.to_i
581
586
  check[:executed] = Time.now.to_i
582
587
  time_since_last_keepalive = Time.now.to_i - client[:timestamp]
588
+ check[:output] = 'No keepalive sent from client for '
589
+ check[:output] << time_since_last_keepalive.to_s + ' seconds'
583
590
  case
584
591
  when time_since_last_keepalive >= check[:thresholds][:critical]
585
- check[:output] = 'No keep-alive sent from client in over '
586
- check[:output] << check[:thresholds][:critical].to_s + ' seconds'
592
+ check[:output] << ' (>=' + check[:thresholds][:critical].to_s + ')'
587
593
  check[:status] = 2
588
594
  when time_since_last_keepalive >= check[:thresholds][:warning]
589
- check[:output] = 'No keep-alive sent from client in over '
590
- check[:output] << check[:thresholds][:warning].to_s + ' seconds'
595
+ check[:output] << ' (>=' + check[:thresholds][:warning].to_s + ')'
591
596
  check[:status] = 1
592
597
  else
593
- check[:output] = 'Keep-alive sent from client less than '
594
- check[:output] << check[:thresholds][:warning].to_s + ' seconds ago'
598
+ check[:output] = 'Keepalive sent from client '
599
+ check[:output] << time_since_last_keepalive.to_s + ' seconds ago'
595
600
  check[:status] = 0
596
601
  end
597
602
  publish_result(client, check)
data/sensu.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency('json') if RUBY_VERSION < "1.9"
17
17
  s.add_dependency('multi_json', '1.10.1')
18
18
  s.add_dependency('uuidtools', '2.1.4')
19
- s.add_dependency('sensu-em', '2.4.0')
19
+ s.add_dependency('sensu-em', '2.4.1')
20
20
  s.add_dependency('sensu-logger', '1.0.0')
21
21
  s.add_dependency('sensu-settings', '1.2.0')
22
22
  s.add_dependency('sensu-extension', '1.0.0')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Porter
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-31 00:00:00.000000000 Z
12
+ date: 2015-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - '='
47
47
  - !ruby/object:Gem::Version
48
- version: 2.4.0
48
+ version: 2.4.1
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - '='
54
54
  - !ruby/object:Gem::Version
55
- version: 2.4.0
55
+ version: 2.4.1
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: sensu-logger
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -279,9 +279,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
279
279
  version: '0'
280
280
  required_rubygems_version: !ruby/object:Gem::Requirement
281
281
  requirements:
282
- - - ">="
282
+ - - ">"
283
283
  - !ruby/object:Gem::Version
284
- version: '0'
284
+ version: 1.3.1
285
285
  requirements: []
286
286
  rubyforge_project:
287
287
  rubygems_version: 2.2.2