class PseudoCleaner::RedisMonitorCleaner::RedisMessage

Attributes

command[R]
cur_pos[R]
db[R]
host[R]
message[R]
port[R]
time_stamp[R]

Public Class Methods

new(message_string) click to toggle source
# File lib/pseudo_cleaner/redis_monitor_cleaner.rb, line 176
def initialize(message_string)
  @message = message_string

  parse_message
end

Public Instance Methods

keys() click to toggle source
# File lib/pseudo_cleaner/redis_monitor_cleaner.rb, line 236
def keys
  unless defined?(@message_keys)
    @message_keys = []

    if Redis::Namespace::COMMANDS.include? command
      handling = Redis::Namespace::COMMANDS[command.to_s.downcase]

      (before, after) = handling

      case before
        when :first
          @message_keys << next_value

        when :all
          while @cur_pos < @message.length
            @message_keys << next_value
          end

        when :exclude_first
          next_value
          while @cur_pos < @message.length
            @message_keys << next_value
          end

        when :exclude_last
          while @cur_pos < @message.length
            @message_keys << next_value
          end
          @message_keys.delete_at(@message_keys.length - 1)

        when :exclude_options
          options = ["weights", "aggregate", "sum", "min", "max"]
          while @cur_pos < @message.length
            @message_keys << next_value
            if options.include?(@message_keys[-1].downcase)
              @message_keys.delete_at(@message_keys.length - 1)
              break
            end
          end

        when :alternate
          while @cur_pos < @message.length
            @message_keys << next_value
            next_value
          end

        when :sort
          next_value

          while @cur_pos < @message.length
            a_value = next_value
            if a_value.downcase == "store"
              @message_keys[0] = next_value
            end
          end

        # when :eval_style
        #
        # when :scan_style
      end
    end
  end

  @message_keys
end
next_value() click to toggle source
# File lib/pseudo_cleaner/redis_monitor_cleaner.rb, line 206
def next_value
  in_quote = (@message[@cur_pos] == '"')
  if in_quote
    @cur_pos += 1
    end_pos  = @cur_pos
    while (end_pos && end_pos < @message.length)
      end_pos = @message.index("\"", end_pos)

      num_backslashes = 0
      back_pos        = end_pos

      while @message[back_pos - 1] == "\\"
        num_backslashes += 1
        back_pos        -= 1
      end

      break if (num_backslashes % 2) == 0
      end_pos += 1
    end
  else
    end_pos = @message.index(" ", @cur_pos)
  end
  the_value = @message[@cur_pos..end_pos - 1]
  end_pos   += 1 if in_quote

  @cur_pos = end_pos + 1

  the_value.gsub("\\\\", "\\").gsub("\\\"", "\"")
end
parse_message() click to toggle source
# File lib/pseudo_cleaner/redis_monitor_cleaner.rb, line 182
def parse_message
  if @message =~ /[0-9]+\.[0-9]+ \[[0-9]+ [^:]+:[^\]]+\] \"[^\"]+\"/
    end_pos     = @message.index(" ")
    @time_stamp = @message[0..end_pos - 1]

    @cur_pos = end_pos + 2 # " ["
    end_pos  = @message.index(" ", @cur_pos)
    @db      = @message[@cur_pos..end_pos - 1].to_i

    @cur_pos = end_pos + 1
    end_pos  = @message.index(":", @cur_pos)
    @host    = @message[@cur_pos..end_pos - 1]

    @cur_pos = end_pos + 1
    end_pos  = @message.index("]", @cur_pos)
    @port    = @message[@cur_pos..end_pos - 1].to_i

    @cur_pos = end_pos + 2 # "] "
    @command = next_value.downcase
  else
    @command = @message
  end
end
to_s() click to toggle source
# File lib/pseudo_cleaner/redis_monitor_cleaner.rb, line 302
def to_s
  {
      time_stamp: time_stamp,
      db:         db,
      host:       host,
      port:       port,
      command:    command,
      message:    message,
      cur_pos:    cur_pos
  }.to_s
end