sensu-plugins-hardware 1.2.0 → 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
  SHA256:
3
- metadata.gz: 3b0808938e170d4f1c1c5d5d0800f71244799bb078b4d7fa393bb84deb40f93b
4
- data.tar.gz: aa3f027ae6110b8b7f8a6670b631d33f1f8e87157d230e097f4dca26c7470b0c
3
+ metadata.gz: add709f0d1e2d01a5c413288108b35aba31da5969574d89202d89642ae5d71c5
4
+ data.tar.gz: bc700abd5e7165dd0c0cd304cadc0dbe76505deb0e2b3cb034fe8e5cbb693964
5
5
  SHA512:
6
- metadata.gz: 38409723515a4b590f3faac6f6866b0b7218947b83106e550cfac36c733cff32e7d3e8c735f948fa5423207eabd6372bd60963b3779124abed442fbc77b0d7bd
7
- data.tar.gz: 35f506342c62ad47eeb9f69f5e4e51e469faf3356a9e941f0cf00e365e9827b6823c3d220598ba2ca21e0558cd3caaafe79ea275160c97b7f158142b7a45cb00
6
+ metadata.gz: 6128d23dd44c90d1584a8e7d19436e5a1ef21a620d5e4fdf87f19b61a91e5186cb89cd11fda23834c0e666d1ac59501f4f012d325ee0adeb469f88a782282efb
7
+ data.tar.gz: 93305d33ec53cd2dcca52fbc5c9ad90b5abd42cfc4f9e822d9e09c7ca3a828463cc590f27a740a62809abffdb538b3348f0a42b7432636000e4425c2a4bdb3f5
@@ -1,10 +1,22 @@
1
1
  # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
- This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
4
+ This CHANGELOG follows the format listed at [Our CHANGELOG Guidelines](https://github.com/sensu-plugins/community/blob/master/HOW_WE_CHANGELOG.md)
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.3.0] - 2017-12-05
9
+ ### Added
10
+ - Options `--facility`, `--level` and `--kernel` to restrict dmesg output on linux OS (@epierotto)
11
+ - Option `--seconds` to specify the amount of seconds to lookbehind on dmesg output on linux OS (@epierotto)
12
+ - Options validation to prevent running incompatible arguments (@epierotto)
13
+
14
+ ### Changed
15
+ - updated changelog guidelines location (@majormoses)
16
+ - Replaced the use of `tail` and `head` commands when specifying the option `--invert`, now uses pure ruby (@epierotto)
17
+ - Updated rubocop version to 0.49.0 (@epierotto)
18
+ - Rubocop test pass (@epierotto)
19
+
8
20
  ## [1.2.0] - 2017-11-02
9
21
  ### Changed
10
22
  - check-hardware-fail.rb: Return the actual and entire query line match if found (@phantasm66)
@@ -44,7 +56,8 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
44
56
  ### Changed
45
57
  - removed cruft from /lib
46
58
 
47
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-hardware/compare/1.2.0...HEAD
59
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-hardware/compare/1.3.0...HEAD
60
+ [1.3.0]: https://github.com/sensu-plugins/sensu-plugins-hardware/compare/1.2.0...1.3.0
48
61
  [1.2.0]: https://github.com/sensu-plugins/sensu-plugins-hardware/compare/1.1.0...1.2.0
49
62
  [1.1.0]: https://github.com/sensu-plugins/sensu-plugins-hardware/compare/1.0.0...1.1.0
50
63
  [1.0.0]: https://github.com/sensu-plugins/sensu-plugins-hardware/compare/0.0.4...1.0.0
