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'

Class Method Summary collapse

Class Method Details

.current_idObject



27
28
29
# File 'lib/global_error_handler/redis.rb', line 27

def current_id
  redis.get(CURRENT_ID_KEY)
end

.delete(key) ⇒ Object



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

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

.delete_all(keys) ⇒ Object



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

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

.exception_key(id = current_id) ⇒ Object



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

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

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



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

def exception_keys(page = 0, per_page = 10)
  redis.lrange EXCEPTIONS_REDIS_KEY, page.to_i, per_page.to_i + page.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



35
36
37
# File 'lib/global_error_handler/redis.rb', line 35

def exceptions_count
  redis.llen EXCEPTIONS_REDIS_KEY
end

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



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

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

.filter_key(field, filter) ⇒ Object



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

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

.filter_keys_for(field) ⇒ Object



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

def filter_keys_for(field)
  redis.keys filter_key(field, '*')
end

.filtered_exceptions_count(field, filter) ⇒ Object



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

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

.find(key) ⇒ Object



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

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

.find_all(keys) ⇒ Object



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

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

.redisObject



17
18
19
20
21
22
23
24
25
# File 'lib/global_error_handler/redis.rb', line 17

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



8
9
10
11
12
13
14
15
# File 'lib/global_error_handler/redis.rb', line 8

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
  %w(error_class error_message).each do |field|
    redis.rpush filter_key(field, info_hash[field.to_sym]), redis_key
  end
end

.truncate!Object



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

def truncate!
  redis.flushdb
end