sensu 1.2.1 → 1.3.0

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: 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