# Output to Couchbase
# :hostname => "localhost" # :port => 8091
# :password => "secret"     # :username => 'protected'
# :bucket => "default" # :pool => "default"
# :timeout => 3_000_000
#



require "logstash/outputs/base"
require "logstash/namespace"

class LogStash::Outputs::Couchbase < LogStash::Outputs::Base

  config_name "couchbase"
  milestone 1

  config :hostname, :validate => :string, :required => true
  config :port, :validate => :integer, :required => true
  config :pool, :validate => :string, :required => true
  config :bucket, :validate => :string, :required => true
  config :username, :validate => :string, :required => true
  config :password, :validate => :string, :required => true  
  config :isodate, :validate => :boolean, :default => false
  config :ttl, :validate => :number, :default => 3000, :required => false

  public
  def register
    require 'couchbase'
  require 'msgpack'
	require 'json'
	require 'active_support/core_ext/hash'

	# Connection
	Couchbase.connection_options = {:async => true}
	conn_couchbase = Couchbase.connect(:hostname => hostname,
                        :port => port,
                        :pool => pool,
                        :username => username,
                        :password => password,						
                        :bucket => bucket)

  end # def register
  

  public
  def receive(event)
    return unless output?(event)

    begin
      if @isodate
        document = event.to_hash
      else
        document = event.to_hash.merge("@timestamp" => event["@timestamp"].to_json)
      end
	
	#Insert
	  
	  
    rescue => e
      @logger.warn("Failed to send event to Couchbase", :event => event, :exception => e,
                   :backtrace => e.backtrace)
      end
  end # def receive
end # class LogStash::Outputs::Couchbase