diff options
Diffstat (limited to 'lib/peek/views/redis.rb')
-rw-r--r-- | lib/peek/views/redis.rb | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/lib/peek/views/redis.rb b/lib/peek/views/redis.rb deleted file mode 100644 index 73de8672fa4..00000000000 --- a/lib/peek/views/redis.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true - -require 'redis' -require 'peek-redis' - -module Gitlab - module Peek - module RedisInstrumented - def call(*args, &block) - start = Time.now - super(*args, &block) - ensure - duration = (Time.now - start) - add_call_details(duration, args) - end - - private - - def add_call_details(duration, args) - # redis-rb passes an array (e.g. [:get, key]) - return unless args.length == 1 - - detail_store << { - cmd: args.first, - duration: duration, - backtrace: Gitlab::Profiler.clean_backtrace(caller) - } - end - - def detail_store - ::Gitlab::SafeRequestStore['redis_call_details'] ||= [] - end - end - end -end - -module Peek - module Views - module RedisDetailed - REDACTED_MARKER = "<redacted>" - - def results - super.merge(details: details) - end - - def details - detail_store - .sort { |a, b| b[:duration] <=> a[:duration] } - .map(&method(:format_call_details)) - end - - def detail_store - ::Gitlab::SafeRequestStore['redis_call_details'] ||= [] - end - - def format_call_details(call) - call.merge(cmd: format_command(call[:cmd]), - duration: (call[:duration] * 1000).round(3)) - end - - def format_command(cmd) - if cmd.length >= 2 && cmd.first =~ /^auth$/i - cmd[-1] = REDACTED_MARKER - # Scrub out the value of the SET calls to avoid binary - # data or large data from spilling into the view - elsif cmd.length >= 3 && cmd.first =~ /set/i - cmd[2..-1] = REDACTED_MARKER - end - - cmd.join(' ') - end - end - end -end - -class Redis::Client - prepend Gitlab::Peek::RedisInstrumented -end - -module Peek - module Views - class Redis < View - prepend Peek::Views::RedisDetailed - end - end -end |