sensu-plugins-windows 2.2.1 → 2.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
- SHA1:
3
- metadata.gz: cb4db0eaf8556a99517db61e0d39f4436095cfb6
4
- data.tar.gz: aab24efe6b3cd1c0e6a0e6b513bde7d2d78aeec5
2
+ SHA256:
3
+ metadata.gz: e2c09a015df087022d158773dc055bc71862dac29c00f1d99d4982b980289b6c
4
+ data.tar.gz: 7c39068ecf25e4123c27741af9addff0ceac3c121a26474b250f1e2fdbbc3df0
5
5
  SHA512:
6
- metadata.gz: 96c01b64874dd084b3b8f337976b09857f0a819224bf6f9fa4751bb0a52ffb71c11dd0453c9f41645d3b5a3b57649b9043fc4e0afbe48734ac66d2494f47c009
7
- data.tar.gz: e3f6e9f4d11aacafc1b25b78bfd25b99d4da1e251535177f5fff833b4fdc55eb122359579e434f47c3745f88d066630bc27f246f290f037b52c5ff564c24411a
6
+ metadata.gz: 44c6c198d8c0fe28f308983ca9328a0b9de44e773aca7190884c1c5a18fd171f0db214a8f878cffbeaf1e5f346f5ef60dadb439cd41b40dc5711cc9f65a88684
7
+ data.tar.gz: 23ad80d6943f331720853e9a1ede22f70ad7bc947abd62925b502f7624d1341a2da56ef95e73d1db291b4af4596c34781a35e1ea3543c84f005d069767fe22f7
data/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.3.0] - 2017-11-12
10
+ ### Added
11
+ - new check: `powershell/check-multi-template/check-processes.ps1` (@absolutejam)
12
+ - new check `powershell/check-multi-template/check-services.ps1` (@absolutejam)
13
+ - new check `powershell/check-multi-template/check-multi-template.ps1` (@absolutejam)
14
+ - new check `powershell/check-multi-template/check-iscsi.ps1` (@absolutejam)
15
+ - new check `powershell/check-multi-template/check-focusedprocess.ps1` (@absolutejam)
16
+ - new check: `powershell/check-multi-template/check-adapters.ps1` (@absolutejam)
17
+ - documentation `powershell/check-multi-template/README.md` (@absolutejam)
18
+
9
19
  ## [2.2.1] - 2017-09-25
10
20
  ### Changed
11
21
  - update changelog guidelines location (@majormoses)
@@ -125,6 +135,7 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
125
135
  - Initial release
126
136
 