data/README.md CHANGED
@@ -7,14 +7,57 @@
7
7
  [![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-hardware.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-hardware)
8
8
 
9
9
  ## Functionality
10
+ **check-hardware-fail** will lookup in the output of `dmesg` for lines matching a provided query, it accepts `--facility`, `--level` and `--kernel` options to run `dmesg` command. Returns CRITICAL if any occurrence is found and UNKNOWN if provided options are invalid or the command execution fails.
10
11
 
11
12
  ## Files
12
13
  * bin/check-hardware-fail
13
14
 
14
15
  ## Usage
16
+ ```
17
+ Usage: ./check-hardware-fail.rb (options)
18
+ -f FACILITY[,FACILITY], Restrict output to defined facilities. Supported log facilities: kern,user,mail,daemon,auth,syslog,lpr,news
19
+ --facility
20
+ --invert Invert order
21
+ -k, --kernel Include kernel messages
22
+ -L, --level LEVEL[,LEVEL] Restrict output to defined levels, otherwise all levels are included. Supported log levels: emerg,alert,crit,err,warn,notice,info,debug
23
+ -l, --lines NUMBER Maximum number of lines to read from dmesg, 0 (default) means all
24
+ -q, --query QUERY What pattern to look for in the output of dmesg (regex or literal)
25
+ -s, --seconds SECONDS Amount of seconds to lookbehind from dmesg output. This option is incompatible with --lines
26
+ ```
27
+
28
+ Example of usage:
29
+
30
+ Check the first 100 lines for 'killed as a result of limit'
31
+ ```
32
+ check-hardware-fail.rb -l 100 --invert -q 'killed as a result of limit'
33
+ ```
34
+
35
+ Check the last 100 lines for 'killed as a result of limit'
36
+ ```
37
+ check-hardware-fail.rb -l 100 -q 'killed as a result of limit'
38
+ ```
39
+
40
+
41
+ The following options are only available for linux OS:
42
+
43
+ * `--seconds` Amount of seconds to lookbehind from dmesg output. This option is incompatible with `--lines`
44
+ * `--facility` Restrict output to defined facilities. Supported log facilities: `kern,user,mail,daemon,auth,syslog,lpr,news`
45
+ * `--level` Restrict output to defined levels, otherwise all levels are included. Supported log levels: `emerg,alert,crit,err,warn,notice,info,debug`
46
+ * `--kernel` Include kernel messages
47
+
48
+ Check the last 300 seconds for 'killed as a result of limit'
49
+ ```
50
+ check-hardware-fail.rb -s 300 -q 'killed as a result of limit'
51
+ ```
52
+
53
+ Check the last 300 seconds for 'killed' on `auth` and `syslog` facilities
54
+ ```
55
+ check-hardware-fail.rb -s 300 -f auth,syslog -q 'killed'
56
+ ```
57
+
15
58
 
16
59
  ## Installation
17
60
 
18
61
  [Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)
19
62
 
20
- ## Notes
63
+ ## Notes
@@ -25,6 +25,7 @@
25
25
  # for details.
26
26
  #
27
27
 
28
+ require 'os'
28
29
  require 'English'
29
30
  require 'rubygems' if RUBY_VERSION < '1.9.0'
30
31
  require 'sensu-plugin/check/cli'
@@ -34,7 +35,6 @@ class CheckHardwareFail < Sensu::Plugin::Check::CLI
34
35
  short: '-l NUMBER',
35
36
  long: '--lines NUMBER',
36
37
  proc: proc(&:to_i),
37
- default: 0,
38
38
  description: 'Maximum number of lines to read from dmesg, 0 (default) means all'
39
39
 
40
40
  option :query,
@@ -43,21 +43,104 @@ class CheckHardwareFail < Sensu::Plugin::Check::CLI
43
43
  default: 'Hardware Error',
44
44
  description: 'What pattern to look for in the output of dmesg (regex or literal)'
45
45
 
46
+ option :seconds,
47
+ short: '-s SECONDS',
48
+ long: '--seconds SECONDS',
49
+ proc: proc(&:to_i),
50
+ description: 'Amount of seconds to lookbehind from dmesg output. This option is incompatible with --lines'
51
+
52
+ option :facility,
53
+ short: '-f FACILITY[,FACILITY]',
54
+ long: '--facility FACILITY[,FACILITY]',
55
+ description: 'Restrict output to defined facilities. Supported log facilities: kern,user,mail,daemon,auth,syslog,lpr,news',
56
+ required: false,
57
+ proc: proc { |a| a.split(',') }
58
+
59
+ option :level,
60
+ short: '-L LEVEL[,LEVEL]',
61
+ long: '--level LEVEL[,LEVEL]',
62
+ description: 'Restrict output to defined levels, otherwise all levels are included. Supported log levels: emerg,alert,crit,err,warn,notice,info,debug',
63
+ proc: proc { |a| a.split(',') }
64
+
65
+ option :kernel,
66
+ short: '-k',
67
+ long: '--kernel',
68
+ description: 'Include kernel messages',
69
+ boolean: true
70
+
46
71
  option :invert,
47
72
  long: '--invert',
48
73
  description: 'Invert order',
49
- boolean: true,
50
- default: false
74
+ boolean: true
51
75
 
52
76
  def run
53
- cmd = config[:invert] ? 'head' : 'tail'
54
- output = if config[:lines].zero?
55
- `dmesg`.lines.select { |l| l[/#{config[:query]}/] }
56
- else
57
- `dmesg | #{cmd} -n #{config[:lines]}`.lines.select { |l| l[/#{config[:query]}/] }
58
- end
77
+ # Validate options
78
+ unknown incompatible_options if incompatible_options
79
+
80
+ # Build the command based on the options provided
81
+ cmd = 'dmesg '
82
+ cmd += "--facility #{config[:facility].join(',')} " if config[:facility]
83
+ cmd += "--level #{config[:level].join(',')} " if config[:level]
84
+ cmd += '--kernel ' if config[:kernel]
85
+
86
+ # Run command
87
+ lines = `#{cmd}`.lines
59
88
  unknown 'Command execution failed!' unless $CHILD_STATUS.success?
89
+
90
+ if config[:seconds]
91
+ uptime = File.read('/proc/uptime').split(' ').first.to_i
92
+ seconds_limit = uptime - config[:seconds]
93
+ end
94
+
95
+ # Option --invert
96
+ # Flipping the array to start the iteration from the last line (newest entry)
97
+ # unless `--invert` which means that you want to start reading from the first line (oldest entry)
98
+ lines.reverse! unless config[:invert]
99
+
100
+ output = []
101
+
102
+ lines.each_with_index do |line, index|
103
+ break if config[:lines] && index >= config[:lines]
104
+ if config[:seconds]
105
+ timestamp = line.split(']').first.delete('[').to_i
106
+ break if timestamp < seconds_limit
107
+ end
108
+ output << line if line[/#{config[:query]}/]
109
+ end
110
+
60
111
  critical "Problem Detected: #{output[0]}" if output.any?
61
112
  ok 'OK'
62
113
  end
114
+
115
+ def incompatible_options
116
+ if OS.linux?
117
+ if incompatible_linux.any?
118
+ "The use of the options --seconds and [--#{incompatible_linux.join(' --')}] is incompatible."
119
+ elsif invalid_facility.any?
120
+ "Invalid dmesg facility requested: #{invalid_facility}"
121
+ elsif invalid_level.any?
122
+ "Invalid dmesg level requested: #{invalid_level}"
123
+ end
124
+ elsif OS.posix?
125
+ "Incompatible options: [--#{incompatible_posix.join(' --')}] for OS #{OS.host_os}" if incompatible_posix.any?
126
+ else
127
+ "OS #{OS.host_os} is not supported"
128
+ end
129
+ end
130
+
131
+ def incompatible_linux
132
+ config[:seconds] ? config.keys & %i[lines invert] : []
133
+ end
134
+
135
+ def incompatible_posix
136
+ config.keys & %i[facility level kernel seconds]
137
+ end
138
+
139
+ def invalid_facility
140
+ config[:facility].to_a - %w[kern user mail daemon auth syslog lpr news]
141
+ end
142
+
143
+ def invalid_level
144
+ config[:level].to_a - %w[emerg alert crit err warn notice info debug]
145
+ end
63
146
  end
@@ -1,7 +1,7 @@
1
1
  module SensuPluginsHardware
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 2
4
+ MINOR = 3
5
5
  PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-hardware
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.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-11-02 00:00:00.000000000 Z
11
+ date: 2017-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: os
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.6
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +128,14 @@ dependencies:
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: 0.40.0
131
+ version: 0.49.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: 0.40.0
138
+ version: 0.49.0
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rspec
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -192,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
206
  version: '0'
193
207
  requirements: []
194
208
  rubyforge_project:
195
- rubygems_version: 2.7.0
209
+ rubygems_version: 2.7.3
196
210
  signing_key:
197
211
  specification_version: 4
198
212
  summary: Sensu plugins for physical hardware