Class: IP2ProxyCache

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

Constant Summary collapse

ONE_DAY_IN_SECONDS =
86_400

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.cacheObject (readonly)

Returns the value of attribute cache.



126
127
128
# File 'lib/logstash/filters/ip2proxy.rb', line 126

def cache
  @cache
end

.times_queriedObject (readonly)

Returns the value of attribute times_queried.



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

def times_queried
  @times_queried
end

.timestampsObject (readonly)

Returns the value of attribute timestamps.



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

def timestamps
  @timestamps
end

Class Method Details

.cache_event(event, ip, filter) ⇒ Object Also known as: refresh_event



159
160
161
162
163
# File 'lib/logstash/filters/ip2proxy.rb', line 159

def cache_event(event, ip, filter)
  filter.handleEvent(event)
  cache[ip] = event
  timestamps[ip] = Time.now
end

.cache_full?(cache_size) ⇒ Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/logstash/filters/ip2proxy.rb', line 155

def cache_full?(cache_size)
  cache.size >= cache_size
end

.find(event, ip, filter, cache_size) ⇒ Object



130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/logstash/filters/ip2proxy.rb', line 130

def find(event, ip, filter, cache_size)
  synchronize do
    if cache.has_key?(ip)
      refresh_event(event, ip, filter) if too_old?(ip)
    else
      if cache_full?(cache_size)
        make_room
      end
      cache_event(event, ip, filter)
    end
    times_queried.increment(ip)
    cache[ip]
  end
end

.make_roomObject



149
150
151
152
153
# File 'lib/logstash/filters/ip2proxy.rb', line 149

def make_room
  key = times_queried.delete_least_used
  cache.delete(key)
  timestamps.delete(key)
end

.synchronize(&block) ⇒ Object



165
166
167
# File 'lib/logstash/filters/ip2proxy.rb', line 165

def synchronize(&block)
  @mutex.synchronize(&block)
end

.too_old?(ip) ⇒ Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/logstash/filters/ip2proxy.rb', line 145

def too_old?(ip)
  timestamps[ip] < Time.now - ONE_DAY_IN_SECONDS
end