127
137
  [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-Windows/compare/2.2.1...HEAD
138
+ [2.3.0]: https://github.com/sensu-plugins/sensu-plugins-Windows/compare/2.2.1...2.3.0
128
139
  [2.2.1]: https://github.com/sensu-plugins/sensu-plugins-Windows/compare/2.2.0...2.2.1
129
140
  [2.2.0]: https://github.com/sensu-plugins/sensu-plugins-Windows/compare/2.1.0...2.2.0
130
141
  [2.1.0]: https://github.com/sensu-plugins/sensu-plugins-Windows/compare/2.0.0...2.1.0
@@ -0,0 +1,177 @@
1
+ # check-multi-template
2
+
3
+ A Sensu Powershell template.
4
+
5
+ ## Overview
6
+
7
+ The `check-multi-template` is designed to provide a single base template for
8
+ PowerShell plugins, reducing uneccessary boilerplate and providing a base set of
9
+ features and expecations that make it easier to write checks. In particular, the
10
+ plugins based upon the template can consume multiple items to be checked -
11
+ Please see *Paramaters* heading for more info.
12
+
13
+ The template itself can be copied, altered and used directly, but it is more
14
+ effective to import it and use it as a template.
15
+
16
+ ## Usage
17
+
18
+ Take a look at any of the other checks in this directory (eg.
19
+ `check-adapters.ps1`), and you will see they all include the following elements:
20
+
21
+ - **Parameter block** - Arguments provided from the CLI. Please see
22
+ *Parameters* heading for more info.
23
+ - **Template import** - Dot source import of the template from the same folder
24
+ as the plugin. This imports all of of the default options and all functions.
25
+ - **CheckOptions hashtable** - Configuration for the check. Overrides defaults
26
+ from the template.
27
+ - **Call to `Invoke-Main` function** - Along with the parameters to be
28
+ consumed, eg.
29
+ `Invoke-Main -CriticalItems $CriticalAdapters -ImportantItems $ImportantAdapters`
30
+
31
+ ## Features
32
+
33
+ The crux of the template logic comes from simply comparing the values in arrays -
34
+ one consisting of values that have been passed in via. command-line arguments,
35
+ the other consisting of items in a specific state.
36
+
37
+ If you look in the function `Invoke-Main`, you will see 3 main steps in
38
+ determining service health:
39
+
40
+ - Compare all items passed in via. CLI parameters (`ImportantItems` &
41
+ `CriticalItems`) against `BaseItems` array. This first checks to see if any of
42
+ the items are missing. This can be disabled by changing
43
+ `$CheckOptions.CheckMissing` to `$False`.
44
+
45
+ - Compare `ImportantItems` against `FailedItems` array.
46
+
47
+ - Compare `CriticalItems` against `FailedItems` array.
48
+
49
+ And these arrays are populated via. the scriptblocks (Anonymous functions) in
50
+ `$CheckOptions`. For example, the scriptblocks used in `check-adapters` are:
51
+
52
+ ```powershell
53
+ 'ScriptBlockBaseItems' = {
54
+ Get-NetAdapter |
55
+ Select-Object -ExpandProperty Name
56
+ }
57
+
58
+ 'ScriptBlockFailedItems' = {
59
+ Get-NetAdapter |
60
+ Where-Object { $_.Status -ne 'Up' } |
61
+ Select-Object -ExpandProperty Name
62
+ }
63
+ ```
64
+
65
+ As you can see, the `ScriptBlockBaseItems` simply gets all network adapters on
66
+ the machine and then expands the `Name` property.
67
+
68
+ The `ScriptBlockFailedItems` simply does the same, but only for adapters with
69
+ a state not equal to 'Up'.
70
+
71
+ Now, we compare our CLI parameters against these, and if any of the items we
72
+ passed in are present in `FailedItems`, the script will flag it according to
73
+ whether it was part of the `CriticalItems` or `ImportantItems` parameter.
74
+
75
+ ### Inverting the logic
76
+
77
+ The logic can be reversed but changing `$CheckOptions.Inverse` to `$True`,
78
+ meaning that the script will check to see if `ImportantItems` and
79
+ `CriticalItems` are *absent* from `FailedItems`.
80
+
81
+ An example of this being used is in `check-iscsi.ps1` as it checks to see if
82
+ any of the IQNs passed in at the CLI are *absent* from the list of all sessions.
83
+
84
+ **NOTE:** Inverting the logic will automatically disable the 'missing' check.
85
+
86
+ ### Parameters
87
+
88
+ Most of the examples will have parameters equivalent to the template's
89
+ `CriticalItems` and `ImportantItems` parameters (eg. `check-adapters.ps1` has
90
+ `CriticalAdapters` and `ImportantAdapters`) which allows the plugin to provide
91
+ a different return value based on whether items were flagged as 'critical' or
92
+ 'important'.
93
+
94
+ > **NOTE:** The highest severity result is taken for the final check result.
95
+ > This means that if both items in `ImportantItems` and items in
96
+ > `CriticalItems` are flagged as in a failed state, the overall status will be
97
+ > `CRITICAL:` (Exit code `2`). All failed items will still be shown in the
98
+ > check output with their respective importance levels.
99
+
100
+ Additionally, there is some extra processing done in the parameters to
101
+ accommodate for multiple instances of Sensu's token substitution. Here is an
102
+ excerpt from the help provided in the template detailing this:
103
+
104
+ > Sensu check token substitution:
105
+ > Because this check is designed to make full use of Sensu's check token
106
+ > substitution (https://sensuapp.org/docs/latest/reference/checks.html#check-token-substitution)
107
+ > feature, some special considerations have been taken for how the arguments are parsed.
108
+ >
109
+ > The main parameters support a list of of comma-separated strings.
110
+ > eg. -CriticalItems 'value1','value2'
111
+ > They also accepts accept a single string with comma-separated values.
112
+ > eg. -param1 'value1,value2'
113
+ > ...or you can mix & match the two and all of the values will be merged.
114
+ > eg. -param1 'value1','value2,value3'
115
+ > Additionally, any use of the word 'None' will be ignored.
116
+ > eg. -param1 'value1','None,value2','None'
117
+ >
118
+ > This is because Sensu's client attribute substitution tokens only work with
119
+ > flat strings, but by supporting both of the above methods, it allows the use
120
+ > of multiple values within a single check/client attribute AND multiple
121
+ > different client/check attributes to be used. Additionally, because 'None'
122
+ > is ignored, it allows the user to provide a default value in the check
123
+ > token substitution, as not to throw an error if the value is missing.
124
+ >
125
+ > Token substitution example:
126
+ > Check attribute 'check_attr' = "alpha,bravo"
127
+ > Client attribute 'client_attr' = "charlie,delta"
128
+ >
129
+ > powershell.exe -File check.ps1 -param1 ":::check_attr|None:::",":::missing_attr|None:::",":::client_attr|None:::"
130
+ >
131
+ > Which evaluates to:
132
+ >
133
+ > powershell.exe -File check.ps1 -param "alpha,bravo","None","charlie,delta"
134
+ >
135
+ > The script then strips any instances of 'None' and processes the
136
+ > comma-separated string as single flat array.
137
+
138
+ Here is an example of real-world usage:
139
+
140
+ ```json
141
+ {
142
+ "checks": {
143
+ "services-running": {
144
+ "command": "powershell.exe -noprofile -noninteractive -executionpolicy bypass -nologo -file C:\\\\opt\\\\sensu\\\\check-scripts\\\\check-services.ps1 -criticalservices \":::vars.services.critical|None:::,:::vars.services.critical_group|None:::,:::vars.services.critical_all|None:::\" -importantservices \":::vars.services.important|None:::,:::vars.services.important_group|None:::,:::vars.services.important_all|None:::\"",
145
+ "description": "Checks the status of services",
146
+ "handlers": [
147
+ "default"
148
+ ],
149
+ "interval": 60,
150
+ "occurrences": 3,
151
+ "subscribers": [
152
+ "winservers"
153
+ ]
154
+ }
155
+ }
156
+ }
157
+ ```
158
+
159
+ And within the host's `client.json`:
160
+
161
+ ```json
162
+ ...
163
+ "vars": {
164
+ "services": {
165
+ "critical": "criticalA,criticalB",
166
+ "critical_group": "criticalC",
167
+ "critical_all": "criticalD,criticalE",
168
+ "important": "importantA,importantB",
169
+ "important_all": "importantD,serviceE"
170
+ }
171
+ }
172
+ ```
173
+
174
+ These values are populated by my config-management tool, and it allows me to
175
+ specify values for the host, the host's group (eg. webservers) and all hosts
176
+ without Sensu having any issues. As you can see, `important_group` is missing,
177
+ but that will simply be substituted with `None` as per the check definition.
@@ -0,0 +1,115 @@
1
+ #
2
+ # check-adapters.ps1
3
+ #
4
+ # DESCRIPTION:
5
+ # This plugin checks that the specified network adapters are up.
6
+ #
7
+ # It accepts the '-CriticalAdapters' and '-ImportantAdapters' parameters to
8
+ # provide different status level outputs and also checks if the items passed
9
+ # are missing completely. Please see the '-Help' parameter, under the 'Sensu
10
+ # check token substitution' header for more info on some extra parsing
11
+ # features.
12
+ #
13
+ # It is built atop check-multi-template.ps1 as an example, and can be easily
14
+ # adapted to check other things.
15
+ #
16
+ # OUTPUT:
17
+ # Missing example:
18
+ # CheckNetworkAdapter CRITICAL:
19
+ # The following adapters are missing:
20
+ # - Ethernet
21
+ #
22
+ # OK example:
23
+ # CheckNetworkAdapter OK:
24
+ # All interfaces are up.
25
+ #
26
+ # WARN example:
27
+ # CheckNetworkAdapter WARN:
28
+ # The following important adapters are down:
29
+ # - OOB MANAGEMENT
30
+ #
31
+ # CRITICAL example:
32
+ # CheckNetworkAdapter CRITICAL:
33
+ # The following critical adapters are down:
34
+ # - CLUSTER HEARTBEAT
35
+ # The following important adapters are down:
36
+ # - OOB MANAGEMENT
37
+ #
38
+ # PLATFORMS:
39
+ # Windows
40
+ #
41
+ # DEPENDENCIES:
42
+ #
43
+ # USAGE:
44
+ # Please run this check with the '-help' parameter for more info.
45
+ #
46
+ # NOTES:
47
+ #
48
+ # LICENSE:
49
+ # Copyright 2016 James Booth <james@absolutejam.co.uk>
50
+ # Released under the same terms as Sensu (the MIT license); see LICENSE for
51
+ # details.
52
+ #
53
+
54
+
55
+ [CmdletBinding()]
56
+ Param(
57
+ # Network adapters to check. If any are not 'up', they will return a
58
+ # CRITICAL (2) status.
59
+ [Parameter(
60
+ Mandatory = $False
61
+ )]
62
+ [string]$CriticalAdapters,
63
+
64
+ # Network adapters to check. If any are not 'up', they will return a
65
+ # WARNING (1) status.
66
+ [Parameter(
67
+ Mandatory = $False
68
+ )]
69
+ [string]$ImportantAdapters,
70
+
71
+ # Display help about this check.
72
+ [switch]$Help
73
+ )
74
+
75
+ # Import template
76
+ $here = Split-Path -Parent $MyInvocation.MyCommand.Path
77
+ . "$here\check-multi-template.ps1"
78
+
79
+ # Override check options
80
+ $CheckOptions = @{
81
+ 'CheckName' = 'CheckNetworkAdapter'
82
+ 'MessageOK' = 'All interfaces are up.'
83
+ 'MessageImportant' = 'The following important adapters are down:'
84
+ 'MessageCritical' = 'The following critical adapters are down:'
85
+ 'MessageMissing' = 'The following adapters are missing:'
86
+ 'MessageNoneSpecified' = 'No adapters specified.'
87
+ 'MissingState' = 2
88
+
89
+ 'ScriptBlockBaseItems' = {
90
+ Get-NetAdapter |
91
+ Select-Object -ExpandProperty Name
92
+ }
93
+
94
+ 'ScriptBlockMatchItems' = {
95
+ Get-NetAdapter |
96
+ Where-Object { $_.Status -ne 'Up' } |
97
+ Select-Object -ExpandProperty Name
98
+ }
99
+
100
+ 'CheckHelp' = @'
101
+ Checks whether any specified network adapters are not 'up'.
102
+
103
+ Arguments:
104
+ -CriticalAdapters A string of comma-separated network adapters
105
+ -ImportantAdapters A string of comma-separated network adapters
106
+ -Help Show help
107
+
108
+ Example usage:
109
+ powershell.exe -file check-adapters.ps1 -criticaladapters "CLUSTER NETWORK" -warningadapters"MONITORING NETWORK"
110
+
111
+ '@
112
+ }
113
+
114
+ # Run!
115
+ Invoke-Main -CriticalItems $CriticalAdapters -ImportantItems $ImportantAdapters
@@ -0,0 +1,102 @@
1
+ #
2
+ # check-focusedprocess.ps1
3
+ #
4
+ # DESCRIPTION:
5
+ # This plugin checks the focused process.
6
+ #
7
+ # It accepts the '-Process' parameter.
8
+ #
9
+ # OUTPUT:
10
+ # OK example:
11
+ # FocusedProcess OK:
12
+ # <name> is focused.
13
+ #
14
+ # CRITICAL example:
15
+ # FocusedProcess CRITICAL:
16
+ # The following process is not focused:
17
+ # - <name>
18
+ #
19
+ # PLATFORMS:
20
+ # Windows
21
+ #
22
+ # DEPENDENCIES:
23
+ #
24
+ # USAGE:
25
+ # Please run this check with the '-help' parameter for more info.
26
+ #
27
+ # NOTES:
28
+ #
29
+ # LICENSE:
30
+ # Copyright 2016 James Booth <james@absolutejam.co.uk>
31
+ # Released under the same terms as Sensu (the MIT license); see LICENSE for
32
+ # details.
33
+ #
34
+
35
+
36
+ [CmdletBinding()]
37
+ Param(
38
+ # Process to check. If not the focused process, return CRITICAL (2) status.
39
+ [Parameter(
40
+ Mandatory = $False
41
+ )]
42
+ [string]$Process,
43
+
44
+ # Display help about this check.
45
+ [switch]$Help
46
+ )
47
+
48
+ # Import template
49
+ $here = Split-Path -Parent $MyInvocation.MyCommand.Path
50
+ . "$here\check-multi-template.ps1"
51
+
52
+ # Override check options
53
+ $CheckOptions = @{
54
+ 'CheckName' = 'FocusedProcess'
55
+ 'MessageOK' = "$Process is focused."
56
+ 'MessageCritical' = 'The following process is not focused:'
57
+ 'MessageNoneSpecified' = 'No process specified.'
58
+ 'CheckMissing' = $False
59
+ 'Inverse' = $True
60
+ 'ScriptBlockMatchItems' = {
61
+ Add-Type @"
62
+ using System;
63
+ using System.Runtime.InteropServices;
64
+ public class UserWindows {
65
+ [DllImport("user32.dll")]
66
+ public static extern IntPtr GetForegroundWindow();
67
+ }
68
+ "@
69
+
70
+ try {
71
+ $ActiveHandle = [UserWindows]::GetForegroundWindow()
72
+ $Process = Get-Process |
73
+ Where-Object { $_.MainWindowHandle -eq $activeHandle }
74
+ $Process |
75
+ Select-Object -ExpandProperty ProcessName
76
+ #Select-Object ProcessName,
77
+ # @{ N="AppTitle"; E= {($_.MainWindowTitle)} }
78
+ } catch {
79
+ Throw "Failed to get active Window details. More Info: $_"
80
+ }
81
+ }
82
+
83
+ 'CheckHelp' = @'
84
+ Checks the currently focussed process on a machine. This is useful for machines
85
+ such as digital signage that should always have a dedicated process displayed.
86
+
87
+ Arguments:
88
+ -Process The process name that should be focused.
89
+ -Help Show help
90
+
91
+ Example usage:
92
+ powershell.exe -file check-focusedprocess.ps1 -process "chrome"
93
+
94
+ '@
95
+ }
96
+
97
+ if ((Format-ParamArray -Param $Process).Count -gt 1) {
98
+ Throw 'Only accepts a single process'
99
+ }
100
+
101
+ # Run!
102
+ Invoke-Main -CriticalItems $Process
@@ -0,0 +1,114 @@
1
+ #
2
+ # check-iscsi.ps1
3
+ #
4
+ # DESCRIPTION:
5
+ # This plugin checks that the specified iSCSI sessions are connected.
6
+ #
7
+ # It accepts the '-CriticalIQNs and '-ImportantIQNs' parameters to provide
8
+ # different status level outputs and also checks if the items passed are
9
+ # missing completely. Please see the '-Help' parameter, under the 'Sensu
10
+ # check token substitution' header for more info on some extra parsing
11
+ # features.
12
+ #
13
+ # It is built atop check-multi-template.ps1 as an example, and can be easily
14
+ # adapted to check other things.
15
+ #
16
+ # OUTPUT:
17
+ # OK example:
18
+ # CheckIscsi OK:
19
+ # All iSCSI sessions are connected.
20
+ #
21
+ # WARN example:
22
+ # CheckIscsi WARN:
23
+ # The following important sessions are not connected:
24
+ # - iqn.2001-05.com.equallogic:4-42a846-3d3bb3c30-9140000001255ddf-vol01
25
+ #
26
+ # CRITICAL example:
27
+ # CheckIscsi CRITICAL:
28
+ # The following critical sessions are not connected:
29
+ # - iqn.2001-05.com.equallogic:4-42a846-3d3bb3c30-9140000001255ddf-vol01
30
+ #
31
+ # CheckIscsi CRITICAL:
32
+ # The following critical sessions are not connected:
33
+ # - iqn.2001-05.com.equallogic:4-42a846-3d3bb3c30-9140000001255ddf-vol01
34
+ # The following important sessions are not connected:
35
+ # - iqn.2001-05.com.equallogic:4-42a846-3d3bb3c30-9140000001255ddf-vol02
36
+ #
37
+ # PLATFORMS:
38
+ # Windows
39
+ #
40
+ # DEPENDENCIES:
41
+ #
42
+ # USAGE:
43
+ # Please run this check with the '-help' parameter for more info.
44
+ #
45
+ # NOTES:
46
+ #
47
+ # LICENSE:
48
+ # Copyright 2016 James Booth <james@absolutejam.co.uk>
49
+ # Released under the same terms as Sensu (the MIT license); see LICENSE for
50
+ # details.
51
+ #
52
+
53
+
54
+ [CmdletBinding()]
55
+ Param(
56
+ # Target IQNs to check. If any are not connected, they will return a
57
+ # CRITICAL (2) status.
58
+ [Parameter(
59
+ Mandatory = $False
60
+ )]
61
+ [string]$CriticalIQNs,
62
+
63
+ # Target IQNs to check. If any are not connected, they will return a
64
+ # WARNING (1) status.
65
+ [Parameter(
66
+ Mandatory = $False
67
+ )]
68
+ [string]$ImportantIQNs,
69
+
70
+ # Display help about this check.
71
+ [switch]$Help
72
+ )
73
+
74
+ # Import template
75
+ $here = Split-Path -Parent $MyInvocation.MyCommand.Path
76
+ . "$here\check-multi-template.ps1"
77
+
78
+ # Override check options
79
+ $CheckOptions = @{
80
+ 'CheckName' = 'CheckIscsi'
81
+ 'MessageOK' = 'All iSCSI sessions are connected.'
82
+ 'MessageImportant' = 'The following important sessions are not connected:'
83
+ 'MessageCritical' = 'The following critical sessions are not connected:'
84
+ 'MessageMissing' = 'The following sessions are missing:'
85
+ 'MessageNoneSpecified' = 'No IQNs specified.'
86
+ 'MissingState' = 2
87
+ 'Inverse' = $True
88
+
89
+ 'ScriptBlockBaseItems' = {
90
+ Get-IscsiSession |
91
+ Select-Object -ExpandProperty TargetNodeAddress
92
+ }
93
+
94
+ 'ScriptBlockMatchItems' = {
95
+ Get-IscsiSession |
96
+ Select-Object -ExpandProperty TargetNodeAddress
97
+ }
98
+
99
+ 'CheckHelp' = @'
100
+ Checks whether any specified iSCSI sessions are not connected.
101
+
102
+ Arguments:
103
+ -CriticalIQNs A string of comma-separated iSCSI IQNs
104
+ -ImportantIQNs A string of comma-separated iSCSI IQNs
105
+ -Help Show help
106
+
107
+ Example usage:
108
+ powershell.exe -file check-iscsi.ps1 -criticaliqns "iqn..." -warningiqns "iqn..."
109
+
110
+ '@
111
+ }
112
+
113
+ # Run!
114
+ Invoke-Main -CriticalItems $CriticalIQNs -ImportantItems $ImportantIQNs