Welcome to mirror list, hosted at ThFree Co, Russian Federation.

redis.rb « instrumentation « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a664656c467bfff13ce03cf5cdb5469fc5d9867d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# frozen_string_literal: true

module Gitlab
  module Instrumentation
    # Aggregates Redis measurements from different request storage sources.
    class Redis
      # Actioncable has it's separate instrumentation, but isn't configurable
      # in the same way as all the other instances using a class.
      ActionCable = Class.new(RedisBase)

      STORAGES = (
        Gitlab::Redis::ALL_CLASSES.map do |redis_instance_class|
          instrumentation_class = Class.new(RedisBase)

          instrumentation_class.enable_redis_cluster_validation unless redis_instance_class == Gitlab::Redis::Queues

          const_set(redis_instance_class.store_name, instrumentation_class)
          instrumentation_class
        end << ActionCable
      ).freeze

      # Milliseconds represented in seconds (from 1 millisecond to 2 seconds).
      QUERY_TIME_BUCKETS = [0.001, 0.0025, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2].freeze

      class << self
        include ::Gitlab::Instrumentation::RedisPayload

        def storage_key
          nil
        end

        def payload
          super.merge(*STORAGES.flat_map(&:payload))
        end

        def detail_store
          STORAGES.flat_map do |storage|
            storage.detail_store.map { |details| details.merge(storage: storage.name.demodulize) }
          end
        end

        %i[get_request_count get_cross_slot_request_count get_allowed_cross_slot_request_count query_time read_bytes
           write_bytes].each do |method|
          define_method method do
            STORAGES.sum(&method)
          end
        end
      end
    end
  end
end