Class: IP2ProxyOrderedHash

Inherits:
Object
  • Object
show all
Defined in:
lib/logstash/filters/ip2proxy.rb

Overview

class LogStash::Filters::IP2Proxy

Constant Summary collapse

ONE =
1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeIP2ProxyOrderedHash

Returns a new instance of IP2ProxyOrderedHash.



101
102
103
104
# File 'lib/logstash/filters/ip2proxy.rb', line 101

def initialize
  @times_queried = Hash.new(0) # ip -> times queried
  @hash = {} # number of hits -> array of ips
end

Instance Attribute Details

#hashObject (readonly)

Returns the value of attribute hash.



99
100
101
# File 'lib/logstash/filters/ip2proxy.rb', line 99

def hash
  @hash
end

#times_queriedObject (readonly)

ip -> times queried



98
99
100
# File 'lib/logstash/filters/ip2proxy.rb', line 98

def times_queried
  @times_queried
end

Instance Method Details

#add(key) ⇒ Object



106
107
108
109
110
# File 'lib/logstash/filters/ip2proxy.rb', line 106

def add(key)
  hash[ONE] ||= []
  hash[ONE] << key
  times_queried[key] = ONE
end

#delete_least_usedObject



128
129
130
# File 'lib/logstash/filters/ip2proxy.rb', line 128

def delete_least_used
  first_pile_with_something.shift.tap { |key| times_queried.delete(key) }
end

#first_pile_with_somethingObject



132
133
134
# File 'lib/logstash/filters/ip2proxy.rb', line 132

def first_pile_with_something
  hash[hash.keys.min]
end

#increment(key) ⇒ Object



122
123
124
125
126
# File 'lib/logstash/filters/ip2proxy.rb', line 122

def increment(key)
  add(key) unless times_queried.has_key?(key)
  reorder(key)
  times_queried[key] += 1
end

#reorder(key) ⇒ Object



112
113
114
115
116
117
118
119
120
# File 'lib/logstash/filters/ip2proxy.rb', line 112

def reorder(key)
  number_of_queries = times_queried[key]

  hash[number_of_queries].delete(key)
  hash.delete(number_of_queries) if hash[number_of_queries].empty?

  hash[number_of_queries + 1] ||= []
  hash[number_of_queries + 1] << key
end