Skip to content

Instantly share code, notes, and snippets.

@busseyl
Last active March 24, 2018 23:02
Show Gist options
  • Save busseyl/2b476b356f4868e1686aece5b6058c17 to your computer and use it in GitHub Desktop.
Save busseyl/2b476b356f4868e1686aece5b6058c17 to your computer and use it in GitHub Desktop.
Sensu extension bridge
#!/usr/bin/env ruby
# coding: utf-8
# Send state events of all severity to RabbitMQ (Transport)
#
# This extension requires Sensu >= 1.2.0
#
# Here is an example of what the Sensu configuration should look like:
#
# {
# "state_events": {
# "exchange": "state_events"
# }
# }
#
# Copyright 2018 Team Of Monkeys Inc
# (Based on https://gist.github.com/Buzer/262da357c24907a1d05d#file-gistfile1-txt-L67)
#
# Released under the same terms as Sensu (the MIT license); see LICENSE for details.
require "sensu/json"
require "sensu/extension"
require "sensu/transport"
module Sensu
module Extension
class StateEvents < Bridge
def name
'state_events'
end
def description
'sends all sensu events to the configured transport'
end
def post_init
transport_name = @settings[:transport][:name]
transport_settings = @settings[transport_name]
@logger.debug("connecting to state events transport", {
:name => transport_name,
:settings => transport_settings
})
Transport.logger = @logger
Transport.connect(transport_name, transport_settings) do |connection|
@transport = connection
@transport.on_error do |error|
@logger.error("state events transport connection error", :error => error.to_s)
if @settings[:transport][:reconnect_on_error]
@transport.reconnect
end
end
@transport.before_reconnect do
@logger.warn("reconnecting to state events transport")
end
@transport.after_reconnect do
@logger.info("reconnected to state events transport")
end
end
end
def run(event)
event_json = Sensu::JSON.dump(event)
@logger.info("publishing state event", {
:payload => event_json
})
@transport.publish(:direct, 'state_events', event_json) do |info|
if info[:error]
@logger.error("failed to publish state event", {
:payload => event_json,
:error => info[:error].to_s
})
end
end
yield ["state event published to default transport", 0]
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment