sensu 0.29.0 → 1.0.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/exe/sensu-install +5 -0
- data/lib/sensu/api/routes/info.rb +6 -6
- data/lib/sensu/client/utils.rb +5 -8
- data/lib/sensu/client/validators/check.rb +46 -0
- data/lib/sensu/constants.rb +6 -1
- data/lib/sensu/daemon.rb +2 -2
- data/lib/sensu/server/filter.rb +6 -6
- data/lib/sensu/server/process.rb +17 -10
- data/sensu.gemspec +2 -2
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1bd5a84798800c4931deb2ea2d3c1683f9759a7
|
4
|
+
data.tar.gz: c6c83bcba2fbac47d21e3979b3f10299b42b1ec4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1957e35b7dd9c97401d94862937a44d2fa6c92e78355088c45612a095185f692575fe8593b3edb9245e6ce904b7f6d78cb5bde4abd5a4c1b256b9b8879368fde
|
7
|
+
data.tar.gz: 672728ffed2a8e2760d7708b61e400b4fbf217996551d32ac87a647f33a764809169d7965e99204a8bd3429af659966cf897d3e92ddb3e9813d92a25eb7de2c5
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
## 1.0.0 - TBD
|
2
|
+
|
3
|
+
### Other
|
4
|
+
|
5
|
+
Improved Sensu client keepalive configuration validation, now including
|
6
|
+
coverage for low/high flap thresholds etc.
|
7
|
+
|
8
|
+
Improved Sensu client socket check result validation, now including
|
9
|
+
coverage for low/high flap thresholds etc.
|
10
|
+
|
11
|
+
The `sensu-install` tool now notifies users when it is unable to
|
12
|
+
successfully install an extension, when the environment variable
|
13
|
+
EMBEDDED_RUBY is set to `false`.
|
14
|
+
|
15
|
+
Added the Sensu `RELEASE_INFO` constant, containing information about the
|
16
|
+
Sensu release, used by the API `/info` endpoint and Server registration.
|
17
|
+
|
18
|
+
### Fixes
|
19
|
+
|
20
|
+
Sensu handler severities filtering now accounts for flapping events.
|
21
|
+
|
22
|
+
Fixed Sensu Redis connection on error reconnect, no longer reusing the
|
23
|
+
existing EventMachine connection handler.
|
24
|
+
|
1
25
|
## 0.29.0 - 2017-03-29
|
2
26
|
|
3
27
|
### Features
|
data/exe/sensu-install
CHANGED
@@ -148,6 +148,11 @@ module Sensu
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def install_extensions(extensions, options={})
|
151
|
+
if ENV["EMBEDDED_RUBY"] == "false"
|
152
|
+
log "EMBEDDED_RUBY must be set to true in order to install extensions"
|
153
|
+
log "failed to install extensions: #{extensions}"
|
154
|
+
exit 2
|
155
|
+
end
|
151
156
|
log "installing Sensu extensions ..."
|
152
157
|
log "provided Sensu extensions: #{extensions}" if options[:verbose]
|
153
158
|
extension_gems = extensions.map do |extension|
|
@@ -14,13 +14,13 @@ module Sensu
|
|
14
14
|
def get_info
|
15
15
|
transport_info do |transport|
|
16
16
|
servers_info do |servers|
|
17
|
+
sensu = RELEASE_INFO.merge(
|
18
|
+
:settings => {
|
19
|
+
:hexdigest => @settings.hexdigest
|
20
|
+
}
|
21
|
+
)
|
17
22
|
@response_content = {
|
18
|
-
:sensu =>
|
19
|
-
:version => VERSION,
|
20
|
-
:settings => {
|
21
|
-
:hexdigest => @settings.hexdigest
|
22
|
-
}
|
23
|
-
},
|
23
|
+
:sensu => sensu,
|
24
24
|
:transport => transport,
|
25
25
|
:redis => {
|
26
26
|
:connected => @redis.connected?
|
data/lib/sensu/client/utils.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
require "sensu/json"
|
2
|
+
require "sensu/client/validators/check"
|
2
3
|
|
3
4
|
module Sensu
|
4
5
|
module Client
|
5
6
|
module CheckUtils
|
6
7
|
class DataError < StandardError; end
|
8
|
+
|
7
9
|
# Validate check result attributes.
|
8
10
|
#
|
9
11
|
# @param [Hash] check result to validate.
|
10
12
|
def validate_check_result(check)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
unless check[:source].nil? || check[:source] =~ /\A[\w\.-]+\z/
|
15
|
-
raise DataError, "check source must be a string and cannot contain spaces or special characters"
|
13
|
+
validator = Validators::Check.new
|
14
|
+
unless validator.valid?(check)
|
15
|
+
raise DataError, validator.failures.first[:message]
|
16
16
|
end
|
17
17
|
unless check[:output].is_a?(String)
|
18
18
|
raise DataError, "check output must be a string"
|
@@ -23,9 +23,6 @@ module Sensu
|
|
23
23
|
unless check[:executed].is_a?(Integer)
|
24
24
|
raise DataError, "check executed timestamp must be an integer"
|
25
25
|
end
|
26
|
-
unless check[:ttl].nil? || (check[:ttl].is_a?(Integer) && check[:ttl] > 0)
|
27
|
-
raise DataError, "check ttl must be an integer greater than 0"
|
28
|
-
end
|
29
26
|
end
|
30
27
|
|
31
28
|
# Process a check result. Set check result attribute defaults,
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "sensu/settings/rules"
|
2
|
+
require "sensu/settings/validators/check"
|
3
|
+
|
4
|
+
module Sensu
|
5
|
+
module Client
|
6
|
+
module Validators
|
7
|
+
class Check
|
8
|
+
# Include Sensu Settings rules and check validator.
|
9
|
+
include Sensu::Settings::Rules
|
10
|
+
include Sensu::Settings::Validators::Check
|
11
|
+
|
12
|
+
attr_reader :failures
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@failures = []
|
16
|
+
end
|
17
|
+
|
18
|
+
# Determine if a check definition is valid.
|
19
|
+
#
|
20
|
+
# @param client [Hash]
|
21
|
+
# @return [TrueClass, FalseClass]
|
22
|
+
def valid?(check)
|
23
|
+
validate_check_name(check)
|
24
|
+
validate_check_source(check) if check[:source]
|
25
|
+
validate_check_handling(check)
|
26
|
+
validate_check_ttl(check) if check[:ttl]
|
27
|
+
validate_check_aggregate(check)
|
28
|
+
validate_check_flap_detection(check)
|
29
|
+
@failures.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# This method is called when `validate_check()` encounters an
|
35
|
+
# invalid definition object. This method adds definition
|
36
|
+
# validation failures to `@failures`.
|
37
|
+
def invalid(object, message)
|
38
|
+
@failures << {
|
39
|
+
:object => object,
|
40
|
+
:message => message
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/sensu/constants.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
module Sensu
|
2
2
|
unless defined?(Sensu::VERSION)
|
3
3
|
# Sensu release version.
|
4
|
-
VERSION = "0.
|
4
|
+
VERSION = "1.0.0.alpha.1".freeze
|
5
|
+
|
6
|
+
# Sensu release information.
|
7
|
+
RELEASE_INFO = {
|
8
|
+
:version => VERSION
|
9
|
+
}
|
5
10
|
|
6
11
|
# Sensu check severities.
|
7
12
|
SEVERITIES = %w[ok warning critical unknown].freeze
|
data/lib/sensu/daemon.rb
CHANGED
@@ -4,12 +4,12 @@ gem "eventmachine", "1.2.2"
|
|
4
4
|
|
5
5
|
gem "sensu-json", "2.1.0"
|
6
6
|
gem "sensu-logger", "1.2.1"
|
7
|
-
gem "sensu-settings", "10.
|
7
|
+
gem "sensu-settings", "10.2.0"
|
8
8
|
gem "sensu-extension", "1.5.1"
|
9
9
|
gem "sensu-extensions", "1.9.0"
|
10
10
|
gem "sensu-transport", "7.0.2"
|
11
11
|
gem "sensu-spawn", "2.2.1"
|
12
|
-
gem "sensu-redis", "2.
|
12
|
+
gem "sensu-redis", "2.2.0"
|
13
13
|
|
14
14
|
require "time"
|
15
15
|
require "uri"
|
data/lib/sensu/server/filter.rb
CHANGED
@@ -38,8 +38,11 @@ module Sensu
|
|
38
38
|
# handle, using the definition attribute `:severities`. The
|
39
39
|
# possible severities are "ok", "warning", "critical", and
|
40
40
|
# "unknown". Handler severity filtering is bypassed when the
|
41
|
-
# event `:action` is `:resolve
|
42
|
-
#
|
41
|
+
# event `:action` is `:resolve` and a previous check history
|
42
|
+
# status identifies a severity specified in the handler
|
43
|
+
# definition. It's possible for a check history status of 0 to
|
44
|
+
# have had the flapping action, so we are unable to consider
|
45
|
+
# every past 0 to indicate a resolution.
|
43
46
|
#
|
44
47
|
# @param handler [Hash] definition.
|
45
48
|
# @param event [Hash]
|
@@ -48,10 +51,7 @@ module Sensu
|
|
48
51
|
if handler.has_key?(:severities)
|
49
52
|
case event[:action]
|
50
53
|
when :resolve
|
51
|
-
event[:check][:history].
|
52
|
-
if status.to_i == 0
|
53
|
-
break false
|
54
|
-
end
|
54
|
+
event[:check][:history].any? do |status|
|
55
55
|
severity = SEVERITIES[status.to_i] || "unknown"
|
56
56
|
handler[:severities].include?(severity)
|
57
57
|
end
|
data/lib/sensu/server/process.rb
CHANGED
@@ -434,11 +434,18 @@ module Sensu
|
|
434
434
|
# @return [TrueClass, FalseClass]
|
435
435
|
def check_flapping?(stored_event, check)
|
436
436
|
if check.has_key?(:low_flap_threshold) && check.has_key?(:high_flap_threshold)
|
437
|
-
|
438
|
-
|
439
|
-
|
437
|
+
if check[:low_flap_threshold].is_a?(Integer) && check[:high_flap_threshold].is_a?(Integer)
|
438
|
+
was_flapping = stored_event && stored_event[:action] == EVENT_FLAPPING_ACTION
|
439
|
+
if was_flapping
|
440
|
+
check[:total_state_change] > check[:low_flap_threshold]
|
441
|
+
else
|
442
|
+
check[:total_state_change] >= check[:high_flap_threshold]
|
443
|
+
end
|
440
444
|
else
|
441
|
-
check
|
445
|
+
details = {:check => check}
|
446
|
+
details[:client] = stored_event[:client] if stored_event
|
447
|
+
@logger.error("invalid check flap thresholds", details)
|
448
|
+
false
|
442
449
|
end
|
443
450
|
else
|
444
451
|
false
|
@@ -1290,6 +1297,11 @@ module Sensu
|
|
1290
1297
|
def update_server_registry
|
1291
1298
|
@logger.debug("updating the server registry")
|
1292
1299
|
process_cpu_times do |cpu_user, cpu_system, _, _|
|
1300
|
+
sensu = RELEASE_INFO.merge(
|
1301
|
+
:settings => {
|
1302
|
+
:hexdigest => @settings.hexdigest
|
1303
|
+
}
|
1304
|
+
)
|
1293
1305
|
info = {
|
1294
1306
|
:id => server_id,
|
1295
1307
|
:hostname => system_hostname,
|
@@ -1301,12 +1313,7 @@ module Sensu
|
|
1301
1313
|
:system => cpu_system
|
1302
1314
|
}
|
1303
1315
|
},
|
1304
|
-
:sensu =>
|
1305
|
-
:version => VERSION,
|
1306
|
-
:settings => {
|
1307
|
-
:hexdigest => @settings.hexdigest
|
1308
|
-
}
|
1309
|
-
},
|
1316
|
+
:sensu => sensu,
|
1310
1317
|
:timestamp => Time.now.to_i
|
1311
1318
|
}
|
1312
1319
|
@redis.sadd("servers", server_id)
|
data/sensu.gemspec
CHANGED
@@ -15,12 +15,12 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.add_dependency "eventmachine", "1.2.2"
|
16
16
|
s.add_dependency "sensu-json", "2.1.0"
|
17
17
|
s.add_dependency "sensu-logger", "1.2.1"
|
18
|
-
s.add_dependency "sensu-settings", "10.
|
18
|
+
s.add_dependency "sensu-settings", "10.2.0"
|
19
19
|
s.add_dependency "sensu-extension", "1.5.1"
|
20
20
|
s.add_dependency "sensu-extensions", "1.9.0"
|
21
21
|
s.add_dependency "sensu-transport", "7.0.2"
|
22
22
|
s.add_dependency "sensu-spawn", "2.2.1"
|
23
|
-
s.add_dependency "sensu-redis", "2.
|
23
|
+
s.add_dependency "sensu-redis", "2.2.0"
|
24
24
|
s.add_dependency "em-http-server", "0.1.8"
|
25
25
|
s.add_dependency "parse-cron", "0.1.4"
|
26
26
|
|
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.
|
4
|
+
version: 1.0.0.alpha.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Porter
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-06-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -59,14 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - '='
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 10.
|
62
|
+
version: 10.2.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - '='
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 10.
|
69
|
+
version: 10.2.0
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: sensu-extension
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,14 +129,14 @@ dependencies:
|
|
129
129
|
requirements:
|
130
130
|
- - '='
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: 2.
|
132
|
+
version: 2.2.0
|
133
133
|
type: :runtime
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - '='
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 2.
|
139
|
+
version: 2.2.0
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: em-http-server
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
@@ -269,6 +269,7 @@ files:
|
|
269
269
|
- lib/sensu/client/process.rb
|
270
270
|
- lib/sensu/client/socket.rb
|
271
271
|
- lib/sensu/client/utils.rb
|
272
|
+
- lib/sensu/client/validators/check.rb
|
272
273
|
- lib/sensu/constants.rb
|
273
274
|
- lib/sensu/daemon.rb
|
274
275
|
- lib/sensu/sandbox.rb
|
@@ -294,12 +295,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
294
295
|
version: '0'
|
295
296
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
296
297
|
requirements:
|
297
|
-
- - "
|
298
|
+
- - ">"
|
298
299
|
- !ruby/object:Gem::Version
|
299
|
-
version:
|
300
|
+
version: 1.3.1
|
300
301
|
requirements: []
|
301
302
|
rubyforge_project:
|
302
|
-
rubygems_version: 2.6.
|
303
|
+
rubygems_version: 2.6.11
|
303
304
|
signing_key:
|
304
305
|
specification_version: 4
|
305
306
|
summary: A monitoring framework
|