sensu 0.11.0.beta → 0.11.0.beta.1
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/CHANGELOG.md +8 -0
- data/lib/sensu/base.rb +1 -1
- data/lib/sensu/client.rb +1 -1
- data/lib/sensu/constants.rb +1 -1
- data/lib/sensu/rabbitmq.rb +26 -4
- data/lib/sensu/settings.rb +11 -1
- data/lib/sensu/utilities.rb +9 -3
- data/sensu.gemspec +2 -2
- metadata +52 -51
data/CHANGELOG.md
CHANGED
@@ -14,6 +14,10 @@ as an argument to run.
|
|
14
14
|
You can specify the Sensu log severity level using the -L (--log_level)
|
15
15
|
CLI argument, providing a valid level (eg. warn).
|
16
16
|
|
17
|
+
You can specify custom sensitive Sensu client key/values to be redacted
|
18
|
+
from log events and keepalives, eg. "client": { "redact":
|
19
|
+
["secret_access_key"] }.
|
20
|
+
|
17
21
|
### Other
|
18
22
|
|
19
23
|
Sensu passes a dup of event data to mutator & handler extensions to
|
@@ -23,6 +27,10 @@ Extension runs are wrapped in a begin/rescue block, a safety net.
|
|
23
27
|
|
24
28
|
UDP handler now binds to "0.0.0.0".
|
25
29
|
|
30
|
+
Faster JSON parser.
|
31
|
+
|
32
|
+
Missing AMQP connection heartbeats will result in a reconnect.
|
33
|
+
|
26
34
|
## 0.10.2 - 2013-07-18
|
27
35
|
|
28
36
|
### Other
|
data/lib/sensu/base.rb
CHANGED
data/lib/sensu/client.rb
CHANGED
@@ -49,7 +49,7 @@ module Sensu
|
|
49
49
|
|
50
50
|
def publish_keepalive
|
51
51
|
keepalive = @settings[:client].merge(:timestamp => Time.now.to_i)
|
52
|
-
payload =
|
52
|
+
payload = redact_sensitive(keepalive, @settings[:client][:redact])
|
53
53
|
@logger.debug('publishing keepalive', {
|
54
54
|
:payload => payload
|
55
55
|
})
|
data/lib/sensu/constants.rb
CHANGED
data/lib/sensu/rabbitmq.rb
CHANGED
@@ -1,7 +1,27 @@
|
|
1
|
-
gem 'amqp', '0.
|
1
|
+
gem 'amqp', '1.0.0'
|
2
2
|
|
3
3
|
require 'amqp'
|
4
4
|
|
5
|
+
module AMQ
|
6
|
+
module Client
|
7
|
+
module Async
|
8
|
+
module Adapter
|
9
|
+
def send_heartbeat
|
10
|
+
if tcp_connection_established? && !reconnecting?
|
11
|
+
if !@handling_skipped_hearbeats && @last_server_heartbeat
|
12
|
+
send_frame(Protocol::HeartbeatFrame)
|
13
|
+
if @last_server_heartbeat < (Time.now - (self.heartbeat_interval * 2))
|
14
|
+
logger.error('detected missing amqp heartbeats')
|
15
|
+
self.handle_skipped_hearbeats
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
5
25
|
module Sensu
|
6
26
|
class RabbitMQError < StandardError; end
|
7
27
|
|
@@ -36,12 +56,14 @@ module Sensu
|
|
36
56
|
:on_possible_authentication_failure => on_failure
|
37
57
|
})
|
38
58
|
@connection.logger = Logger.get
|
39
|
-
|
40
|
-
unless connection.reconnecting?
|
59
|
+
reconnect = Proc.new do
|
60
|
+
unless @connection.reconnecting?
|
41
61
|
@before_reconnect.call
|
42
|
-
connection.periodically_reconnect(5)
|
62
|
+
@connection.periodically_reconnect(5)
|
43
63
|
end
|
44
64
|
end
|
65
|
+
@connection.on_tcp_connection_loss(&reconnect)
|
66
|
+
@connection.on_skipped_heartbeats(&reconnect)
|
45
67
|
@channel = AMQP::Channel.new(@connection)
|
46
68
|
@channel.auto_recovery = true
|
47
69
|
@channel.on_error do |channel, channel_close|
|
data/lib/sensu/settings.rb
CHANGED
@@ -90,7 +90,7 @@ module Sensu
|
|
90
90
|
changes = deep_diff(@settings, merged)
|
91
91
|
@logger.warn('config file applied changes', {
|
92
92
|
:config_file => file,
|
93
|
-
:changes =>
|
93
|
+
:changes => redact_sensitive(changes)
|
94
94
|
})
|
95
95
|
end
|
96
96
|
@settings = merged
|
@@ -429,6 +429,16 @@ module Sensu
|
|
429
429
|
end
|
430
430
|
end
|
431
431
|
end
|
432
|
+
if @settings[:client].has_key?(:redact)
|
433
|
+
unless @settings[:client][:redact].is_a?(Array)
|
434
|
+
invalid('client redact must be an array')
|
435
|
+
end
|
436
|
+
@settings[:client][:redact].each do |key|
|
437
|
+
unless key.is_a?(String) && !key.empty?
|
438
|
+
invalid('client redact keys must each be a string')
|
439
|
+
end
|
440
|
+
end
|
441
|
+
end
|
432
442
|
end
|
433
443
|
|
434
444
|
def validate_api
|
data/lib/sensu/utilities.rb
CHANGED
@@ -58,13 +58,19 @@ module Sensu
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
61
|
+
def redact_sensitive(hash, keys=nil)
|
62
|
+
keys ||= %w[
|
63
|
+
password passwd pass
|
64
|
+
api_key api_token
|
65
|
+
access_key secret_key private_key
|
66
|
+
secret
|
67
|
+
]
|
62
68
|
hash = hash.dup
|
63
69
|
hash.each do |key, value|
|
64
|
-
if
|
70
|
+
if keys.include?(key.to_s)
|
65
71
|
hash[key] = "REDACTED"
|
66
72
|
elsif value.is_a?(Hash)
|
67
|
-
hash[key] =
|
73
|
+
hash[key] = redact_sensitive(value, keys)
|
68
74
|
end
|
69
75
|
end
|
70
76
|
hash
|
data/sensu.gemspec
CHANGED
@@ -13,9 +13,9 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.license = 'MIT'
|
14
14
|
s.has_rdoc = false
|
15
15
|
|
16
|
-
s.add_dependency('oj', '2.
|
16
|
+
s.add_dependency('oj', '2.1.4')
|
17
17
|
s.add_dependency('eventmachine', '1.0.3')
|
18
|
-
s.add_dependency('amqp', '0.
|
18
|
+
s.add_dependency('amqp', '1.0.0')
|
19
19
|
s.add_dependency('em-redis-unified', '0.4.1')
|
20
20
|
s.add_dependency('thin', '1.5.0')
|
21
21
|
s.add_dependency('sinatra', '1.3.5')
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -2637871616
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 11
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
|
11
|
+
- 1
|
12
|
+
version: 0.11.0.beta.1
|
12
13
|
platform: ruby
|
13
14
|
authors:
|
14
15
|
- Sean Porter
|
@@ -17,27 +18,29 @@ autorequire:
|
|
17
18
|
bindir: bin
|
18
19
|
cert_chain: []
|
19
20
|
|
20
|
-
date: 2013-08-
|
21
|
+
date: 2013-08-28 00:00:00 -07:00
|
21
22
|
default_executable:
|
22
23
|
dependencies:
|
23
24
|
- !ruby/object:Gem::Dependency
|
24
|
-
|
25
|
+
name: oj
|
26
|
+
prerelease: false
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
28
|
none: false
|
26
29
|
requirements:
|
27
30
|
- - "="
|
28
31
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
32
|
+
hash: 3
|
30
33
|
segments:
|
31
34
|
- 2
|
32
|
-
-
|
33
|
-
-
|
34
|
-
version: 2.
|
35
|
-
requirement: *id001
|
35
|
+
- 1
|
36
|
+
- 4
|
37
|
+
version: 2.1.4
|
36
38
|
type: :runtime
|
37
|
-
|
38
|
-
prerelease: false
|
39
|
+
version_requirements: *id001
|
39
40
|
- !ruby/object:Gem::Dependency
|
40
|
-
|
41
|
+
name: eventmachine
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
44
|
none: false
|
42
45
|
requirements:
|
43
46
|
- - "="
|
@@ -48,28 +51,28 @@ dependencies:
|
|
48
51
|
- 0
|
49
52
|
- 3
|
50
53
|
version: 1.0.3
|
51
|
-
requirement: *id002
|
52
54
|
type: :runtime
|
53
|
-
|
54
|
-
prerelease: false
|
55
|
+
version_requirements: *id002
|
55
56
|
- !ruby/object:Gem::Dependency
|
56
|
-
|
57
|
+
name: amqp
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
60
|
none: false
|
58
61
|
requirements:
|
59
62
|
- - "="
|
60
63
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
64
|
+
hash: 23
|
62
65
|
segments:
|
66
|
+
- 1
|
67
|
+
- 0
|
63
68
|
- 0
|
64
|
-
|
65
|
-
- 10
|
66
|
-
version: 0.9.10
|
67
|
-
requirement: *id003
|
69
|
+
version: 1.0.0
|
68
70
|
type: :runtime
|
69
|
-
|
70
|
-
prerelease: false
|
71
|
+
version_requirements: *id003
|
71
72
|
- !ruby/object:Gem::Dependency
|
72
|
-
|
73
|
+
name: em-redis-unified
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
76
|
none: false
|
74
77
|
requirements:
|
75
78
|
- - "="
|
@@ -80,12 +83,12 @@ dependencies:
|
|
80
83
|
- 4
|
81
84
|
- 1
|
82
85
|
version: 0.4.1
|
83
|
-
requirement: *id004
|
84
86
|
type: :runtime
|
85
|
-
|
86
|
-
prerelease: false
|
87
|
+
version_requirements: *id004
|
87
88
|
- !ruby/object:Gem::Dependency
|
88
|
-
|
89
|
+
name: thin
|
90
|
+
prerelease: false
|
91
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
92
|
none: false
|
90
93
|
requirements:
|
91
94
|
- - "="
|
@@ -96,12 +99,12 @@ dependencies:
|
|
96
99
|
- 5
|
97
100
|
- 0
|
98
101
|
version: 1.5.0
|
99
|
-
requirement: *id005
|
100
102
|
type: :runtime
|
101
|
-
|
102
|
-
prerelease: false
|
103
|
+
version_requirements: *id005
|
103
104
|
- !ruby/object:Gem::Dependency
|
104
|
-
|
105
|
+
name: sinatra
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
105
108
|
none: false
|
106
109
|
requirements:
|
107
110
|
- - "="
|
@@ -112,12 +115,12 @@ dependencies:
|
|
112
115
|
- 3
|
113
116
|
- 5
|
114
117
|
version: 1.3.5
|
115
|
-
requirement: *id006
|
116
118
|
type: :runtime
|
117
|
-
|
118
|
-
prerelease: false
|
119
|
+
version_requirements: *id006
|
119
120
|
- !ruby/object:Gem::Dependency
|
120
|
-
|
121
|
+
name: async_sinatra
|
122
|
+
prerelease: false
|
123
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
121
124
|
none: false
|
122
125
|
requirements:
|
123
126
|
- - "="
|
@@ -128,12 +131,12 @@ dependencies:
|
|
128
131
|
- 0
|
129
132
|
- 0
|
130
133
|
version: 1.0.0
|
131
|
-
requirement: *id007
|
132
134
|
type: :runtime
|
133
|
-
|
134
|
-
prerelease: false
|
135
|
+
version_requirements: *id007
|
135
136
|
- !ruby/object:Gem::Dependency
|
136
|
-
|
137
|
+
name: rake
|
138
|
+
prerelease: false
|
139
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
137
140
|
none: false
|
138
141
|
requirements:
|
139
142
|
- - ">="
|
@@ -142,12 +145,12 @@ dependencies:
|
|
142
145
|
segments:
|
143
146
|
- 0
|
144
147
|
version: "0"
|
145
|
-
requirement: *id008
|
146
148
|
type: :development
|
147
|
-
|
148
|
-
prerelease: false
|
149
|
+
version_requirements: *id008
|
149
150
|
- !ruby/object:Gem::Dependency
|
150
|
-
|
151
|
+
name: rspec
|
152
|
+
prerelease: false
|
153
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
151
154
|
none: false
|
152
155
|
requirements:
|
153
156
|
- - ">="
|
@@ -156,12 +159,12 @@ dependencies:
|
|
156
159
|
segments:
|
157
160
|
- 0
|
158
161
|
version: "0"
|
159
|
-
requirement: *id009
|
160
162
|
type: :development
|
161
|
-
|
162
|
-
prerelease: false
|
163
|
+
version_requirements: *id009
|
163
164
|
- !ruby/object:Gem::Dependency
|
164
|
-
|
165
|
+
name: em-http-request
|
166
|
+
prerelease: false
|
167
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
165
168
|
none: false
|
166
169
|
requirements:
|
167
170
|
- - ">="
|
@@ -170,10 +173,8 @@ dependencies:
|
|
170
173
|
segments:
|
171
174
|
- 0
|
172
175
|
version: "0"
|
173
|
-
requirement: *id010
|
174
176
|
type: :development
|
175
|
-
|
176
|
-
prerelease: false
|
177
|
+
version_requirements: *id010
|
177
178
|
description: A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model.
|
178
179
|
email:
|
179
180
|
- portertech@gmail.com
|