summaryrefslogtreecommitdiff
path: root/app/workers/metrics_worker.rb
blob: b15dc819c5cea6b2ef4e11aef8ebfc44c4c96b23 (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
class MetricsWorker
  include Sidekiq::Worker

  sidekiq_options queue: :metrics

  def perform(metrics)
    prepared = prepare_metrics(metrics)

    Gitlab::Metrics.pool.with do |connection|
      connection.write_points(prepared)
    end
  end

  def prepare_metrics(metrics)
    metrics.map do |hash|
      new_hash = hash.symbolize_keys

      new_hash[:tags].each do |key, value|
        if value.blank?
          new_hash[:tags].delete(key)
        else
          new_hash[:tags][key] = escape_value(value)
        end
      end

      new_hash
    end
  end

  def escape_value(value)
    value.to_s.gsub('=', '\\=')
  end
end