sensu-plugins-azurerm 3.0.0 → 3.1.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: 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