class LogStash::Outputs::Redis

An redis output that does nothing.

Public Instance Methods

identity() click to toggle source

A string used to identify a Redis instance in log messages

# File lib/logstash/outputs/redis_set.rb, line 105
def identity
  "redis://#{@password}@#{@host}:#{@port}/#{@db} #{@action} #{@key}"
end
receive(event) click to toggle source
# File lib/logstash/outputs/redis_set.rb, line 52
def receive(event)
  begin
    key = event.sprintf(@key)
    @redis ||= connect
    case @action
    when "ZADD"
      member = event.sprintf(@member)
      if @score
        score = event.sprintf(@score)
      else
        score = (event.get("@timestamp").to_f * 1000).to_i
      end
      @redis.zadd(key, score, member)
    when "SET"
      value = event.sprintf(@value)
      @redis.set(key, value)
    when "SADD"
      member = event.sprintf(@member)
      @redis.sadd(key, member)
    when "HSET"
      field = event.sprintf(@field)
      value = event.sprintf(@value)
      @redis.hset(key, field, value)
    when "FTADD"
      redisearch_client = RediSearch.new(key, @redis)
      
      docFields = [];
      
      redisearch_client.info().each do | key, value |
        if value.class == Array
          if key == "fields"
            value.each do |item|
              docFields.push(item[0])
              docFields.push(event.get(item[0]))
            end
          end
        end
      end

      doc = [[event.sprintf(@docId), docFields]]
      redisearch_client.add_docs(doc, {replace: true})
    end
  rescue => e
    @logger.warn("Failed to set event to Redis", :event => event,
                 :identity => identity, :exception => e,
                 :backtrace => e.backtrace)
    sleep @reconnect_interval
    @redis = nil
    retry
  end
end
register() click to toggle source
# File lib/logstash/outputs/redis_set.rb, line 45
def register
  require 'redis'
  require 'redisearch-rb'
  @redis = nil
end

Private Instance Methods

connect() click to toggle source
# File lib/logstash/outputs/redis_set.rb, line 110
def connect
  params = {
    :host => @host,
    :port => @port,
    :timeout => @timeout,
    :db => @db,
  }
  @logger.debug("connection params", params)

  if @password
    params[:password] = @password.value
  end

  Redis.new(params)
end