sensu-plugins-aws 0.0.1.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dab7adef4e04f7bc487ae96de657558e16cd94e5
4
+ data.tar.gz: d80911aa488f0ff85b48d4a4be995824af92b262
5
+ SHA512:
6
+ metadata.gz: 4ee5d2b5f5a54f359f868030fea933111d3cb403e85ace06719259893c658e6d7c973b3bef29e9d75b98df4566d99a627ad873bb994420d14f89d00e88853cc9
7
+ data.tar.gz: 802d9264b64bc401da0606273e34c15423ef56b9d81c18f28283be11d489c0cdbbf9f9bda77f4f61916dd8ef10ea5ac505f3f299ce4586937095ddac4a688905
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �f�y��?�E֜�Fݗ���8Dqz6�~,E�L��iv��诽hR�OЁ��I� y����P�1� H3��^%Y��j���y�SKv�eT9�ܮ�-H�5���^O_խ9TpMp�T�!~N����F����� �z�s�pY����,��.�%d��n�����l-��dF�q��Xhm3�|E�N=���W5�L!/ �uA���ޙ>�
2
+ ���:J��RR��o$1*��'�d�^���%?_�^�`�}r3
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ #### 0.1.0.alpha.1
2
+
3
+ * baseline release identical to **sensu-community-plugins** repo
4
+ * removed check-vpc-vpn.py
5
+ * built against 1.9.3, 2.0, 2.1
6
+ * change the ec2_node.rb to ec2-node.rb
7
+
8
+ #### 0.0.1.alpha.2
9
+
10
+ * add pry as a development dependency
11
+ * add new badge for dependencies
12
+ * add irc integration
13
+ * updated install instructions
14
+ * added check-vpc-vpn.py (may be removed before first stable release)
15
+ * pulled latest script version from community repo
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 devops@yieldbot.com
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,125 @@
1
+ ## Sensu-Plugins-aws
2
+
3
+ [![Build Status](https://travis-ci.org/sensu-plugins/sensu-plugins-aws.svg?branch=master)](https://travis-ci.org/sensu-plugins/sensu-plugins-aws)
4
+ [![Gem Version](https://badge.fury.io/rb/sensu-plugins-aws.svg)](http://badge.fury.io/rb/sensu-plugins-aws)
5
+ [![Code Climate](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws/badges/gpa.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws)
6
+ [![Test Coverage](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws/badges/coverage.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-aws)
7
+ [![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-aws.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-aws)
8
+
9
+ ## Functionality
10
+
11
+ **check_vpc_vpn**
12
+
13
+ **autoscaling-instance-count-metrics.rb**
14
+
15
+ **check-dynamodb-capacity.rb**
16
+
17
+ **check-dynamodb-throttle.rb**
18
+
19
+ **check-ec2-network.rb**
20
+
21
+ **check-elb-certs.rb**
22
+
23
+ **check-elb-health-fog.rb**
24
+
25
+ **check-elb-health-sdk.rb**
26
+
27
+ **check-elb-latency.rb**
28
+
29
+ **check-elb-nodes.rb**
30
+
31
+ **check-elb-sum-requests.rb**
32
+
33
+ **check-instance-events.rb**
34
+
35
+ **check-rds-events.rb**
36
+
37
+ **check-rds.rb**
38
+
39
+ **check-redshift-events.rb**
40
+
41
+ **check-ses-limit.rb**
42
+
43
+ **check-sqs-messages.rb**
44
+
45
+ **ec2-count-metrics.rb**
46
+
47
+ **ec2-node.rb**
48
+
49
+ **elasticache-metrics.rb**
50
+
51
+ **elb-full-metrics.rb**
52
+
53
+ **elb-latency-metrics.rb**
54
+
55
+ **elb-metrics.rb**
56
+
57
+ **sqs-metrics.rb**
58
+
59
+ ## Files
60
+
61
+ * /bin/check_vpc_vpn
62
+ * /bin/autoscaling-instance-count-metrics.rb
63
+ * /bin/check-dynamodb-capacity.rb
64
+ * /bin/check-dynamodb-throttle.rb
65
+ * /bin/check-ec2-network.rb
66
+ * /bin/check-elb-certs.rb
67
+ * /bin/check-elb-health-fog.rb
68
+ * /bin/check-elb-health-sdk.rb
69
+ * /bin/check-elb-latency.rb
70
+ * /bin/check-elb-nodes.rb
71
+ * /bin/check-elb-sum-requests.rb
72
+ * /bin/check-instance-events.rb
73
+ * /bin/check-rds-events.rb
74
+ * /bin/check-rds.rb
75
+ * /bin/check-redshift-events.rb
76
+ * /bin/check-ses-limit.rb
77
+ * /bin/check-sqs-messages.rb
78
+ * /bin/ec2-count-metrics.rb
79
+ * /bin/ec2-node.rb
80
+ * /bin/elasticache-metrics.rb
81
+ * /bin/elb-full-metrics.rb
82
+ * /bin/elb-latency-metrics.rb
83
+ * /bin/elb-metrics.rb
84
+ * /bin/sqs-metrics.rb
85
+
86
+ ## Usage
87
+
88
+ ## Installation
89
+
90
+ Add the public key (if you haven’t already) as a trusted certificate
91
+
92
+ ```
93
+ gem cert --add <(curl -Ls https://raw.githubusercontent.com/sensu-plugins/sensu-plugins.github.io/master/certs/sensu-plugins.pem)
94
+ gem install <gem> -P MediumSecurity
95
+ ```
96
+
97
+ You can also download the key from /certs/ within each repository.
98
+
99
+ #### Rubygems
100
+
101
+ `gem install sensu-plugins-aws`
102
+
103
+ #### Bundler
104
+
105
+ Add *sensu-plugins-aws* to your Gemfile and run `bundle install` or `bundle update`
106
+
107
+ #### Chef
108
+
109
+ Using the Sensu **sensu_gem** LWRP
110
+ ```
111
+ sensu_gem 'sensu-plugins-aws' do
112
+ options('--prerelease')
113
+ version '0.0.1.alpha.2'
114
+ end
115
+ ```
116
+
117
+ Using the Chef **gem_package** resource
118
+ ```
119
+ gem_package 'sensu-plugins-process-checks' do
120
+ options('--prerelease')
121
+ version '0.0.1.alpha.2'
122
+ end
123
+ ```
124
+
125
+ ## Notes
@@ -0,0 +1,87 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # autoscaling-instance-count-metrics
4
+ #
5
+ # DESCRIPTION:
6
+ # Get a count of instances in a given AutoScaling group
7
+ #
8
+ # OUTPUT:
9
+ # metric-data
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: aws-sdk
16
+ # gem: sensu-plugin
17
+ #
18
+ # USAGE:
19
+ #
20
+ # NOTES:
21
+ #
22
+ # LICENSE:
23
+ # Copyright 2013 Bashton Ltd http://www.bashton.com/
24
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
25
+ # for details.
26
+ #
27
+
28
+ require 'rubygems' if RUBY_VERSION < '1.9.0'
29
+ require 'sensu-plugin/metric/cli'
30
+ require 'aws-sdk'
31
+
32
+ class AutoScalingInstanceCountMetrics < Sensu::Plugin::Metric::CLI::Graphite
33
+ option :groupname,
34
+ description: 'Name of the AutoScaling group',
35
+ short: '-g GROUP_NAME',
36
+ long: '--autoscaling-group GROUP_NAME',
37
+ required: true
38
+
39
+ option :scheme,
40
+ description: 'Metric naming scheme, text to prepend to metric',
41
+ short: '-s SCHEME',
42
+ long: '--scheme SCHEME',
43
+ default: ''
44
+
45
+ option :aws_access_key,
46
+ short: '-a AWS_ACCESS_KEY',
47
+ long: '--aws-access-key AWS_ACCESS_KEY',
48
+ description: "AWS Access Key. Either set ENV['AWS_ACCESS_KEY_ID'] or provide it as an option",
49
+ default: ENV['AWS_ACCESS_KEY']
50
+
51
+ option :aws_secret_access_key,
52
+ short: '-k AWS_SECRET_ACCESS_KEY',
53
+ long: '--aws-secret-access-key AWS_SECRET_ACCESS_KEY',
54
+ description: "AWS Secret Access Key. Either set ENV['AWS_SECRET_ACCESS_KEY'] or provide it as an option",
55
+ default: ENV['AWS_SECRET_KEY']
56
+
57
+ option :aws_region,
58
+ short: '-r AWS_REGION',
59
+ long: '--aws-region REGION',
60
+ description: 'AWS Region (such as eu-west-1).',
61
+ default: 'us-east-1'
62
+
63
+ def aws_config
64
+ hash = {}
65
+ hash.update aws_access_key_id: config[:aws_access_key], aws_secret_access_key: config[:aws_secret_access_key]\
66
+ if config[:aws_access_key] && config[:aws_secret_access_key]
67
+ hash.update region: config[:aws_region]
68
+ hash
69
+ end
70
+
71
+ def run
72
+ if config[:scheme] == ''
73
+ graphitepath = "#{config[:groupname]}.autoscaling.instance_count"
74
+ else
75
+ graphitepath = config[:scheme]
76
+ end
77
+ begin
78
+ as = AWS::AutoScaling.new aws_config
79
+ count = as.groups[config[:groupname]].auto_scaling_instances.map(&:lifecycle_state).count('InService')
80
+ output graphitepath, count
81
+ rescue => e
82
+ puts "Error: exception: #{e}"
83
+ critical
84
+ end
85
+ ok
86
+ end
87
+ end
@@ -0,0 +1,183 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-dynamodb-capacity
4
+ #
5
+ # DESCRIPTION:
6
+ # Check DynamoDB statuses by CloudWatch and DynamoDB API.
7
+ #
8
+ # OUTPUT:
9
+ # plain-text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: aws-sdk
16
+ # gem: time
17
+ # gem: sensu-plugin
18
+ #
19
+ # USAGE:
20
+ # Warning if any table's consumed read/write capacity is over 80%, critical if over 90%
21
+ # check-dynamodb-capacity --warning-over 80 --critical-over 90
22
+ #
23
+ # Critical if session table's consumed read capacity is over 90%, maximum of last one hour
24
+ # check-dynamodb-capacity --table_names session --capacity-for read --critical-over 90 --statistics maximum --period 3600
25
+ #
26
+ # NOTES:
27
+ #
28
+ # LICENSE:
29
+ # Copyright 2014 github.com/y13i
30
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
31
+ # for details.
32
+ #
33
+
34
+ require 'rubygems' if RUBY_VERSION < '1.9.0'
35
+ require 'sensu-plugin/check/cli'
36
+ require 'aws-sdk'
37
+ require 'time'
38
+
39
+ class CheckDynamoDB < Sensu::Plugin::Check::CLI
40
+ option :access_key_id,
41
+ short: '-k N',
42
+ long: '--access-key-id ID',
43
+ description: 'AWS access key ID'
44
+
45
+ option :secret_access_key,
46
+ short: '-s N',
47
+ long: '--secret-access-key KEY',
48
+ description: 'AWS secret access key'
49
+
50
+ option :region,
51
+ short: '-r R',
52
+ long: '--region REGION',
53
+ description: 'AWS region'
54
+
55
+ option :table_names,
56
+ short: '-t N',
57
+ long: '--table-names NAMES',
58
+ proc: proc { |a| a.split(/[,;]\s*/) },
59
+ description: 'Table names to check. Separated by , or ;. If not specified, check all tables'
60
+
61
+ option :end_time,
62
+ short: '-t T',
63
+ long: '--end-time TIME',
64
+ default: Time.now,
65
+ proc: proc { |a| Time.parse a },
66
+ description: 'CloudWatch metric statistics end time'
67
+
68
+ option :period,
69
+ short: '-p N',
70
+ long: '--period SECONDS',
71
+ default: 60,
72
+ # #YELLOW
73
+ proc: proc(&:to_i),
74
+ description: 'CloudWatch metric statistics period'
75
+
76
+ option :statistics,
77
+ short: '-S N',
78
+ long: '--statistics NAME',
79
+ default: :average,
80
+ proc: proc { |a| a.downcase.intern },
81
+ description: 'CloudWatch statistics method'
82
+
83
+ option :capacity_for,
84
+ short: '-c N',
85
+ long: '--capacity-for NAME',
86
+ default: [:read, :write],
87
+ proc: proc { |a| a.split(/[,;]\s*/).map { |n| n.downcase.intern } },
88
+ description: 'Read/Write (or both) capacity to check.'
89
+
90
+ %w(warning critical).each do |severity|
91
+ option :"#{severity}_over",
92
+ long: "--#{severity}-over N",
93
+ # #YELLOW
94
+ proc: proc(&:to_f),
95
+ description: "Trigger a #{severity} if consumed capacity is over a percentage"
96
+ end
97
+
98
+ def aws_config
99
+ hash = {}
100
+ hash.update access_key_id: config[:access_key_id], secret_access_key: config[:secret_access_key] if config[:access_key_id] && config[:secret_access_key]
101
+ hash.update region: config[:region] if config[:region]
102
+ hash
103
+ end
104
+
105
+ def dynamo_db
106
+ @dynamo_db ||= AWS::DynamoDB.new aws_config
107
+ end
108
+
109
+ def cloud_watch
110
+ @cloud_watch ||= AWS::CloudWatch.new aws_config
111
+ end
112
+
113
+ def tables
114
+ return @tables if @tables
115
+ @tables = dynamo_db.tables.to_a
116
+ @tables.select! { |table| config[:table_names].include? table.name } if config[:table_names]
117
+ @tables
118
+ end
119
+
120
+ def cloud_watch_metric(metric_name, table_name)
121
+ cloud_watch.metrics.with_namespace('AWS/DynamoDB').with_metric_name(metric_name).with_dimensions(name: 'TableName', value: table_name).first
122
+ end
123
+
124
+ def statistics_options
125
+ {
126
+ start_time: config[:end_time] - config[:period],
127
+ end_time: config[:end_time],
128
+ statistics: [config[:statistics].to_s.capitalize],
129
+ period: config[:period]
130
+ }
131
+ end
132
+
133
+ def latest_value(metric)
134
+ metric.statistics(statistics_options.merge unit: 'Count').datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[config[:statistics]]
135
+ end
136
+
137
+ def flag_alert(severity, message)
138
+ @severities[severity] = true
139
+ @message += message
140
+ end
141
+
142
+ def check_capacity(table)
143
+ config[:capacity_for].each do |r_or_w|
144
+ metric_name = "Consumed#{r_or_w.to_s.capitalize}CapacityUnits"
145
+ metric = cloud_watch_metric metric_name, table.name
146
+ metric_value = begin
147
+ latest_value(metric)
148
+ rescue
149
+ 0
150
+ end
151
+ percentage = metric_value / table.send("#{r_or_w}_capacity_units").to_f * 100
152
+
153
+ @severities.keys.each do |severity|
154
+ threshold = config[:"#{severity}_over"]
155
+ next unless threshold
156
+ next if percentage < threshold
157
+ flag_alert severity, "; On table #{table.name} consumed #{r_or_w} capacity is #{sprintf '%.2f', percentage}% (expected_lower_than #{threshold})"
158
+ break
159
+ end
160
+ end
161
+ end
162
+
163
+ def run
164
+ @message = "#{tables.size} tables total"
165
+ @severities = {
166
+ critical: false,
167
+ warning: false
168
+ }
169
+
170
+ tables.each { |table| check_capacity table }
171
+
172
+ @message += "; (#{config[:statistics].to_s.capitalize} within #{config[:period]} seconds "
173
+ @message += "between #{config[:end_time] - config[:period]} to #{config[:end_time]})"
174
+
175
+ if @severities[:critical]
176
+ critical @message
177
+ elsif @severities[:warning]
178
+ warning @message
179
+ else
180
+ ok @message
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,177 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-dynamodb-throttle
4
+ #
5
+ # DESCRIPTION:
6
+ # Check DynamoDB throttle by CloudWatch and DynamoDB API.
7
+ #
8
+ # OUTPUT:
9
+ # plain-text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: aws-sdk
16
+ # gem: time
17
+ # gem: sensu-plugin
18
+ #
19
+ # USAGE:
20
+ # Critical if session table's read throttle is over 50 for the last 5 minutes
21
+ # check-dynamodb-throttle --table_names session --throttle-for read --critical-over 50 --statistics sum --period 300
22
+ #
23
+ # NOTES:
24
+ #
25
+ # LICENSE:
26
+ # Copyright 2014 Sonian, Inc. and contributors. <support@sensuapp.org>
27
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
28
+ # for details.
29
+ #
30
+
31
+ require 'rubygems' if RUBY_VERSION < '1.9.0'
32
+ require 'sensu-plugin/check/cli'
33
+ require 'aws-sdk'
34
+ require 'time'
35
+
36
+ class CheckDynamoDB < Sensu::Plugin::Check::CLI
37
+ option :access_key_id,
38
+ short: '-k N',
39
+ long: '--access-key-id ID',
40
+ description: 'AWS access key ID'
41
+
42
+ option :secret_access_key,
43
+ short: '-s N',
44
+ long: '--secret-access-key KEY',
45
+ description: 'AWS secret access key'
46
+
47
+ option :region,
48
+ short: '-r R',
49
+ long: '--region REGION',
50
+ description: 'AWS region'
51
+
52
+ option :table_names,
53
+ short: '-t N',
54
+ long: '--table-names NAMES',
55
+ proc: proc { |a| a.split(/[,;]\s*/) },
56
+ description: 'Table names to check. Separated by , or ;. If not specified, check all tables'
57
+
58
+ option :end_time,
59
+ short: '-t T',
60
+ long: '--end-time TIME',
61
+ default: Time.now,
62
+ proc: proc { |a| Time.parse a },
63
+ description: 'CloudWatch metric statistics end time'
64
+
65
+ option :period,
66
+ short: '-p N',
67
+ long: '--period SECONDS',
68
+ default: 60,
69
+ proc: proc(&:to_i),
70
+ description: 'CloudWatch metric statistics period'
71
+
72
+ option :statistics,
73
+ short: '-S N',
74
+ long: '--statistics NAME',
75
+ default: :average,
76
+ proc: proc { |a| a.downcase.intern },
77
+ description: 'CloudWatch statistics method'
78
+
79
+ option :throttle_for,
80
+ short: '-c N',
81
+ long: '--throttle-for NAME',
82
+ default: [:read, :write],
83
+ proc: proc { |a| a.split(/[,;]\s*/).map { |n| n.downcase.intern } },
84
+ description: 'Read/Write (or both) throttle to check.'
85
+
86
+ %w(warning critical).each do |severity|
87
+ option :"#{severity}_over",
88
+ long: "--#{severity}-over N",
89
+ proc: proc(&:to_f),
90
+ description: "Trigger a #{severity} if throttle is over the given number"
91
+ end
92
+
93
+ def aws_config
94
+ hash = {}
95
+ hash.update access_key_id: config[:access_key_id], secret_access_key: config[:secret_access_key] if config[:access_key_id] && config[:secret_access_key]
96
+ hash.update region: config[:region] if config[:region]
97
+ hash
98
+ end
99
+
100
+ def dynamo_db
101
+ @dynamo_db ||= AWS::DynamoDB.new aws_config
102
+ end
103
+
104
+ def cloud_watch
105
+ @cloud_watch ||= AWS::CloudWatch.new aws_config
106
+ end
107
+
108
+ def tables
109
+ return @tables if @tables
110
+ @tables = dynamo_db.tables.to_a
111
+ @tables.select! { |table| config[:table_names].include? table.name } if config[:table_names]
112
+ @tables
113
+ end
114
+
115
+ def cloud_watch_metric(metric_name, table_name)
116
+ cloud_watch.metrics.with_namespace('AWS/DynamoDB').with_metric_name(metric_name).with_dimensions(name: 'TableName', value: table_name).first
117
+ end
118
+
119
+ def statistics_options
120
+ {
121
+ start_time: config[:end_time] - config[:period],
122
+ end_time: config[:end_time],
123
+ statistics: [config[:statistics].to_s.capitalize],
124
+ period: config[:period]
125
+ }
126
+ end
127
+
128
+ def latest_value(metric)
129
+ metric.statistics(statistics_options.merge unit: 'Count').datapoints.sort_by { |datapoint| datapoint[:timestamp] }.last[config[:statistics]]
130
+ end
131
+
132
+ def flag_alert(severity, message)
133
+ @severities[severity] = true
134
+ @message += message
135
+ end
136
+
137
+ def check_throttle(table)
138
+ config[:throttle_for].each do |r_or_w|
139
+ metric_name = "#{r_or_w.to_s.capitalize}ThrottleEvents"
140
+ metric = cloud_watch_metric metric_name, table.name
141
+ metric_value = begin
142
+ latest_value(metric)
143
+ rescue
144
+ 0
145
+ end
146
+
147
+ @severities.keys.each do |severity|
148
+ threshold = config[:"#{severity}_over"]
149
+ next unless threshold
150
+ next if metric_value < threshold
151
+ flag_alert severity, "; On table #{table.name} #{r_or_w.to_s.capitalize}ThrottleEvents is #{metric_value} (higher_than #{threshold})"
152
+ break
153
+ end
154
+ end
155
+ end
156
+
157
+ def run
158
+ @message = "#{tables.size} tables total"
159
+ @severities = {
160
+ critical: false,
161
+ warning: false
162
+ }
163
+
164
+ tables.each { |table| check_throttle table }
165
+
166
+ @message += "; (#{config[:statistics].to_s.capitalize} within #{config[:period]} seconds "
167
+ @message += "between #{config[:end_time] - config[:period]} to #{config[:end_time]})"
168
+
169
+ if @severities[:critical]
170
+ critical @message
171
+ elsif @severities[:warning]
172
+ warning @message
173
+ else
174
+ ok @message
175
+ end
176
+ end
177
+ end