diff options
Diffstat (limited to 'spec/lib/gitlab/metrics')
3 files changed, 130 insertions, 2 deletions
diff --git a/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb b/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb index 153cf43be0a..0516091a8ec 100644 --- a/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb +++ b/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe Gitlab::Metrics::Subscribers::ActionCable, :request_store do let(:subscriber) { described_class.new } let(:counter) { double(:counter) } - let(:data) { { data: { event: 'updated' } } } + let(:data) { { 'result' => { 'data' => { 'event' => 'updated' } } } } let(:channel_class) { 'IssuesChannel' } let(:event) do double( @@ -35,6 +35,17 @@ RSpec.describe Gitlab::Metrics::Subscribers::ActionCable, :request_store do subscriber.transmit(event) end + + it 'tracks size of payload as JSON' do + allow(::Gitlab::Metrics).to receive(:histogram).with( + :action_cable_transmitted_bytes, /transmit/ + ).and_return(counter) + message_size = ::ActiveSupport::JSON.encode(data).bytesize + + expect(counter).to receive(:observe).with({ channel: channel_class, operation: 'event' }, message_size) + + subscriber.transmit(event) + end end describe '#broadcast' do diff --git a/spec/lib/gitlab/metrics/subscribers/active_record_spec.rb b/spec/lib/gitlab/metrics/subscribers/active_record_spec.rb index cffa62c3a52..6fc8f090431 100644 --- a/spec/lib/gitlab/metrics/subscribers/active_record_spec.rb +++ b/spec/lib/gitlab/metrics/subscribers/active_record_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Gitlab::Metrics::Subscribers::ActiveRecord do let(:env) { {} } let(:subscriber) { described_class.new } - let(:connection) { double(:connection) } + let(:connection) { ActiveRecord::Base.connection } describe '#transaction' do let(:web_transaction) { double('Gitlab::Metrics::WebTransaction') } @@ -183,6 +183,8 @@ RSpec.describe Gitlab::Metrics::Subscribers::ActiveRecord do 'SQL' | 'UPDATE users SET admin = true WHERE id = 10' | true | true | false | false 'SQL' | 'SELECT pg_current_wal_insert_lsn()::text AS location' | true | false | false | true 'SQL' | 'SELECT pg_last_wal_replay_lsn()::text AS location' | true | false | false | true + 'CACHE' | 'SELECT pg_current_wal_insert_lsn()::text AS location' | true | false | true | true + 'CACHE' | 'SELECT pg_last_wal_replay_lsn()::text AS location' | true | false | true | true 'CACHE' | 'SELECT * FROM users WHERE id = 10' | true | false | true | false 'SCHEMA' | "SELECT attr.attname FROM pg_attribute attr INNER JOIN pg_constraint cons ON attr.attrelid = cons.conrelid AND attr.attnum = any(cons.conkey) WHERE cons.contype = 'p' AND cons.conrelid = '\"projects\"'::regclass" | false | false | false | false nil | 'BEGIN' | false | false | false | false diff --git a/spec/lib/gitlab/metrics/subscribers/load_balancing_spec.rb b/spec/lib/gitlab/metrics/subscribers/load_balancing_spec.rb new file mode 100644 index 00000000000..21a6573c6fd --- /dev/null +++ b/spec/lib/gitlab/metrics/subscribers/load_balancing_spec.rb @@ -0,0 +1,115 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Metrics::Subscribers::LoadBalancing, :request_store do + let(:subscriber) { described_class.new } + + before do + allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(true) + end + + describe '#caught_up_replica_pick' do + shared_examples 'having payload result value' do |result, counter_name| + subject { subscriber.caught_up_replica_pick(event) } + + let(:payload) { { result: result } } + + let(:event) do + double( + :event, + name: 'load_balancing.caught_up_replica_pick', + payload: payload + ) + end + + it 'stores per-request caught up replica search result' do + subject + + expect(Gitlab::SafeRequestStore[counter_name]).to eq(1) + end + end + + it_behaves_like 'having payload result value', true, :caught_up_replica_pick_ok + it_behaves_like 'having payload result value', false, :caught_up_replica_pick_fail + end + + describe "#web_transaction_completed" do + subject { subscriber.web_transaction_completed(event) } + + let(:event) do + double( + :event, + name: 'load_balancing.web_transaction_completed', + payload: {} + ) + end + + let(:web_transaction) { double('Gitlab::Metrics::WebTransaction') } + + before do + allow(::Gitlab::Metrics::WebTransaction).to receive(:current) + .and_return(web_transaction) + end + + context 'when no data in request store' do + before do + Gitlab::SafeRequestStore[:caught_up_replica_pick] = nil + end + + it 'does not change the counters' do + expect(web_transaction).not_to receive(:increment) + end + end + + context 'when request store was updated' do + before do + Gitlab::SafeRequestStore[:caught_up_replica_pick_ok] = 2 + Gitlab::SafeRequestStore[:caught_up_replica_pick_fail] = 1 + end + + it 'increments :caught_up_replica_pick count with proper label' do + expect(web_transaction).to receive(:increment).with(:gitlab_transaction_caught_up_replica_pick_count_total, 2, { result: true }) + expect(web_transaction).to receive(:increment).with(:gitlab_transaction_caught_up_replica_pick_count_total, 1, { result: false }) + + subject + end + end + end + + describe '.load_balancing_payload' do + subject { described_class.load_balancing_payload } + + context 'when no data in request store' do + before do + Gitlab::SafeRequestStore[:caught_up_replica_pick_ok] = nil + Gitlab::SafeRequestStore[:caught_up_replica_pick_fail] = nil + end + + it 'returns empty hash' do + expect(subject).to eq({}) + end + end + + context 'when request store was updated for a single counter' do + before do + Gitlab::SafeRequestStore[:caught_up_replica_pick_ok] = 2 + end + + it 'returns proper payload with only that counter' do + expect(subject).to eq({ caught_up_replica_pick_ok: 2 }) + end + end + + context 'when both counters were updated' do + before do + Gitlab::SafeRequestStore[:caught_up_replica_pick_ok] = 2 + Gitlab::SafeRequestStore[:caught_up_replica_pick_fail] = 1 + end + + it 'return proper payload' do + expect(subject).to eq({ caught_up_replica_pick_ok: 2, caught_up_replica_pick_fail: 1 }) + end + end + end +end |