Class: Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/logstash/filters/ip2location.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.



129
130
131
# File 'lib/logstash/filters/ip2location.rb', line 129

def cache
  @cache
end

.times_queriedObject (readonly)

Returns the value of attribute times_queried.



131
132
133
# File 'lib/logstash/filters/ip2location.rb', line 131

def times_queried
  @times_queried
end

.timestampsObject (readonly)

Returns the value of attribute timestamps.



130
131
132
# File 'lib/logstash/filters/ip2location.rb', line 130

def timestamps
  @timestamps
end

Class Method Details

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



163
164
165
166
167
# File 'lib/logstash/filters/ip2location.rb', line 163

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

.cache_full?(cache_size) ⇒ Boolean

Returns:

  • (Boolean)


159
160
161
# File 'lib/logstash/filters/ip2location.rb', line 159

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

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



134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/logstash/filters/ip2location.rb', line 134

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



153
154
155
156
157
# File 'lib/logstash/filters/ip2location.rb', line 153

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

.synchronize(&block) ⇒ Object



169
170
171
# File 'lib/logstash/filters/ip2location.rb', line 169

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

.too_old?(ip) ⇒ Boolean

Returns:

  • (Boolean)


149
150
151
# File 'lib/logstash/filters/ip2location.rb', line 149

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