Class: GlobalErrorHandler::Redis

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

Constant Summary collapse

CURRENT_ID_KEY =
'global_error_handler:current_id'
EXCEPTIONS_REDIS_KEY =
'global_error_handler:exceptions'
EXCEPTION_KEY_PREFIX =
'global_error_handler:exception'
FILTER_KEY_PREFIX =
'global_error_handler:filter'
FILTER_FIELDS =
%w(error_class error_message)
FILTER_MAX_CHARS =
60
REDIS_TTL =

4 weeks

4 * 7 * 24 * 60 * 60

Class Method Summary collapse

Class Method Details

.clear_filters(key) ⇒ Object



93
94
95
96
97
98
99
100
# File 'lib/global_error_handler/redis.rb', line 93

def clear_filters(key)
  FILTER_FIELDS.each do |field|
    field_value = build_filter_value(redis.hget key, field)
    filter_keys_for(field, field_value).each do |filter_key|
      redis.lrem filter_key, 1, key
    end
  end
end

.current_idObject



31
32
33
# File 'lib/global_error_handler/redis.rb', line 31

def current_id
  redis.get(CURRENT_ID_KEY)
end

.delete(key) ⇒ Object



67
68
69
70
# File 'lib/global_error_handler/redis.rb', line 67

def delete(key)
  delete_dependencies key
  redis.del key
end

.delete_all(keys) ⇒ Object



72
73
74
# File 'lib/global_error_handler/redis.rb', line 72

def delete_all(keys)
  keys.each { |key| delete(key) rescue next }
end

.delete_dependencies(key) ⇒ Object



88
89
90
91
# File 'lib/global_error_handler/redis.rb', line 88

def delete_dependencies(key)
  redis.lrem EXCEPTIONS_REDIS_KEY, 1, key
  clear_filters key
end

.exception_key(id = current_id) ⇒ Object



80
81
82
# File 'lib/global_error_handler/redis.rb', line 80

def exception_key(id = current_id)
  "#{EXCEPTION_KEY_PREFIX}:#{id}"
end

.exception_keys(start = 0, per_page = 10) ⇒ Object



47
48
49
# File 'lib/global_error_handler/redis.rb', line 47

def exception_keys(start = 0, per_page = 10)
  redis.lrange EXCEPTIONS_REDIS_KEY, start.to_i, per_page.to_i + start.to_i - 1
end

.exceptions_countObject

def sort(field, direction = ‘ASC’, page = 0, per_page = 1000)

redis.sort(EXCEPTIONS_REDIS_KEY, by: "#{EXCEPTION_KEY_PREFIX}_*->#{field}_*", order: "#{direction}", limit: [page, per_page])

end



39
40
41
# File 'lib/global_error_handler/redis.rb', line 39

def exceptions_count
  redis.llen EXCEPTIONS_REDIS_KEY
end

.filter_exception_keys(start = 0, field = nil, filter = nil, per_page = 10) ⇒ Object



51
52
53
# File 'lib/global_error_handler/redis.rb', line 51

def filter_exception_keys(start = 0, field = nil, filter = nil, per_page = 10)
  redis.lrange filter_key(field, filter), start.to_i, per_page.to_i + start.to_i - 1
end

.filter_key(field, filter) ⇒ Object



84
85
86
# File 'lib/global_error_handler/redis.rb', line 84

def filter_key(field, filter)
  "#{FILTER_KEY_PREFIX}:#{field}:#{filter}"
end

.filter_keys_for(field, filter = '') ⇒ Object



55
56
57
# File 'lib/global_error_handler/redis.rb', line 55

def filter_keys_for(field, filter = '')
  redis.keys filter_key(field, "#{filter}*")
end

.filtered_exceptions_count(field, filter) ⇒ Object



43
44
45
# File 'lib/global_error_handler/redis.rb', line 43

def filtered_exceptions_count(field, filter)
  redis.llen filter_key(field, filter)
end

.find(key) ⇒ Object



59
60
61
# File 'lib/global_error_handler/redis.rb', line 59

def find(key)
  Hashie::Mash.new redis.hgetall(key)
end

.find_all(keys) ⇒ Object



63
64
65
# File 'lib/global_error_handler/redis.rb', line 63

def find_all(keys)
  keys.map { |key| find(key) }.compact
end

.redisObject



21
22
23
24
25
26
27
28
29
# File 'lib/global_error_handler/redis.rb', line 21

def redis
  @redis ||= begin
               unless $redis_global_exception_handler.is_a? Redis
                 redis_config = YAML.load_file(File.join(Rails.root, 'config', 'redis.yml'))[Rails.env]
                 $redis_global_exception_handler = Redis.new(redis_config['global_exception_handler'])
               end
               $redis_global_exception_handler
             end
end

.store(info_hash) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/global_error_handler/redis.rb', line 11

def store(info_hash)
  redis_key = exception_key(next_id!)
  redis.hmset redis_key, info_hash.merge(id: current_id).to_a.flatten
  redis.rpush EXCEPTIONS_REDIS_KEY, redis_key
  FILTER_FIELDS.each do |field|
    redis.rpush filter_key(field, build_filter_value(info_hash[field.to_sym])), redis_key
  end
  redis.expire redis_key, REDIS_TTL
end

.truncate!Object



76
77
78
# File 'lib/global_error_handler/redis.rb', line 76

def truncate!
  redis.flushdb
end