Class: Sensu::Handler
- Inherits:
-
Object
- Object
- Sensu::Handler
- Includes:
- Mixlib::CLI, Plugin::Utils
- Defined in:
- lib/sensu-handler.rb
Constant Summary collapse
- @@autorun =
This works just like Plugin::CLI’s autorun.
self
Instance Attribute Summary collapse
-
#argv ⇒ Object
Returns the value of attribute argv.
Class Method Summary collapse
Instance Method Summary collapse
- #bail(msg) ⇒ Object
-
#deprecated_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by any of the filter methods in this library.
-
#deprecated_occurrence_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by the filter_repeated method.
- #event_exists?(client, check) ⇒ Boolean
-
#event_summary(trim_at = 100) ⇒ Object
Helpers and filters.
-
#filter ⇒ Object
Filters exit the proccess if the event should not be handled.
- #filter_dependencies ⇒ Object
- #filter_disabled ⇒ Object
- #filter_repeated ⇒ Object
- #filter_silenced ⇒ Object
-
#handle ⇒ Object
Implementing classes should override this.
-
#initialize(argv = ARGV) ⇒ Handler
constructor
A new instance of Handler.
- #stash_exists?(path) ⇒ Boolean
Methods included from Plugin::Utils
#api_request, #api_settings, #api_settings=, #cast_bool_values_int, #config_files, #deep_merge, #load_config, #net_http_req_class, #paginated_get, #read_event, #settings
Constructor Details
#initialize(argv = ARGV) ⇒ Handler
Returns a new instance of Handler.
15 16 17 18 |
# File 'lib/sensu-handler.rb', line 15 def initialize(argv = ARGV) super() self.argv = (argv) end |
Instance Attribute Details
#argv ⇒ Object
Returns the value of attribute argv.
13 14 15 |
# File 'lib/sensu-handler.rb', line 13 def argv @argv end |
Class Method Details
.disable_autorun ⇒ Object
68 69 70 |
# File 'lib/sensu-handler.rb', line 68 def self.disable_autorun @@autorun = false end |
.method_added(name) ⇒ Object
63 64 65 |
# File 'lib/sensu-handler.rb', line 63 def method_added(name) @@autorun = self if name == :handle end |
Instance Method Details
#bail(msg) ⇒ Object
95 96 97 98 99 100 |
# File 'lib/sensu-handler.rb', line 95 def bail(msg) client_name = @event['client']['name'] || 'error:no-client-name' check_name = @event['check']['name'] || 'error:no-check-name' puts "#{msg}: #{client_name}/#{check_name}" exit 0 end |
#deprecated_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by any of the filter methods in this library. Defaults to true, i.e. deprecated filters are run by default.
46 47 48 |
# File 'lib/sensu-handler.rb', line 46 def deprecated_filtering_enabled? @event['check'].fetch('enable_deprecated_filtering', false).to_s == 'true' end |
#deprecated_occurrence_filtering_enabled? ⇒ TrueClass, FalseClass
Evaluates whether the event should be processed by the filter_repeated method. Defaults to true, i.e. filter_repeated will filter events by default.
55 56 57 |
# File 'lib/sensu-handler.rb', line 55 def deprecated_occurrence_filtering_enabled? @event['check'].fetch('enable_deprecated_occurrence_filtering', false).to_s == 'true' end |
#event_exists?(client, check) ⇒ Boolean
154 155 156 |
# File 'lib/sensu-handler.rb', line 154 def event_exists?(client, check) api_request(:GET, '/events/' + client + '/' + check).code == '200' end |
#event_summary(trim_at = 100) ⇒ Object
Helpers and filters.
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/sensu-handler.rb', line 83 def event_summary(trim_at = 100) summary = @event['check']['notification'] || @event['check']['description'] if summary.nil? source = @event['check']['source'] || @event['client']['name'] event_context = [source, @event['check']['name']].join('/') output = @event['check']['output'].chomp output = output.length > trim_at ? output[0..trim_at] + '...' : output summary = [event_context, output].join(' : ') end summary end |
#filter ⇒ Object
Filters exit the proccess if the event should not be handled.
Filtering events is deprecated and will be removed in a future release.
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sensu-handler.rb', line 30 def filter return unless deprecated_filtering_enabled? puts 'warning: event filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin' filter_disabled filter_silenced filter_dependencies return unless deprecated_occurrence_filtering_enabled? puts 'warning: occurrence filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin' filter_repeated end |
#filter_dependencies ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/sensu-handler.rb', line 158 def filter_dependencies return unless @event['check'].key?('dependencies') return unless @event['check']['dependencies'].is_a?(Array) @event['check']['dependencies'].each do |dependency| begin next if dependency.to_s.empty? Timeout.timeout(2) do check, client = dependency.split('/').reverse if event_exists?(client || @event['client']['name'], check) bail 'check dependency event exists' end end rescue Errno::ECONNREFUSED puts 'connection refused attempting to query the sensu api for an event' rescue Timeout::Error puts 'timed out while attempting to query the sensu api for an event' end end end |
#filter_disabled ⇒ Object
102 103 104 |
# File 'lib/sensu-handler.rb', line 102 def filter_disabled bail 'alert disabled' if @event['check']['alert'] == false end |
#filter_repeated ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/sensu-handler.rb', line 106 def filter_repeated defaults = { 'occurrences' => 1, 'interval' => 30, 'refresh' => 1800 } if settings['sensu_plugin'].is_a?(Hash) defaults.merge!(settings['sensu_plugin']) end occurrences = (@event['check']['occurrences'] || defaults['occurrences']).to_i interval = (@event['check']['interval'] || defaults['interval']).to_i refresh = (@event['check']['refresh'] || defaults['refresh']).to_i if @event['occurrences'] < occurrences bail 'not enough occurrences' end return unless @event['occurrences'] > occurrences && @event['action'] == 'create' number = refresh.fdiv(interval).to_i return if number.zero? || ((@event['occurrences'] - occurrences) % number).zero? bail 'only handling every ' + number.to_s + ' occurrences' end |
#filter_silenced ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/sensu-handler.rb', line 133 def filter_silenced stashes = [ ['client', '/silence/' + @event['client']['name']], ['check', '/silence/' + @event['client']['name'] + '/' + @event['check']['name']], ['check', '/silence/all/' + @event['check']['name']] ] stashes.each do |(scope, path)| begin Timeout.timeout(5) do if stash_exists?(path) bail scope + ' alerts silenced' end end rescue Errno::ECONNREFUSED puts 'connection refused attempting to query the sensu api for a stash' rescue Timeout::Error puts 'timed out while attempting to query the sensu api for a stash' end end end |
#handle ⇒ Object
Implementing classes should override this.
22 23 24 |
# File 'lib/sensu-handler.rb', line 22 def handle puts 'ignoring event -- no handler defined' end |
#stash_exists?(path) ⇒ Boolean
129 130 131 |
# File 'lib/sensu-handler.rb', line 129 def stash_exists?(path) api_request(:GET, '/stash' + path).code == '200' end |