sensu-plugins-sensu 2.0.0 → 2.1.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: 2870929cd3cd4f899088cb6ec55104e76807d063
4
- data.tar.gz: 3e346d7facc6bf08e84d1993a40e1d4e1345faad
3
+ metadata.gz: db61d659c304cbb69bab103dc96810acc18b303e
4
+ data.tar.gz: 65d88dbf81a056122cf421e2eef2a354e0cb7971
5
5
  SHA512:
6
- metadata.gz: a90af312010e2d9ba78c824d54c64f3fd50918d1d647a1601cd221b31b2cd92e6a5448271df7ab57503048316e1ff1cd5365a1fb8555d93abf5aca56b2ec649e
7
- data.tar.gz: 40800095ddbdcd9559a2b8411094a841f4295884bec1ea137ec6bde7d4ce77f7753d7511c1f297f475448c50b9c9653024bbe11d899447b40e36af6306f7a4e5
6
+ metadata.gz: 87ba1a72154774b05550e1969d7e3f6a7129921371cff565bb29067f74b3502d499628886929efb20450b0633dda14d2a37083dd391ce9121c1ff6a573863308
7
+ data.tar.gz: 06d0d10142e70be953d73eef0b233eda4e4b4ef25d2b1632d4c7a2fee9b11dedd26a6e5bcadcf1e89008e15033abd7db4c930768ddd88e5b0ed00e92cb452c12
data/CHANGELOG.md CHANGED
@@ -5,6 +5,11 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.1.0] - 2017-08-29
9
+ ### Added
10
+ - check-stale-results.rb: new script to check for stale results in sensu (@m4ce)
11
+ - handler-purge-stale-results.rb: new handler to purge stale results from sensu (@m4ce)
12
+
8
13
  ## [2.0.0] - 2017-08-20
9
14
  ### Breaking Changes
10
15
  - check-aggregates.rb: Changed the default behaviour to alert with the severity of the aggregated checks.
@@ -64,7 +69,8 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
64
69
  ### Added
65
70
  - initial release
66
71
 
67
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-sensu/compare/1.1.1...HEAD
72
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-sensu/compare/2.1.0...HEAD
73
+ [2.1.0]: https://github.com/sensu-plugins/sensu-plugins-sensu/compare/2.0.0...2.1.0
68
74
  [2.0.0]: https://github.com/sensu-plugins/sensu-plugins-sensu/compare/1.1.1...2.0.0
69
75
  [1.1.1]: https://github.com/sensu-plugins/sensu-plugins-sensu/compare/1.1.0...1.1.1
70
76
  [1.1.0]: https://github.com/sensu-plugins/sensu-plugins-sensu/compare/1.0.0...1.1.0
data/README.md CHANGED
@@ -10,14 +10,48 @@
10
10
 
11
11
  ## Files
12
12
  * bin/check-aggregate.rb
13
+ * bin/check-stale-results.rb
13
14
  * bin/metrics-aggregate.rb
14
15
  * bin/metrics-delete-expired-stashes.rb
15
16
  * bin/metrics-events.rb
16
17
  * bin/handler-sensu.rb
17
18
  * bin/handler-sensu-deregister.rb
19
+ * bin/handler-purge-stale-results.rb
18
20
 
19
21
  ## Usage
20
22
 
23
+ ### check-stale-results.rb
24
+
25
+ A sensu plugin to monitor sensu stale check results. You can then implement an handler that purges the results after X days using the `handlers-purge-stale-results` handler.
26
+
27
+ The plugin accepts the following command line options:
28
+
29
+ ```
30
+ Usage: check-stale-results.rb (options)
31
+ -c, --crit <COUNT> Critical if number of stale check results exceeds COUNT
32
+ -s, --stale <TIME> Elapsed time to consider a check result result (default: 1d)
33
+ -v, --verbose Be verbose
34
+ -w, --warn <COUNT> Warn if number of stale check results exceeds COUNT (default: 1)
35
+ ```
36
+
37
+ the --stale command line option accepts elapsed times formatted as documented in https://github.com/hpoydar/chronic_duration.
38
+
39
+ The handler accepts the following command line options:
40
+
41
+ ### handler-purge-stale-results.rb
42
+
43
+ A sensu handler to purge stale check results. This handler can be invoked from a check that uses the the `check-stale-results` plugin.
44
+
45
+ ```
46
+ Usage: handler-purge-stale-results.rb (options)
47
+ --mail-recipient <ADDRESS> Mail recipient (required)
48
+ --mail-sender <ADDRESS> Mail sender (default: sensu@localhost)
49
+ --mail-server <HOST> Mail server (default: localhost)
50
+ -s, --stale <TIME> Elapsed time after which a stale check result will be deleted (default: 7d)
51
+ ```
52
+
53
+ the --stale command line option accepts elapsed times formatted as documented in https://github.com/hpoydar/chronic_duration.
54
+
21
55
  ## Installation
