class LogStash::Outputs::Mongodb

Public Instance Methods

receive(event) click to toggle source
# File lib/logstash/outputs/mongodb.rb, line 51
def receive(event)
  return unless output?(event)

  begin
    if @isodate
      # the mongodb driver wants time values as a ruby Time object.
      # set the @timestamp value of the document to a ruby Time object, then.
      document = event.to_hash
    else
      document = event.to_hash.merge("@timestamp" => event["@timestamp"].to_json)
    end
    if @generateId
      document['_id'] = BSON::ObjectId.new(nil, event["@timestamp"])
    end
    @db.collection(event.sprintf(@collection)).insert(document)
  rescue => e
    @logger.warn("Failed to send event to MongoDB", :event => event, :exception => e,
                 :backtrace => e.backtrace)
    if e.error_code == 11000
        # On a duplicate key error, skip the insert.
        # We could check if the duplicate key err is the _id key
        # and generate a new primary key.
        # If the duplicate key error is on another field, we have no way
        # to fix the issue.
    else
      sleep @retry_delay
      retry
    end
  end
end
register() click to toggle source
# File lib/logstash/outputs/mongodb.rb, line 35
def register
  require "mongo"
  uriParsed=Mongo::URIParser.new(@uri)
  conn = uriParsed.connection({})
  if uriParsed.auths.length > 0
    uriParsed.auths.each do |auth|
      if !auth['db_name'].nil?
        conn.add_auth(auth['db_name'], auth['username'], auth['password'], nil)
      end 
    end
    conn.apply_saved_authentication()
  end
  @db = conn.db(@database)
end