Class: PseudoCleaner::RedisMonitorCleaner::RedisMessage

Inherits:
Object
  • Object
show all
Defined in:
lib/pseudo_cleaner/redis_monitor_cleaner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(message_string) ⇒ RedisMessage

Returns a new instance of RedisMessage.



176
177
178
179
180
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 176

def initialize(message_string)
  @message = message_string

  parse_message
end

Instance Attribute Details

#commandObject (readonly)

Returns the value of attribute command.



173
174
175
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 173

def command
  @command
end

#cur_posObject (readonly)

Returns the value of attribute cur_pos.



174
175
176
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 174

def cur_pos
  @cur_pos
end

#dbObject (readonly)

Returns the value of attribute db.



170
171
172
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 170

def db
  @db
end

#hostObject (readonly)

Returns the value of attribute host.



171
172
173
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 171

def host
  @host
end

#messageObject (readonly)

Returns the value of attribute message.



168
169
170
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 168

def message
  @message
end

#portObject (readonly)

Returns the value of attribute port.



172
173
174
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 172

def port
  @port
end

#time_stampObject (readonly)

Returns the value of attribute time_stamp.



169
170
171
# File 'lib/pseudo_cleaner/redis_monitor_cleaner.rb', line 169

def time_stamp
  @time_stamp
end

Instance Method Details

#keysObject



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# 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_valueObject



206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# 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_messageObject



182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# 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_sObject



302
303
304
305
306
307
308
309
310
311
312
# 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