Class: Services::Logger::Redis

Inherits:
Object
  • Object
show all
Defined in:
lib/services/logger/redis.rb

Constant Summary collapse

META_CLASSES =
[
  NilClass,
  TrueClass,
  FalseClass,
  Symbol,
  String,
  Numeric
].freeze
InvalidMetaError =
Class.new(StandardError)
EmptyResponseFromRedisMultiError =
Class.new(StandardError)

Instance Method Summary collapse

Constructor Details

#initialize(redis, key = 'logs') ⇒ Redis

Returns a new instance of Redis.



16
17
18
# File 'lib/services/logger/redis.rb', line 16

def initialize(redis, key = 'logs')
  @redis, @key = redis, key
end

Instance Method Details

#clearObject



41
42
43
44
45
46
47
48
49
# 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

#fetchObject



37
38
39
# 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') ⇒ Object

Raises:



20
21
22
23
24
25
26
27
28
29
30
31
# 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

#sizeObject



33
34
35
# File 'lib/services/logger/redis.rb', line 33

def size
  @redis.llen @key
end