sensu 1.2.1 → 1.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ffda8bc29ab44f27d429a83caca7dc70c779c474
4
- data.tar.gz: 1be8182e6b77bc9ad9be630e74f5b3511d5a60f1
3
+ metadata.gz: 470d5d06d500705e8017f9d70e6094c247112445
4
+ data.tar.gz: 6f9cabd3ec17b07adf35978555a0143e9cc8a4dd
5
5
  SHA512:
6
- metadata.gz: 576a015911e86dce7699586be7904777590a47e9a6ec88f20116b569f6ce685931e426084bd15e57225a271dc9d767882968c61f3377484d49debed48e95ac2a
7
- data.tar.gz: 9c8fcb61b2405cc8aae22ec16fe61836830c521700f9d017b21da15e705d548a4feab3273afe933f2b236194db92dc7606d5e4de83d7c3dac3f69b139050cd3d
6
+ metadata.gz: f061b1950a4f8567743b79286b7e931df6e50c0d930c7313eb8ec6d1ee879d7c3c89c8e6c044e585d1ca487f87c75184563a89c695682ae55a20342307b3c90c
7
+ data.tar.gz: 7d608cb8b7d23298aa40f21fb0b86174f6171936bc37d1a3bfc0e44243b7bbc3cf96d6162787b02f92ef85e1362bfe8d0eba72e7e839c4e15ab8fe8aefb56b3b
checksums.yaml.gz.sig ADDED
@@ -0,0 +1 @@
1
+ m�Ą�,D.x�٬��Ŀ~�H��-�N-.x�qa'U4Ɂ���+Zܑ ����&��ǔ��� �nGX8!x�u�����t7��d���Zi�|�p���=�}M,/��^>�P4J+��&�8��%<�{�xF�� ���G�c��Sv9�{�n���zu%�h��њ�*r�%���L��-H7�JT�)���"�h_��M�����%Zd�l��8��e��X�^���E>|=�y6�k��˽�j�+$4�=$�����O�|'X�
data.tar.gz.sig ADDED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,3 +1,38 @@
1
+ ## 1.3.0 - 2018-03-09
2
+
3
+ ### Features
4
+
5
+ Redis TLS connection support. Sensu Redis connections can now be
6
+ configured to use TLS, this includes the Sensu server and Redis
7
+ transport connections! The Sensu Redis configuration definition now
8
+ includes the optional "tls" (or "ssl") attribute, a hash containing
9
+ TLS options ("private_key_file", "cert_chain_file", and
10
+ "verify_peer").
11
+
12
+ The Sensu client TCP/UDP socket can now be disabled via configuration.
13
+ The Sensu client configuration definition now includes the socket
14
+ "enabled" attribute, which defaults to `true`, and it can be set to
15
+ `false` in order to disable the socket. (#1799)
16
+
17
+ The Sensu Ruby gems are now cryptographically signed. To learn more
18
+ about Ruby gem signing, [please refer to the RubyGems security
19
+ guide](http://guides.rubygems.org/security/). (#1819)
20
+
21
+ The Sensu API POST /clients endpoint no longer requires client
22
+ subscriptions to be specified. (#1795)
23
+
24
+ All Sensu event handler types now include event ID in log events.
25
+
26
+ ### Fixes
27
+
28
+ Sensu TCP event handlers will no longer connect to a socket if the
29
+ provided event data is nil or empty. (#1734)
30
+
31
+ The RabbitMQ transport will now reconnect after failing to resolve
32
+ DNS, instead of independently retrying broker hostname resolution.
33
+ This fixes retry timer backoff and allows the transport to connect to
34
+ another eligible broker after failing to resolve a hostname.
35
+
1
36
  ## 1.2.1 - 2018-02-06
2
37
 
3
38
  ### Fixes
@@ -17,6 +17,7 @@ module Sensu
17
17
  client[:keepalives] = client.fetch(:keepalives, false)
18
18
  client[:version] = VERSION
19
19
  client[:timestamp] = Time.now.to_i
20
+ client[:subscriptions] ||= []
20
21
  validator = Validators::Client.new
21
22
  if validator.valid?(client)
22
23
  client[:subscriptions] = (client[:subscriptions] + ["client:#{client[:name]}"]).uniq
@@ -455,8 +455,9 @@ module Sensu
455
455
  # Setup the Sensu client JSON socket, for external check result
456
456
  # input. By default, the client socket is bound to localhost on
457
457
  # TCP & UDP port 3030. The socket can be configured via the
458
- # client definition, `:socket` with `:bind` and `:port`. The
459
- # current instance of the Sensu logger, settings, and transport
458
+ # client definition, `:socket` with `:bind` and `:port`. Users can opt-out
459
+ # of using the TCP and UDP socket by setting `:enabled` to `false`.
460
+ # The current instance of the Sensu logger, settings, and transport
460
461
  # are passed to the socket handler, `Sensu::Client::Socket`. The
461
462
  # TCP socket server signature (Fixnum) and UDP connection object
462
463
  # are stored in `@sockets`, so that they can be managed
@@ -465,17 +466,21 @@ module Sensu
465
466
  options = @settings[:client][:socket] || Hash.new
466
467
  options[:bind] ||= "127.0.0.1"
467
468
  options[:port] ||= 3030
468
- @logger.debug("binding client tcp and udp sockets", :options => options)
469
- @sockets << EM::start_server(options[:bind], options[:port], Socket) do |socket|
470
- socket.logger = @logger
471
- socket.settings = @settings
472
- socket.transport = @transport
473
- end
474
- @sockets << EM::open_datagram_socket(options[:bind], options[:port], Socket) do |socket|
475
- socket.logger = @logger
476
- socket.settings = @settings
477
- socket.transport = @transport
478
- socket.protocol = :udp
469
+ unless options[:enabled] == false
470
+ @logger.debug("binding client tcp and udp sockets", :options => options)
471
+ @sockets << EM::start_server(options[:bind], options[:port], Socket) do |socket|
472
+ socket.logger = @logger
473
+ socket.settings = @settings
474
+ socket.transport = @transport
475
+ end
476
+ @sockets << EM::open_datagram_socket(options[:bind], options[:port], Socket) do |socket|
477
+ socket.logger = @logger
478
+ socket.settings = @settings
479
+ socket.transport = @transport
480
+ socket.protocol = :udp
481
+ end
482
+ else
483
+ @logger.info("client tcp/udp socket disabled per configuration")
479
484
  end
480
485
  end
481
486
 
@@ -500,6 +505,8 @@ module Sensu
500
505
  socket.settings = @settings
501
506
  socket.transport = @transport
502
507
  end
508
+ else
509
+ @logger.info("client http socket disabled per configuration")
503
510
  end
504
511
  end
505
512
 
@@ -1,7 +1,7 @@
1
1
  module Sensu
2
2
  unless defined?(Sensu::VERSION)
3
3
  # Sensu release version.
4
- VERSION = "1.2.1".freeze
4
+ VERSION = "1.3.0".freeze
5
5
 
6
6
  # Sensu release information.
7
7
  RELEASE_INFO = {
data/lib/sensu/daemon.rb CHANGED
@@ -2,14 +2,14 @@ require "rubygems"
2
2
 
3
3
  gem "eventmachine", "1.2.5"
4
4
 
5
- gem "sensu-json", "2.1.0"
6
- gem "sensu-logger", "1.2.1"
7
- gem "sensu-settings", "10.12.0"
8
- gem "sensu-extension", "1.5.1"
9
- gem "sensu-extensions", "1.9.0"
10
- gem "sensu-transport", "7.0.2"
11
- gem "sensu-spawn", "2.2.1"
12
- gem "sensu-redis", "2.2.0"
5
+ gem "sensu-json", "2.1.1"
6
+ gem "sensu-logger", "1.2.2"
7
+ gem "sensu-settings", "10.13.1"
8
+ gem "sensu-extension", "1.5.2"
9
+ gem "sensu-extensions", "1.9.1"
10
+ gem "sensu-transport", "7.1.0"
11
+ gem "sensu-spawn", "2.2.2"
12
+ gem "sensu-redis", "2.3.0"
13
13
 
14
14
  require "time"
15
15
  require "uri"
@@ -8,11 +8,15 @@ module Sensu
8
8
  #
9
9
  # @param handler [Object]
10
10
  # @param event_data [Object]
11
+ # @param event_id [String] event UUID
11
12
  # @return [Proc] error callback.
12
- def handler_error(handler, event_data)
13
+ def handler_error(handler, event_data, event_id)
13
14
  Proc.new do |error|
14
15
  @logger.error("handler error", {
15
16
  :handler => handler,
17
+ :event => {
18
+ :id => event_id
19
+ },
16
20
  :event_data => event_data,
17
21
  :error => error.to_s
18
22
  })
@@ -40,7 +44,9 @@ module Sensu
40
44
  log_level = status == 0 ? :info : :error
41
45
  @logger.send(log_level, "handler output", {
42
46
  :handler => handler,
43
- :event => { :id => event_id },
47
+ :event => {
48
+ :id => event_id
49
+ },
44
50
  :output => output.split("\n+")
45
51
  })
46
52
  @in_progress[:events] -= 1 if @in_progress
@@ -59,21 +65,32 @@ module Sensu
59
65
  #
60
66
  # @param handler [Hash] definition.
61
67
  # @param event_data [Object] to transmit to the TCP socket.
62
- def tcp_handler(handler, event_data)
63
- on_error = handler_error(handler, event_data)
64
- begin
65
- EM::connect(handler[:socket][:host], handler[:socket][:port], Socket) do |socket|
66
- socket.on_success = Proc.new do
67
- @in_progress[:events] -= 1 if @in_progress
68
+ # @param event_id [String] event UUID
69
+ def tcp_handler(handler, event_data, event_id)
70
+ unless event_data.nil? || event_data.empty?
71
+ on_error = handler_error(handler, event_data, event_id)
72
+ begin
73
+ EM::connect(handler[:socket][:host], handler[:socket][:port], Socket) do |socket|
74
+ socket.on_success = Proc.new do
75
+ @in_progress[:events] -= 1 if @in_progress
76
+ end
77
+ socket.on_error = on_error
78
+ timeout = handler[:timeout] || 10
79
+ socket.set_timeout(timeout)
80
+ socket.send_data(event_data.to_s)
81
+ socket.close_connection_after_writing
68
82
  end
69
- socket.on_error = on_error
70
- timeout = handler[:timeout] || 10
71
- socket.set_timeout(timeout)
72
- socket.send_data(event_data.to_s)
73
- socket.close_connection_after_writing
83
+ rescue => error
84
+ on_error.call(error)
74
85
  end
75
- rescue => error
76
- on_error.call(error)
86
+ else
87
+ @logger.debug("not connecting to tcp socket due to empty event data", {
88
+ :handler => handler,
89
+ :event => {
90
+ :id => event_id
91
+ }
92
+ })
93
+ @in_progress[:events] -= 1 if @in_progress
77
94
  end
78
95
  end
79
96
 
@@ -83,7 +100,8 @@ module Sensu
83
100
  #
84
101
  # @param handler [Hash] definition.
85
102
  # @param event_data [Object] to transmit to the UDP socket.
86
- def udp_handler(handler, event_data)
103
+ # @param event_id [String] event UUID
104
+ def udp_handler(handler, event_data, event_id)
87
105
  begin
88
106
  EM::open_datagram_socket("0.0.0.0", 0, nil) do |socket|
89
107
  socket.send_datagram(event_data.to_s, handler[:socket][:host], handler[:socket][:port])
@@ -91,7 +109,7 @@ module Sensu
91
109
  @in_progress[:events] -= 1 if @in_progress
92
110
  end
93
111
  rescue => error
94
- handler_error(handler, event_data).call(error)
112
+ handler_error(handler, event_data, event_id).call(error)
95
113
  end
96
114
  end
97
115
 
@@ -102,13 +120,14 @@ module Sensu
102
120
  #
103
121
  # @param handler [Hash] definition.
104
122
  # @param event_data [Object] to publish to the transport pipe.
105
- def transport_handler(handler, event_data)
123
+ # @param event_id [String] event UUID
124
+ def transport_handler(handler, event_data, event_id)
106
125
  unless event_data.nil? || event_data.empty?
107
126
  pipe = handler[:pipe]
108
127
  pipe_options = pipe[:options] || {}
109
128
  @transport.publish(pipe[:type].to_sym, pipe[:name], event_data, pipe_options) do |info|
110
129
  if info[:error]
111
- handler_error(handler, event_data).call(info[:error])
130
+ handler_error(handler, event_data, event_id).call(info[:error])
112
131
  end
113
132
  end
114
133
  end
@@ -129,7 +148,9 @@ module Sensu
129
148
  log_level = (output.empty? && status.zero?) ? :debug : :info
130
149
  @logger.send(log_level, "handler extension output", {
131
150
  :extension => handler.definition,
132
- :event => { :id => event_id },
151
+ :event => {
152
+ :id => event_id
153
+ },
133
154
  :output => output,
134
155
  :status => status
135
156
  })
@@ -148,11 +169,11 @@ module Sensu
148
169
  when "pipe"
149
170
  pipe_handler(handler, event_data, event_id)
150
171
  when "tcp"
151
- tcp_handler(handler, event_data)
172
+ tcp_handler(handler, event_data, event_id)
152
173
  when "udp"
153
- udp_handler(handler, event_data)
174
+ udp_handler(handler, event_data, event_id)
154
175
  when "transport"
155
- transport_handler(handler, event_data)
176
+ transport_handler(handler, event_data, event_id)
156
177
  when "extension"
157
178
  handler_extension(handler, event_data, event_id)
158
179
  end
data/sensu.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
5
5
  s.name = "sensu"
6
6
  s.version = Sensu::VERSION
7
7
  s.authors = ["Sean Porter", "Justin Kolberg"]
8
- s.email = ["portertech@gmail.com", "amdprophet@gmail.com"]
8
+ s.email = ["portertech@gmail.com", "amdprophet@gmail.com", "engineering@sensu.io"]
9
9
  s.homepage = "http://sensuapp.org"
10
10
  s.summary = "A monitoring framework"
11
11
  s.description = "A monitoring framework that aims to be simple, malleable, and scalable."
@@ -13,14 +13,14 @@ Gem::Specification.new do |s|
13
13
  s.has_rdoc = false
14
14
 
15
15
  s.add_dependency "eventmachine", "1.2.5"
16
- s.add_dependency "sensu-json", "2.1.0"
17
- s.add_dependency "sensu-logger", "1.2.1"
18
- s.add_dependency "sensu-settings", "10.12.0"
19
- s.add_dependency "sensu-extension", "1.5.1"
20
- s.add_dependency "sensu-extensions", "1.9.0"
21
- s.add_dependency "sensu-transport", "7.0.2"
22
- s.add_dependency "sensu-spawn", "2.2.1"
23
- s.add_dependency "sensu-redis", "2.2.0"
16
+ s.add_dependency "sensu-json", "2.1.1"
17
+ s.add_dependency "sensu-logger", "1.2.2"
18
+ s.add_dependency "sensu-settings", "10.13.1"
19
+ s.add_dependency "sensu-extension", "1.5.2"
20
+ s.add_dependency "sensu-extensions", "1.9.1"
21
+ s.add_dependency "sensu-transport", "7.1.0"
22
+ s.add_dependency "sensu-spawn", "2.2.2"
23
+ s.add_dependency "sensu-redis", "2.3.0"
24
24
  s.add_dependency "em-http-server", "0.1.8"
25
25
  s.add_dependency "parse-cron", "0.1.4"
26
26
 
@@ -33,4 +33,6 @@ Gem::Specification.new do |s|
33
33
  s.executables = s.files.grep(%r{^exe/}) { |file| File.basename(file) }
34
34
  s.bindir = "exe"
35
35
  s.require_paths = ["lib"]
36
+ s.cert_chain = ['certs/sensu.pem']
37
+ s.signing_key = File.expand_path("~/.ssh/gem-sensu-private_key.pem") if $0 =~ /gem\z/
36
38
  end
metadata CHANGED
@@ -1,15 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Porter
8
8
  - Justin Kolberg
9
9
  autorequire:
10
10
  bindir: exe
11
- cert_chain: []
12
- date: 2018-02-07 00:00:00.000000000 Z
11
+ cert_chain:
12
+ - |
13
+ -----BEGIN CERTIFICATE-----
14
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRQwEgYDVQQDDAtlbmdp
15
+ bmVlcmluZzEVMBMGCgmSJomT8ixkARkWBXNlbnN1MRIwEAYKCZImiZPyLGQBGRYC
16
+ aW8wHhcNMTgwMzAyMjIxNTA2WhcNMTkwMzAyMjIxNTA2WjBBMRQwEgYDVQQDDAtl
17
+ bmdpbmVlcmluZzEVMBMGCgmSJomT8ixkARkWBXNlbnN1MRIwEAYKCZImiZPyLGQB
18
+ GRYCaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFiEE/Mer+J4jX
19
+ UWH/jedrTgixZ6MTVmDXroqLHCsQ+btu5+k3fbtsjulmnJyrpt/SAA4Ylb90y37A
20
+ obuJJHGL5LCT94WUI3AoqJYCBo7z2BbE+/b/Q9dCsyt91qQsgU56GLi5Leljd8YI
21
+ Q+tvSqbStVjsBtLrFRkpMVYMo3JcmqYT68pzLJTIlLU9OpNcPMUOOFcxVfv4YAOl
22
+ w73scBA8VySrZlpydYbmjBGhhD2766nl46SYqXXZewR7+2j3exEJxG17OiGFKQcV
23
+ pXqOeTM0kIPtb+UMvBuJ882rlJ+mgsALqNQdZTFcfvr4NhCgBPtEPehAsVTOosPZ
24
+ 3fAWy+UhAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
25
+ BBRL9qnIxrqcdUuc2RO9XDKN/ZVoEDAfBgNVHREEGDAWgRRlbmdpbmVlcmluZ0Bz
26
+ ZW5zdS5pbzAfBgNVHRIEGDAWgRRlbmdpbmVlcmluZ0BzZW5zdS5pbzANBgkqhkiG
27
+ 9w0BAQUFAAOCAQEAuNsslABtgeYx81Qa+h9CeRlvTG36+ZLApFBlpywU5gcojl7/
28
+ 488Ji9YH6A1RDKENfSfbd5jfvaWUKgF7/PvJqZQ2ABI7ssoX6XF8s19b3GwnfkYD
29
+ 6aveBKPk+4F3qPzv82/QF1vzDzrSqNIaCtHLMnupMcB34TWgVAibShf0XXu2ePId
30
+ szNjBUMQ7lXr/eR8rLpwoyd1JYICe3DjYCyj6T9xfFLMcUbrb1Wcn5gtYrp9y3PI
31
+ jOeGyhtQa9j4FFmsEJDg59f5v/3hECXsa3Xuml3foaFHzX3Ya/YIyd2YFxvkFKIu
32
+ GVbe7A3YdxzdkH2Es/Ym9twdxXaIDdXzj8sWhw==
33
+ -----END CERTIFICATE-----
34
+ date: 2018-03-09 00:00:00.000000000 Z
13
35
  dependencies:
14
36
  - !ruby/object:Gem::Dependency
15
37
  name: eventmachine
@@ -31,112 +53,112 @@ dependencies:
31
53
  requirements:
32
54
  - - '='
33
55
  - !ruby/object:Gem::Version
34
- version: 2.1.0
56
+ version: 2.1.1
35
57
  type: :runtime
36
58
  prerelease: false
37
59
  version_requirements: !ruby/object:Gem::Requirement
38
60
  requirements:
39
61
  - - '='
40
62
  - !ruby/object:Gem::Version
41
- version: 2.1.0
63
+ version: 2.1.1
42
64
  - !ruby/object:Gem::Dependency
43
65
  name: sensu-logger
44
66
  requirement: !ruby/object:Gem::Requirement
45
67
  requirements:
46
68
  - - '='
47
69
  - !ruby/object:Gem::Version
48
- version: 1.2.1
70
+ version: 1.2.2
49
71
  type: :runtime
50
72
  prerelease: false
51
73
  version_requirements: !ruby/object:Gem::Requirement
52
74
  requirements:
53
75
  - - '='
54
76
  - !ruby/object:Gem::Version
55
- version: 1.2.1
77
+ version: 1.2.2
56
78
  - !ruby/object:Gem::Dependency
57
79
  name: sensu-settings
58
80
  requirement: !ruby/object:Gem::Requirement
59
81
  requirements:
60
82
  - - '='
61
83
  - !ruby/object:Gem::Version
62
- version: 10.12.0
84
+ version: 10.13.1
63
85
  type: :runtime
64
86
  prerelease: false
65
87
  version_requirements: !ruby/object:Gem::Requirement
66
88
  requirements:
67
89
  - - '='
68
90
  - !ruby/object:Gem::Version
69
- version: 10.12.0
91
+ version: 10.13.1
70
92
  - !ruby/object:Gem::Dependency
71
93
  name: sensu-extension
72
94
  requirement: !ruby/object:Gem::Requirement
73
95
  requirements:
74
96
  - - '='
75
97
  - !ruby/object:Gem::Version
76
- version: 1.5.1
98
+ version: 1.5.2
77
99
  type: :runtime
78
100
  prerelease: false
79
101
  version_requirements: !ruby/object:Gem::Requirement
80
102
  requirements:
81
103
  - - '='
82
104
  - !ruby/object:Gem::Version
83
- version: 1.5.1
105
+ version: 1.5.2
84
106
  - !ruby/object:Gem::Dependency
85
107
  name: sensu-extensions
86
108
  requirement: !ruby/object:Gem::Requirement
87
109
  requirements:
88
110
  - - '='
89
111
  - !ruby/object:Gem::Version
90
- version: 1.9.0
112
+ version: 1.9.1
91
113
  type: :runtime
92
114
  prerelease: false
93
115
  version_requirements: !ruby/object:Gem::Requirement
94
116
  requirements:
95
117
  - - '='
96
118
  - !ruby/object:Gem::Version
97
- version: 1.9.0
119
+ version: 1.9.1
98
120
  - !ruby/object:Gem::Dependency
99
121
  name: sensu-transport
100
122
  requirement: !ruby/object:Gem::Requirement
101
123
  requirements:
102
124
  - - '='
103
125
  - !ruby/object:Gem::Version
104
- version: 7.0.2
126
+ version: 7.1.0
105
127
  type: :runtime
106
128
  prerelease: false
107
129
  version_requirements: !ruby/object:Gem::Requirement
108
130
  requirements:
109
131
  - - '='
110
132
  - !ruby/object:Gem::Version
111
- version: 7.0.2
133
+ version: 7.1.0
112
134
  - !ruby/object:Gem::Dependency
113
135
  name: sensu-spawn
114
136
  requirement: !ruby/object:Gem::Requirement
115
137
  requirements:
116
138
  - - '='
117
139
  - !ruby/object:Gem::Version
118
- version: 2.2.1
140
+ version: 2.2.2
119
141
  type: :runtime
120
142
  prerelease: false
121
143
  version_requirements: !ruby/object:Gem::Requirement
122
144
  requirements:
123
145
  - - '='
124
146
  - !ruby/object:Gem::Version
125
- version: 2.2.1
147
+ version: 2.2.2
126
148
  - !ruby/object:Gem::Dependency
127
149
  name: sensu-redis
128
150
  requirement: !ruby/object:Gem::Requirement
129
151
  requirements:
130
152
  - - '='
131
153
  - !ruby/object:Gem::Version
132
- version: 2.2.0
154
+ version: 2.3.0
133
155
  type: :runtime
134
156
  prerelease: false
135
157
  version_requirements: !ruby/object:Gem::Requirement
136
158
  requirements:
137
159
  - - '='
138
160
  - !ruby/object:Gem::Version
139
- version: 2.2.0
161
+ version: 2.3.0
140
162
  - !ruby/object:Gem::Dependency
141
163
  name: em-http-server
142
164
  requirement: !ruby/object:Gem::Requirement
@@ -225,6 +247,7 @@ description: A monitoring framework that aims to be simple, malleable, and scala
225
247
  email:
226
248
  - portertech@gmail.com
227
249
  - amdprophet@gmail.com
250
+ - engineering@sensu.io
228
251
  executables:
229
252
  - sensu-api
230
253
  - sensu-client
metadata.gz.sig ADDED
Binary file