mirror of
https://github.com/elastic/logstash.git
synced 2025-04-23 22:27:21 -04:00
Added HipChat output.
This commit is contained in:
parent
78023ba2c3
commit
5b9da1ac70
1 changed files with 79 additions and 0 deletions
79
lib/logstash/outputs/hipchat.rb
Normal file
79
lib/logstash/outputs/hipchat.rb
Normal file
|
@ -0,0 +1,79 @@
|
|||
require "logstash/namespace"
|
||||
require "logstash/outputs/http"
|
||||
|
||||
# This output allows you to write events to [HipChat](https://www.hipchat.com/).
|
||||
#
|
||||
class LogStash::Outputs::HipChat < LogStash::Outputs::Base
|
||||
|
||||
config_name "hipchat"
|
||||
plugin_status "experimental"
|
||||
|
||||
# The HipChat authentication token.
|
||||
config :token, :validate => :string, :required => true
|
||||
|
||||
# The ID or name of the room.
|
||||
config :room_id, :validate => :string, :required => true
|
||||
|
||||
# The name the message will appear be sent from.
|
||||
config :from, :validate => :string, :default => "logstash"
|
||||
|
||||
# Whether or not this message should trigger a notification for people in the room.
|
||||
config :notify, :validate => :boolean, :default => false
|
||||
|
||||
# Background color for message.
|
||||
# HipChat currently supports one of "yellow", "red", "green", "purple",
|
||||
# "gray", or "random". (default: yellow)
|
||||
config :color, :validate => :string, :default => "yellow"
|
||||
|
||||
# Message format to send, event tokens are usable here.
|
||||
config :format, :validate => :string, :default => "%{@message}"
|
||||
|
||||
public
|
||||
def register
|
||||
require "ftw"
|
||||
require "uri"
|
||||
|
||||
@agent = FTW::Agent.new
|
||||
|
||||
@url = "https://api.hipchat.com/v1/rooms/message?auth_token=" + @token
|
||||
@content_type = "application/x-www-form-urlencoded"
|
||||
end # def register
|
||||
|
||||
public
|
||||
def receive(event)
|
||||
return unless output?(event)
|
||||
|
||||
hipchat_data = Hash.new
|
||||
hipchat_data['room_id'] = @room_id
|
||||
hipchat_data['from'] = @from
|
||||
hipchat_data['color'] = @color
|
||||
hipchat_data['notify'] = @notify ? "1" : "0"
|
||||
hipchat_data['message'] = event.sprintf(@format)
|
||||
|
||||
@logger.debug("HipChat data", :hipchat_data => hipchat_data)
|
||||
|
||||
begin
|
||||
request = @agent.post(@url)
|
||||
request["Content-Type"] = @content_type
|
||||
request.body = encode(hipchat_data)
|
||||
|
||||
response = @agent.execute(request)
|
||||
|
||||
# Consume body to let this connection be reused
|
||||
rbody = ""
|
||||
response.read_body { |c| rbody << c }
|
||||
#puts rbody
|
||||
rescue Exception => e
|
||||
@logger.warn("Unhandled exception", :request => request, :response => response, :exception => e, :stacktrace => e.backtrace)
|
||||
end
|
||||
end # def receive
|
||||
|
||||
# shamelessly lifted this from the LogStash::Outputs::Http, I'd rather put this
|
||||
# in a common place for both to use, but unsure where that place is or should be
|
||||
def encode(hash)
|
||||
return hash.collect do |key, value|
|
||||
CGI.escape(key) + "=" + CGI.escape(value)
|
||||
end.join("&")
|
||||
end # def encode
|
||||
|
||||
end # class LogStash::Outputs::HipChat
|
Loading…
Add table
Add a link
Reference in a new issue