sensu-plugins-azurerm 3.0.0 → 3.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: ff0fa250c2293cad95e559c4863b4daf23ed897bea75b90c20cca883a2023230
4
- data.tar.gz: 79177b35b8700c4a1f9fcb9cc0990e960cc39f8b9c38cb9edf1af20447d95b04
3
+ metadata.gz: 1c0d821b364b1f014fc8bd22be6ab36099ebf97d153d1285b47f29b09babd7c5
4
+ data.tar.gz: 3749b5a3f31d8d81097c4544d76428f5fbdf44daf681b4dc35f22b37ef023bfe
5
5
  SHA512:
6
- metadata.gz: 2d42c8551191ea1eb705533f900042552a091ecee67f7af807f99fb9f9c5a461c3e702493d28af9fe59d26f0449ed9fd613bcd4c9aaaf56bb03dff86b05e5bc6
7
- data.tar.gz: 68de20eed748026c0946b831c88e1205a38ca3239b2f2d5aaa8de8f46a5891ca5e13db3068a943afee2801a8046a5afb5af31cd42b952269a8ac1460ca10e956
6
+ metadata.gz: 7bb2b51fc3cbb14ba2b667414ce71582c28e70a6ce7d5c7af1919345e1624e87e0fed9f6c5ce6a4c4cdc5028b74ab3f91d9f5dfbc9656e49cbbb01858ac0450b
7
+ data.tar.gz: c4570fabb5ee1cd9e8003e6245a18dcc9f2adfb4466907cd5231d7bad560c6e012df63d7cbf391e43598ea5966ea43b4e6168a71b965cbef5cc0906ca5a4ecae
data/CHANGELOG.md CHANGED
@@ -5,6 +5,10 @@ This CHANGELOG follows the format located [here](https://github.com/sensu-plugin
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [3.1.0] - 2019-03-04
9
+ ### Added
10
+ - check-azurerm-monitor-metric.rb: added `--aggregate_results aggregation_type TYPE` option that allows users to aggregate results returned from Azure DB query @MrMisa93
11
+
8
12
  ## [3.0.0] - 2018-09-15
9
13
  ### Security
10
14
  - updated `yard` dependency to `~> 0.9.11` per: https://nvd.nist.gov/vuln/detail/CVE-2017-17042 which closes attacks against a yard server loading arbitrary files (@majormoses)
@@ -94,7 +98,8 @@ This CHANGELOG follows the format located [here](https://github.com/sensu-plugin
94
98
  ### Added
95
99
  - initial release
96
100
 
97
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-azurerm/compare/3.0.0..HEAD
101
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-azurerm/compare/3.1.0..HEAD
102
+ [3.1.0]: https://github.com/sensu-plugins/sensu-plugins-azurerm/compare/3.0.0..3.1.0
98
103
  [3.0.0]: https://github.com/sensu-plugins/sensu-plugins-azurerm/compare/2.1.0..3.0.0
99
104
  [2.1.0]: https://github.com/sensu-plugins/sensu-plugins-azurerm/compare/2.0.0...2.1.0
100
105
  [2.0.0]: https://github.com/sensu-plugins/sensu-plugins-azurerm/compare/1.0.0..2.0.0
@@ -127,11 +127,18 @@ class CheckAzurermMonitorMetric < Sensu::Plugin::Check::CLI
127
127
  short: '-f FILTER',
128
128
  long: '--filter FILTER'
129
129
 
130
- option :aggregation,
131
- description: 'Aggregation. This can be Average, Count, Maximum, Minimum, Total',
130
+ option :request_aggregation,
131
+ description: 'Used as a parameter to the HTTP request sent to Azure. This can be average, count, maximum, minimum, total',
132
132
  short: '-a aggregation',
133
133
  long: '--aggregation aggregation',
134
- default: 'average'
134
+ default: 'average',
135
+ in: %w[average count maximum minimum total]
136
+
137
+ option :aggregate_results,
138
+ description: 'Aggregate the result data points to compare against alert conditions. This can be average, count, maximum, minimum, total',
139
+ long: '--aggregate_results aggregation_type',
140
+ default: 'none',
141
+ in: %w[average count maximum minimum total none]
135
142
 
136
143
  option :warning_over,
137
144
  description: 'The warning threshold to check if the metric is forecasted to go over.',
@@ -178,31 +185,35 @@ class CheckAzurermMonitorMetric < Sensu::Plugin::Check::CLI
178
185
  unknown 'At least one threshold must be provided.'
179
186
  end
180
187
 
181
- if last_metric_values.empty?
182
- unknown "There are no metric values for #{config[:metric]} on resource #{config[:resource_id] || config[:resource_name]} with aggregation #{config[:aggregation]}"
183
- else
184
- critical_messages = []
185
- warning_messages = []
186
-
187
- last_metric_values.each do |metric_val|
188
- if config[:critical_over] && metric_val[:value] > config[:critical_over].to_f
189
- critical_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
190
- elsif config[:warning_over] && metric_val[:value] > config[:warning_over].to_f
191
- warning_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
192
- elsif config[:critical_under] && metric_val[:value] < config[:critical_under].to_f
193
- critical_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
194
- elsif config[:warning_under] && metric_val[:value] < config[:warning_under].to_f
195
- warning_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
188
+ if config[:aggregate_results] == 'none'
189
+ if last_metric_values.empty?
190
+ unknown "There are no metric values for #{config[:metric]} on resource #{config[:resource_id] || config[:resource_name]} with aggregation #{config[:aggregation]}"
191
+ else
192
+ critical_messages = []
193
+ warning_messages = []
194
+
195
+ last_metric_values.each do |metric_val|
196
+ if config[:critical_over] && metric_val[:value] > config[:critical_over].to_f
197
+ critical_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
198
+ elsif config[:warning_over] && metric_val[:value] > config[:warning_over].to_f
199
+ warning_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
200
+ elsif config[:critical_under] && metric_val[:value] < config[:critical_under].to_f
201
+ critical_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
202
+ elsif config[:warning_under] && metric_val[:value] < config[:warning_under].to_f
203
+ warning_messages << "Metric #{metric_val[:metric_name]} is #{metric_val[:value]}"
204
+ end
196
205
  end
197
- end
198
206
 
199
- if !critical_messages.empty?
200
- critical critical_messages.join("\n")
201
- elsif !warning_messages.empty?
202
- warning warning_messages.join("\n")
203
- else
204
- ok 'Metric(s) are within thresholds'
207
+ if !critical_messages.empty?
208
+ critical critical_messages.join("\n")
209
+ elsif !warning_messages.empty?
210
+ warning warning_messages.join("\n")
211
+ else
212
+ ok 'Metric(s) are within thresholds'
213
+ end
205
214
  end
215
+ else
216
+ verify_results_with_aggregation
206
217
  end
207
218
  end
208
219
 
@@ -264,7 +275,7 @@ class CheckAzurermMonitorMetric < Sensu::Plugin::Check::CLI
264
275
  end
265
276
 
266
277
  def metric_value_key
267
- config[:aggregation].to_sym
278
+ config[:request_aggregation].to_sym
268
279
  end
269
280
 
270
281
  def metric_response
@@ -297,7 +308,7 @@ class CheckAzurermMonitorMetric < Sensu::Plugin::Check::CLI
297
308
  "api-version=#{AZURE_API_VER}&" \
298
309
  "metric=#{config[:metric]}&" \
299
310
  "timespan=#{CGI.escape(timespan)}&" \
300
- "aggregation=#{config[:aggregation]}"
311
+ "aggregation=#{config[:request_aggregation]}"
301
312
 
302
313
  url += "&$filter=#{CGI.escape(config[:filter])}" if config[:filter]
303
314
 
@@ -353,4 +364,83 @@ class CheckAzurermMonitorMetric < Sensu::Plugin::Check::CLI
353
364
  def handle_response(res)
354
365
  critical "Failed to get metric:\n#{res.body}" if res.code.to_i >= 300
355
366
  end
367
+
368
+ def verify_results_with_aggregation
369
+ request_values = extract_request_values
370
+
371
+ aggregated_value = aggregate_request_values(request_values, config[:aggregate_results])
372
+
373
+ results_type = verify_result(aggregated_value)
374
+
375
+ exits_with_message(results_type, request_values[0][:name], aggregated_value)
376
+ end
377
+
378
+ def extract_request_values
379
+ values = []
380
+ metric_response[:value].each do |metric_resp_value|
381
+ name = metric_resp_value[:name] ? metric_resp_value[:name][:value] : ''
382
+
383
+ next if metric_resp_value[:timeseries].empty?
384
+
385
+ metric_resp_value[:timeseries].each do |ts|
386
+ ts[:data].each do |metric_value|
387
+ if metric_value[metric_value_key]
388
+ values << {
389
+ value: metric_value[metric_value_key].to_f,
390
+ name: name
391
+ }
392
+ end
393
+ end
394
+ end
395
+ end
396
+ values
397
+ end
398
+
399
+ def aggregate_request_values(request_values, aggregation_type)
400
+ result_values = []
401
+
402
+ request_values.each do |metric_val|
403
+ result_values.push(metric_val[:value])
404
+ end
405
+
406
+ case aggregation_type
407
+ when 'average'
408
+ result_value = result_values.inject { |sum, el| sum + el }.to_f / result_values.size
409
+ when 'maximum'
410
+ result_value = result_values.max
411
+ when 'minimum'
412
+ result_value = result_values.min
413
+ when 'total'
414
+ result_value = result_values.inject(0) { |sum, x| sum + x }
415
+ when 'count'
416
+ result_value = result_values.size
417
+ end
418
+ result_value
419
+ end
420
+
421
+ def verify_result(aggregated_value)
422
+ results_type = 'none'
423
+ if config[:critical_over] && aggregated_value > config[:critical_over].to_f
424
+ results_type = 'critical'
425
+ elsif config[:warning_over] && aggregated_value > config[:warning_over].to_f
426
+ results_type = 'warning'
427
+ elsif config[:critical_under] && aggregated_value < config[:critical_under].to_f
428
+ results_type = 'critical'
429
+ elsif config[:warning_under] && aggregated_value < config[:warning_under].to_f
430
+ results_type = 'warning'
431
+ end
432
+ results_type
433
+ end
434
+
435
+ def exits_with_message(type, metric_name, aggregated_value)
436
+ message = "Metric #{metric_name} is #{aggregated_value}"
437
+ case type
438
+ when 'none'
439
+ ok 'Metric(s) are within thresholds'
440
+ when 'warning'
441
+ warning message
442
+ when 'critical'
443
+ critical message
444
+ end
445
+ end
356
446
  end
@@ -1,7 +1,7 @@
1
1
  module SensuPluginsAzureRM
2
2
  module Version
3
3
  MAJOR = 3
4
- MINOR = 0
4
+ MINOR = 1
5
5
  PATCH = 0
6
6
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-azurerm
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Harvey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-15 00:00:00.000000000 Z
11
+ date: 2019-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: azure_mgmt_compute
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.3'
117
+ version: '3.0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.3'
124
+ version: '3.0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: kitchen-docker
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -154,22 +154,22 @@ dependencies:
154
154
  name: mixlib-shellout
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "<"
158
- - !ruby/object:Gem::Version
159
- version: 2.3.0
160
157
  - - "~>"
161
158
  - !ruby/object:Gem::Version
162
159
  version: '2.2'
160
+ - - "<"
161
+ - !ruby/object:Gem::Version
162
+ version: 2.3.0
163
163
  type: :development
164
164
  prerelease: false
165
165
  version_requirements: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - "<"
168
- - !ruby/object:Gem::Version
169
- version: 2.3.0
170
167
  - - "~>"
171
168
  - !ruby/object:Gem::Version
172
169
  version: '2.2'
170
+ - - "<"
171
+ - !ruby/object:Gem::Version
172
+ version: 2.3.0
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: pry
175
175
  requirement: !ruby/object:Gem::Requirement
@@ -190,14 +190,14 @@ dependencies:
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '10.5'
193
+ version: '12.3'
194
194
  type: :development
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: '10.5'
200
+ version: '12.3'
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: rdoc
203
203
  requirement: !ruby/object:Gem::Requirement
@@ -394,8 +394,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
394
394
  - !ruby/object:Gem::Version
395
395
  version: '0'
396
396
  requirements: []
397
- rubyforge_project:
398
- rubygems_version: 2.7.7
397
+ rubygems_version: 3.0.3
399
398
  signing_key:
400
399
  specification_version: 4
401
400
  summary: Sensu plugins for working with an Azure Resource Manager environment