sensu-plugins-aws 10.0.3 → 10.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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35e5a15486f7584a9ba3511aa6511e5499749785c6eb479b2bf466e387f5453e
|
4
|
+
data.tar.gz: fba519f316d43e12c735671f13c4d83e267fc3deab9c3379408fbc2239968ef3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 971426511c04536e2c5915af6e22b1429b54d2699ec24ef04caa0d5c42f04020f37ac8013a1434cbd5bafd368c8324a0bc1e2e1de33975acefb28085fcffb3f6
|
7
|
+
data.tar.gz: 694f183d1e74bc11f8596930d847fa439fe0a08154a9e3e90e17b535c780c9966889130cf8fdae078ff20cd695f42d39a709d82ad2e58223355e0a72977bfc52
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,10 @@ This CHANGELOG follows the format listed [here](https://github.com/sensu-plugins
|
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
7
|
|
8
|
+
## [10.1.0] - 2018-01-06
|
9
|
+
- check-cloudwatch-composite-metric.rb: add flags `zero_denominator_data_ok`, `no_denominator_data_ok`, and `numerator_default` to add ability to allow numerator in composite to be 0. While leaving the functionality of `no_data_ok` the same, this change allows us to check to alert if the numerator has no data since 0/X is a valid alert case. (@zbintliff)
|
10
|
+
- lib/cloudwatch-common.rb: added tests for majority of functions (@zbintliff)
|
11
|
+
|
8
12
|
## [10.0.3] - 2017-12-03
|
9
13
|
### Fixed
|
10
14
|
- metrics-asg.rb: fix dimension name, handle the --scheme flag, make the --statistic flag work, support autoscaling groups containing spaces in their name (@multani)
|
@@ -406,7 +410,8 @@ WARNING: This release contains major breaking changes that will impact all user
|
|
406
410
|
### Added
|
407
411
|
- initial release
|
408
412
|
|
409
|
-
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/10.0
|
413
|
+
[Unreleased]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/10.1.0...HEAD
|
414
|
+
[10.1.0]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/10.1.0...10.0.3
|
410
415
|
[10.0.3]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/10.0.2...10.0.3
|
411
416
|
[10.0.2]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/10.0.1...10.0.2
|
412
417
|
[10.0.1]: https://github.com/sensu-plugins/sensu-plugins-aws/compare/10.0.0...10.0.1
|
@@ -85,14 +85,14 @@ class CloudWatchCompositeMetricCheck < Sensu::Plugin::Check::CLI
|
|
85
85
|
description: 'CloudWatch metric unit'
|
86
86
|
|
87
87
|
option :critical,
|
88
|
-
description: 'Trigger a critical when value is over VALUE',
|
88
|
+
description: 'Trigger a critical when value is over VALUE as a Percent',
|
89
89
|
short: '-c VALUE',
|
90
90
|
long: '--critical VALUE',
|
91
91
|
proc: proc(&:to_f),
|
92
92
|
required: true
|
93
93
|
|
94
94
|
option :warning,
|
95
|
-
description: 'Trigger a warning when value is over VALUE',
|
95
|
+
description: 'Trigger a warning when value is over VALUE as a Percent',
|
96
96
|
short: '-w VALUE',
|
97
97
|
long: '--warning VALUE',
|
98
98
|
proc: proc(&:to_f)
|
@@ -103,20 +103,97 @@ class CloudWatchCompositeMetricCheck < Sensu::Plugin::Check::CLI
|
|
103
103
|
long: '--operator OPERATION',
|
104
104
|
default: 'greater'
|
105
105
|
|
106
|
+
option :numerator_default,
|
107
|
+
long: '--numerator-default DEFAULT',
|
108
|
+
description: 'Default for numerator if no data is returned for metric',
|
109
|
+
proc: proc(&:to_f)
|
110
|
+
|
111
|
+
option :no_denominator_data_ok,
|
112
|
+
long: '--allow-no-denominator-data',
|
113
|
+
description: 'Returns ok if no data is returned from denominator metric',
|
114
|
+
boolean: true,
|
115
|
+
default: false
|
116
|
+
|
117
|
+
option :zero_denominator_data_ok,
|
118
|
+
long: '--allow-zero-denominator-data',
|
119
|
+
description: 'Returns ok if denominator metric is zero',
|
120
|
+
boolean: true,
|
121
|
+
default: false
|
122
|
+
|
106
123
|
option :no_data_ok,
|
107
124
|
short: '-O',
|
108
125
|
long: '--allow-no-data',
|
109
|
-
description: 'Returns ok if no data is returned from
|
126
|
+
description: 'Returns ok if no data is returned from either metric',
|
110
127
|
boolean: true,
|
111
128
|
default: false
|
112
|
-
|
113
129
|
include CloudwatchCommon
|
114
130
|
|
115
131
|
def metric_desc
|
116
132
|
"#{config[:namespace]}-#{config[:numerator_metric_name]}/#{config[:denominator_metric_name]}(#{dimension_string})"
|
117
133
|
end
|
118
134
|
|
135
|
+
def numerator_data(metric_payload)
|
136
|
+
if resp_has_no_data(metric_payload, config[:statistics])
|
137
|
+
# If the numerator response has no data in it, see if there was a predefined default.
|
138
|
+
# If there is no predefined default it will return nil
|
139
|
+
config[:numerator_default]
|
140
|
+
else
|
141
|
+
read_value(metric_payload, config[:statistics]).to_f
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# rubocop:disable Style/GuardClause
|
146
|
+
def composite_check
|
147
|
+
numerator_metric_resp = get_metric(config[:numerator_metric_name])
|
148
|
+
denominator_metric_resp = get_metric(config[:denominator_metric_name])
|
149
|
+
|
150
|
+
## If the numerator is empty, then we see if there is a default. If there is a default
|
151
|
+
## then we will pretend the numerator _isnt_ empty. That is
|
152
|
+
## if empty but there is no default this will be true. If it is empty and there is a default
|
153
|
+
## this will be false (i.e. there is data, following standard of dealing in the negative here)
|
154
|
+
no_num_data = numerator_data(numerator_metric_resp).nil?
|
155
|
+
no_den_data = resp_has_no_data(denominator_metric_resp, config[:statistics])
|
156
|
+
no_data = no_num_data || no_den_data
|
157
|
+
|
158
|
+
# no data in numerator or denominator this is to keep backwards compatibility
|
159
|
+
if no_data && config[:no_data_ok]
|
160
|
+
return :ok, "#{metric_desc} returned no data but that's ok"
|
161
|
+
elsif no_den_data && config[:no_denominator_data_ok]
|
162
|
+
return :ok, "#{config[:denominator_metric_name]} returned no data but that's ok"
|
163
|
+
elsif no_data ## This is legacy case
|
164
|
+
return :unknown, "#{metric_desc} could not be retrieved"
|
165
|
+
end
|
166
|
+
|
167
|
+
## Now both the denominator and numerator have data (or a valid default)
|
168
|
+
denominator_value = read_value(denominator_metric_resp, config[:statistics]).to_f
|
169
|
+
if denominator_value.zero? && config[:zero_denominator_data_ok]
|
170
|
+
return :ok, "#{metric_desc}: denominator value is zero but that's ok"
|
171
|
+
elsif denominator_value.zero?
|
172
|
+
return :unknown, "#{metric_desc}: denominator value is zero"
|
173
|
+
end
|
174
|
+
|
175
|
+
## We already checked if this value is nil so we know its not
|
176
|
+
numerator_value = numerator_data(numerator_metric_resp)
|
177
|
+
value = (numerator_value / denominator_value * 100).to_i
|
178
|
+
base_msg = "#{metric_desc} is #{value}: comparison=#{config[:compare]}"
|
179
|
+
|
180
|
+
if compare(value, config[:critical], config[:compare])
|
181
|
+
return :critical, "#{base_msg} threshold=#{config[:critical]}"
|
182
|
+
elsif config[:warning] && compare(value, config[:warning], config[:compare])
|
183
|
+
return :warning, "#{base_msg} threshold=#{config[:warning]}"
|
184
|
+
else
|
185
|
+
threshold = config[:warning] || config[:critical]
|
186
|
+
return :ok, "#{base_msg}, will alarm at #{threshold}"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
# rubocop:enable Style/GuardClause
|
190
|
+
|
119
191
|
def run
|
120
|
-
composite_check
|
192
|
+
status, msg = composite_check
|
193
|
+
if respond_to?(status)
|
194
|
+
send(status, msg)
|
195
|
+
else
|
196
|
+
unknown 'unknown exit status called'
|
197
|
+
end
|
121
198
|
end
|
122
199
|
end
|
@@ -3,7 +3,7 @@ module CloudwatchCommon
|
|
3
3
|
include Common
|
4
4
|
|
5
5
|
def client
|
6
|
-
Aws::CloudWatch::Client.new
|
6
|
+
@client ||= Aws::CloudWatch::Client.new
|
7
7
|
end
|
8
8
|
|
9
9
|
def read_value(resp, stats)
|
@@ -40,47 +40,13 @@ module CloudwatchCommon
|
|
40
40
|
}
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
44
|
-
|
45
|
-
namespace: config[:namespace],
|
46
|
-
metric_name: config[metric],
|
47
|
-
dimensions: config[:dimensions],
|
48
|
-
start_time: fixed_time_now - config[:period] * 10,
|
49
|
-
end_time: fixed_time_now,
|
50
|
-
period: config[:period],
|
51
|
-
statistics: [config[:statistics]],
|
52
|
-
unit: config[:unit]
|
53
|
-
}
|
43
|
+
def get_metric(metric)
|
44
|
+
client.get_metric_statistics(composite_metrics_request(metric))
|
54
45
|
end
|
55
46
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
59
|
-
denominator_metric_resp = client.get_metric_statistics(composite_metrics_request(config, :denominator_metric_name, fixed_time_now))
|
60
|
-
|
61
|
-
no_data = resp_has_no_data(numerator_metric_resp, config[:statistics]) || \
|
62
|
-
resp_has_no_data(denominator_metric_resp, config[:statistics])
|
63
|
-
if no_data && config[:no_data_ok]
|
64
|
-
ok "#{metric_desc} returned no data but that's ok"
|
65
|
-
elsif no_data && !config[:no_data_ok]
|
66
|
-
unknown "#{metric_desc} could not be retrieved"
|
67
|
-
end
|
68
|
-
|
69
|
-
denominator_value = read_value(denominator_metric_resp, config[:statistics]).to_f
|
70
|
-
if denominator_value.zero?
|
71
|
-
ok "#{metric_desc} denominator value is zero but that's ok"
|
72
|
-
end
|
73
|
-
numerator_value = read_value(numerator_metric_resp, config[:statistics]).to_f
|
74
|
-
value = (numerator_value / denominator_value * 100).to_i
|
75
|
-
base_msg = "#{metric_desc} is #{value}: comparison=#{config[:compare]}"
|
76
|
-
|
77
|
-
if compare(value, config[:critical], config[:compare])
|
78
|
-
critical "#{base_msg} threshold=#{config[:critical]}"
|
79
|
-
elsif config[:warning] && compare(value, config[:warning], config[:compare])
|
80
|
-
warning "#{base_msg} threshold=#{config[:warning]}"
|
81
|
-
else
|
82
|
-
ok "#{base_msg}, will alarm at #{!config[:warning].nil? ? config[:warning] : config[:critical]}"
|
83
|
-
end
|
47
|
+
def composite_metrics_request(metric)
|
48
|
+
## config is a class variable but don't want to change signature
|
49
|
+
metrics_request(config).merge(metric_name: metric)
|
84
50
|
end
|
85
51
|
|
86
52
|
def self.parse_dimensions(dimension_string)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-plugins-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.0
|
4
|
+
version: 10.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:
|
11
|
+
date: 2018-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -445,7 +445,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
445
445
|
version: '0'
|
446
446
|
requirements: []
|
447
447
|
rubyforge_project:
|
448
|
-
rubygems_version: 2.7.
|
448
|
+
rubygems_version: 2.7.4
|
449
449
|
signing_key:
|
450
450
|
specification_version: 4
|
451
451
|
summary: Sensu plugins for working with an AWS environment
|