Add top-level warnings key to performance bar response

This key is useful to reduce the amount of logic needed on the frontend:
if `has_warnings` is true, then the frontend knows that the request in
question has warnings for some metric.
This commit is contained in:
Sean McGivern 2019-08-23 13:05:38 +01:00
parent 23c1cfcc11
commit 9bfb012a56
3 changed files with 49 additions and 0 deletions

View File

@ -1,6 +1,7 @@
require 'peek/adapters/redis'
Peek::Adapters::Redis.prepend ::Gitlab::PerformanceBar::RedisAdapterWhenPeekEnabled
Peek.singleton_class.prepend ::Gitlab::PerformanceBar::WithTopLevelWarnings
Rails.application.config.peek.adapter = :redis, { client: ::Redis.new(Gitlab::Redis::Cache.params) }

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
module Gitlab
module PerformanceBar
module WithTopLevelWarnings
def results
results = super
results.merge(has_warnings: has_warnings?(results))
end
def has_warnings?(results)
results[:data].any? do |_, value|
value[:warnings].present?
end
end
end
end
end

View File

@ -0,0 +1,29 @@
# frozen_string_literal: true
require 'fast_spec_helper'
require 'rspec-parameterized'
describe Gitlab::PerformanceBar::WithTopLevelWarnings do
using RSpec::Parameterized::TableSyntax
subject { Module.new }
before do
subject.singleton_class.prepend(described_class)
end
describe '#has_warnings?' do
where(:has_warnings, :results) do
false | { data: {} }
false | { data: { gitaly: { warnings: [] } } }
true | { data: { gitaly: { warnings: [1] } } }
true | { data: { gitaly: { warnings: [] }, redis: { warnings: [1] } } }
end
with_them do
it do
expect(subject.has_warnings?(results)).to eq(has_warnings)
end
end
end
end