22
56
 
23
57
  [Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # check-stale-results.rb
4
+ #
5
+ # Author: Matteo Cerutti <matteo.cerutti@hotmail.co.uk>
6
+ #
7
+
8
+ require 'net/http'
9
+ require 'json'
10
+ require 'sensu-plugin/utils'
11
+ require 'sensu-plugin/check/cli'
12
+ require 'chronic_duration'
13
+
14
+ class CheckStaleResults < Sensu::Plugin::Check::CLI
15
+ include Sensu::Plugin::Utils
16
+
17
+ option :stale,
18
+ description: 'Elapsed time to consider a check result result (default: 1d)',
19
+ short: '-s <TIME>',
20
+ long: '--stale <TIME>',
21
+ proc: proc { |s| ChronicDuration.parse(s) },
22
+ default: ChronicDuration.parse('1d')
23
+
24
+ option :verbose,
25
+ description: 'Be verbose',
26
+ short: '-v',
27
+ long: '--verbose',
28
+ boolean: true,
29
+ default: false
30
+
31
+ option :warn,
32
+ description: 'Warn if number of stale check results exceeds COUNT (default: 1)',
33
+ short: '-w <COUNT>',
34
+ long: '--warn <COUNT>',
35
+ proc: proc(&:to_i),
36
+ default: 1
37
+
38
+ option :crit,
39
+ description: 'Critical if number of stale check results exceeds COUNT',
40
+ short: '-c <COUNT>',
41
+ long: '--crit <COUNT>',
42
+ proc: proc(&:to_i),
43
+ default: nil
44
+
45
+ def initialize
46
+ super
47
+
48
+ raise 'Critical threshold must be higher than the warning threshold' if config[:crit] && config[:warn] >= config[:crit]
49
+
50
+ # get list of sensu results
51
+ @results = results
52
+ end
53
+
54
+ def humanize(secs)
55
+ [[60, :seconds], [60, :minutes], [24, :hours], [1000, :days]].map do |count, name|
56
+ if secs > 0
57
+ secs, n = secs.divmod(count)
58
+ "#{n.to_i} #{name}"
59
+ end
60
+ end.compact.reverse.join(' ')
61
+ end
62
+
63
+ def api_request(method, path, _blk)
64
+ unless settings.key?('api')
65
+ raise 'api.json settings not found.'
66
+ end
67
+ http = Net::HTTP.new(settings['api']['host'], settings['api']['port'])
68
+ req = net_http_req_class(method).new(path)
69
+ if settings['api']['user'] && settings['api']['password']
70
+ req.basic_auth(settings['api']['user'], settings['api']['password'])
71
+ end
72
+ yield(req) if block_given?
73
+ http.request(req)
74
+ end
75
+
76
+ def results
77
+ res = []
78
+ req = api_request(:GET, '/results')
79
+ res = JSON.parse(req.body) if req && req.code == '200'
80
+ res
81
+ end
82
+
83
+ def run
84
+ stale = 0
85
+ footer = "\n\n"
86
+ @results.each do |result|
87
+ diff = Time.now.to_i - result['check']['issued']
88
+ if diff > config[:stale]
89
+ stale += 1
90
+ footer += " - check result #{result['client']}/#{result['check']['name']} is stale (#{humanize(diff)})\n"
91
+ end
92
+ end
93
+ footer += "\n"
94
+
95
+ if config[:crit] && stale >= config[:crit]
96
+ msg = "Found #{stale} stale check results (>= #{config[:crit]})"
97
+ msg += footer if config[:verbose]
98
+ critical(msg)
99
+ end
100
+
101
+ if stale >= config[:warn]
102
+ msg = "Found #{stale} stale check results (>= #{config[:warn]})"
103
+ msg += footer if config[:verbose]
104
+ warning(msg)
105
+ end
106
+
107
+ ok("No stale check results found (>= #{config[:warn]})")
108
+ end
109
+ end
@@ -0,0 +1,90 @@
1
+ #
2
+ # handler-purge-stale-results.rb
3
+ #
4
+ # Author: Matteo Cerutti <matteo.cerutti@hotmail.co.uk>
5
+ #
6
+
7
+ require 'sensu-handler'
8
+ require 'time'
9
+ require 'net/smtp'
10
+ require 'socket'
11
+ require 'chronic_duration'
12
+
13
+ class HandlerPurgeStaleResults < Sensu::Handler
14
+ option :stale,
15
+ description: 'Elapsed time after which a stale check result will be deleted (default: 7d)',
16
+ short: '-s <TIME>',
17
+ long: '--stale <TIME>',
18
+ proc: proc { |s| ChronicDuration.parse(s) },
19
+ default: ChronicDuration.parse('7d')
20
+
21
+ option :mail_server,
22
+ description: 'Mail server (default: localhost)',
23
+ long: '--mail-server <HOST>',
24
+ default: 'localhost'
25
+
26
+ option :mail_sender,
27
+ description: 'Mail sender (default: sensu@localhost)',
28
+ long: '--mail-sender <ADDRESS>',
29
+ default: 'sensu@localhost'
30
+
31
+ option :mail_recipient,
32
+ description: 'Mail recipient',
33
+ long: '--mail-recipient <ADDRESS>',
34
+ required => true
35
+
36
+ def results
37
+ res = []
38
+ req = api_request(:GET, '/results')
39
+ res = JSON.parse(req.body) if req && req.code == '200'
40
+ res
41
+ end
42
+
43
+ def handle
44
+ deleted = []
45
+ failed = []
46
+
47
+ results.each do |result|
48
+ diff = Time.now.to_i - result['check']['issued']
49
+ if diff > config[:stale]
50
+ begin
51
+ req = api_request(:DELETE, "/results/#{result['client']}/#{result['check']['name']}")
52
+ if req.code != '204'
53
+ failed << "#{result['client']} - #{result['check']['name']} (Code: #{req.code}, Message: #{req.body})"
54
+ else
55
+ deleted << "#{result['client']} - #{result['check']['name']}"
56
+ end
57
+ rescue
58
+ failed << "#{result['client']} - #{result['check']['name']} (Caught exception: #{$ERROR_INFO})"
59
+ end
60
+ end
61
+ end
62
+
63
+ if !deleted.empty? || !failed.empty?
64
+ msg = <<EOF
65
+ From: Sensu <#{config[:mail_sender]}>
66
+ To: <#{config[:mail_recipient]}>
67
+ Subject: Purge stale check results
68
+
69
+ This is a notification concerning the #{self.class.name} sensu handler running at #{Socket.gethostname}
70
+
71
+ * Summary
72
+
73
+ Deleted: #{deleted.size}
74
+ Failed to delete: #{failed.size}
75
+
76
+ * Failed to delete check results:
77
+
78
+ #{failed.map { |m| " #{m}" }.join("\n")}
79
+
80
+ * Deleted check results:
81
+
82
+ #{deleted.map { |m| " #{m}" }.join("\n")}
83
+ EOF
84
+
85
+ Net::SMTP.start(config[:mail_server]) do |smtp|
86
+ smtp.send_message(msg, config[:mail_sender], config[:mail_recipient])
87
+ end
88
+ end
89
+ end
90
+ end
@@ -2,7 +2,7 @@ module SensuPluginsSensu
2
2
  # This defines the version of the gem
3
3
  module Version
4
4
  MAJOR = 2
5
- MINOR = 0
5
+ MINOR = 1
6
6
  PATCH = 0
7
7
 
8
8
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-sensu
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-20 00:00:00.000000000 Z
11
+ date: 2017-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.6.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: chronic_duration
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.6
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.6
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -182,6 +196,8 @@ description: This plugin provides monitoring and metrics for Sensu.
182
196
  email: "<sensu-users@googlegroups.com>"
183
197
  executables:
184
198
  - check-aggregate.rb
199
+ - check-stale-results.rb
200
+ - handler-purge-stale-results.rb
185
201
  - handler-sensu-deregister.rb
186
202
  - handler-sensu.rb
187
203
  - metrics-aggregate.rb
@@ -194,6 +210,8 @@ files:
194
210
  - LICENSE
195
211
  - README.md
196
212
  - bin/check-aggregate.rb
213
+ - bin/check-stale-results.rb
214
+ - bin/handler-purge-stale-results.rb
197
215
  - bin/handler-sensu-deregister.rb
198
216
  - bin/handler-sensu.rb
199
217
  - bin/metrics-aggregate.rb