diff options
author | Sean McGivern <sean@gitlab.com> | 2019-07-09 19:27:05 +0300 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2019-07-09 19:27:05 +0300 |
commit | 6d3fede0af1de2106ec5779e33f0571f3e4261d2 (patch) | |
tree | acbc9ed35f044d57f1c67e172531c0baa0de3afe | |
parent | 10576b2b3b00425e2f2f04049b3243848f4dca83 (diff) | |
parent | 3084c37f3e1e5c1260fbc4a00082300ec0a7b0bd (diff) |
Merge branch 'sh-redact-redis-perf-bar' into 'master'
Perform more redactions in Redis performance bar traces
Closes #64309
See merge request gitlab-org/gitlab-ce!30514
-rw-r--r-- | lib/peek/views/redis.rb | 8 | ||||
-rw-r--r-- | spec/lib/peek/views/redis_detailed_spec.rb | 36 |
2 files changed, 42 insertions, 2 deletions
diff --git a/lib/peek/views/redis.rb b/lib/peek/views/redis.rb index ad3c3c9fe01..73de8672fa4 100644 --- a/lib/peek/views/redis.rb +++ b/lib/peek/views/redis.rb @@ -37,6 +37,8 @@ end module Peek module Views module RedisDetailed + REDACTED_MARKER = "<redacted>" + def results super.merge(details: details) end @@ -57,10 +59,12 @@ module Peek 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 - if cmd.length >= 2 && cmd.first =~ /set/i - cmd[-1] = "<redacted>" + elsif cmd.length >= 3 && cmd.first =~ /set/i + cmd[2..-1] = REDACTED_MARKER end cmd.join(' ') diff --git a/spec/lib/peek/views/redis_detailed_spec.rb b/spec/lib/peek/views/redis_detailed_spec.rb new file mode 100644 index 00000000000..da13b6df53b --- /dev/null +++ b/spec/lib/peek/views/redis_detailed_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Peek::Views::RedisDetailed do + let(:redis_detailed_class) do + Class.new do + include Peek::Views::RedisDetailed + end + end + + subject { redis_detailed_class.new } + + using RSpec::Parameterized::TableSyntax + + where(:cmd, :expected) do + [:auth, 'test'] | 'auth <redacted>' + [:set, 'key', 'value'] | 'set key <redacted>' + [:set, 'bad'] | 'set bad' + [:hmset, 'key1', 'value1', 'key2', 'value2'] | 'hmset key1 <redacted>' + [:get, 'key'] | 'get key' + end + + with_them do + it 'scrubs Redis commands', :request_store do + subject.detail_store << { cmd: cmd, duration: 1.second } + + expect(subject.details.count).to eq(1) + expect(subject.details.first) + .to eq({ + cmd: expected, + duration: 1000 + }) + end + end +end |