class Services::Logger::Redis
Constants
- EmptyResponseFromRedisMultiError
- InvalidMetaError
- META_CLASSES
Public Class Methods
new(redis, key = 'logs')
click to toggle source
# File lib/services/logger/redis.rb, line 16 def initialize(redis, key = 'logs') @redis, @key = redis, key end
Public Instance Methods
clear()
click to toggle source
# File lib/services/logger/redis.rb, line 41 def clear response = 3.tries on: EmptyResponseFromRedisMultiError do @redis.multi do @redis.lrange @key, 0, -1 @redis.del @key end or raise EmptyResponseFromRedisMultiError end response.first.map(&method(:log_entry_from_json)) end
fetch()
click to toggle source
# File lib/services/logger/redis.rb, line 37 def fetch @redis.lrange(@key, 0, -1).map(&method(:log_entry_from_json)) end
log(message, meta = {}, severity = 'info')
click to toggle source
# File lib/services/logger/redis.rb, line 20 def log(message, meta = {}, severity = 'info') # Allow only simple data types in meta raise InvalidMetaError, "Meta keys and values must be of one of the following classes: #{META_CLASSES.join(', ')}" if meta_includes_invalid_values?(meta) value = { time: Time.now.to_i, message: message.to_s, severity: severity.to_s, meta: meta } @redis.lpush @key, value.to_json end
size()
click to toggle source
# File lib/services/logger/redis.rb, line 33 def size @redis.llen @key end
Private Instance Methods
log_entry_from_json(json)
click to toggle source
# File lib/services/logger/redis.rb, line 53 def log_entry_from_json(json) data = JSON.load(json) data['time'] = Time.at(data['time']) data end
meta_includes_invalid_values?(meta)
click to toggle source
# File lib/services/logger/redis.rb, line 59 def meta_includes_invalid_values?(meta) [meta.values, meta.keys].any? do |elements| elements.any? do |element| META_CLASSES.none? do |klass| element.class <= klass end end end end