gitlab-exporter 10.5.0 → 11.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c392268186f090b025d290c818f821120f5160a9a59f2e3ba228f26da0b8505
4
- data.tar.gz: 3771d5912cb2a310183a1f78a8e24d191eb502d20c2beab3c327994243ae7077
3
+ metadata.gz: 8f22f9c58b0d64fdec6134fa8b59cfd474f1333ebe59a8a94c620749fc4be33c
4
+ data.tar.gz: 0dc26d62d7aab597a13aab640844a42774a85c2ce6459f9eeeef7441b81f3d19
5
5
  SHA512:
6
- metadata.gz: c9ee25b554e51484e4cba96070677c90e3cbad17da49eef2e2f649ad4d4ff125e8e2982cfb6e952444436d7ead6f603f6173ba1270b7112b3de75126cb57b318
7
- data.tar.gz: e6038eff74531eb7c0561437cb676336853d9a597b588d07a9561a4561ef165a3ad2f528711b3a2f5d61ebfc8df341ef93ec4d15274fb7efcc88859abc1bc6c3
6
+ metadata.gz: 56a1c9f3a267b32ead646a1c6a95a8d81744498d67613e0c6dbb849a15e624d96215800a1688504e08c8b25a2b1222a4b86f2e3b1cb7b898ff892f6a445dcdbd
7
+ data.tar.gz: e08257d194617fd5467526403a8629aeab1d46719bb34c57b6aaaa77cb94b138b139544771b071bfccc6ec47e8440d1241ae3adb8fceb226694366d4e89a058f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-exporter (10.5.0)
4
+ gitlab-exporter (11.0.0)
5
5
  connection_pool (= 2.2.5)
6
6
  pg (= 1.2.3)
7
7
  puma (= 5.3.2)
@@ -275,7 +275,7 @@ module GitLab
275
275
  ::GitLab::Exporter::SidekiqProber.new(redis_url: @redis_url)
276
276
  .probe_stats
277
277
  .probe_queues
278
- .probe_jobs
278
+ .probe_jobs_limit
279
279
  .probe_workers
280
280
  .probe_retries
281
281
  .write_to(@target)
@@ -7,9 +7,6 @@ module GitLab
7
7
  #
8
8
  # It takes the Redis URL Sidekiq is connected to
9
9
  class SidekiqProber
10
- QUEUE_JOB_STATS_SCRIPT = File.read(File.expand_path("#{__FILE__}/../sidekiq_queue_job_stats.lua")).freeze
11
- QUEUE_JOB_STATS_SHA = Digest::SHA1.hexdigest(QUEUE_JOB_STATS_SCRIPT).freeze
12
-
13
10
  # The maximum depth (from the head) of each queue to probe. Probing the
14
11
  # entirety of a very large queue will take longer and run the risk of
15
12
  # timing out. But when we have a very large queue, we are most in need of
@@ -72,45 +69,19 @@ module GitLab
72
69
  self
73
70
  end
74
71
 
75
- # Count worker classes present in Sidekiq queues. This uses a Lua
76
- # script to find all jobs in all queues. That script will block
77
- # all other Redis commands:
78
- # https://redis.io/commands/eval#atomicity-of-scripts
79
- #
80
- # The script is generally fast, but may be slower with very large
81
- # queues, which is why this is not enabled by default.
82
72
  def probe_jobs
83
- with_sidekiq do
84
- job_stats = {}
85
-
86
- Sidekiq::Queue.all.each do |queue|
87
- Sidekiq.redis do |conn|
88
- stats = conn.evalsha(QUEUE_JOB_STATS_SHA, ["queue:#{queue.name}"])
89
- job_stats.merge!(stats.to_h)
90
- end
91
- rescue Redis::CommandError # Could happen if the script exceeded the maximum run time (5 seconds by default)
92
- # FIXME: Should we call SCRIPT KILL?
93
- return self
94
- end
95
-
96
- job_stats.each do |class_name, count|
97
- @metrics.add("sidekiq_enqueued_jobs", count, name: class_name)
98
- end
99
- end
73
+ puts "[REMOVED] probe_jobs is now considered obsolete and does not emit any metrics,"\
74
+ " please use probe_jobs_limit instead"
100
75
 
101
76
  self
102
77
  end
103
78
 
104
- # This does the same as #probe_jobs, but only looks at the first
105
- # PROBE_JOBS_LIMIT jobs in each queue. This means that we run a
79
+ # Count worker classes present in Sidekiq queues. This only looks at the
80
+ # first PROBE_JOBS_LIMIT jobs in each queue. This means that we run a
106
81
  # single LRANGE command for each queue, which does not block other
107
- # commands. For queues over PROBE_JOBS_LIMIT in size, this means
108
- # that we will not have completely accurate statistics, but the
109
- # probe performance will also not degrade as the queue gets
110
- # larger.
111
- #
112
- # DO NOT USE this and probe_jobs together, as they export the same
113
- # metric (sidekiq_enqueued_jobs).
82
+ # commands. For queues over PROBE_JOBS_LIMIT in size, this means that we
83
+ # will not have completely accurate statistics, but the probe performance
84
+ # will also not degrade as the queue gets larger.
114
85
  def probe_jobs_limit
115
86
  with_sidekiq do
116
87
  job_stats = Hash.new(0)
@@ -1,5 +1,5 @@
1
1
  module GitLab
2
2
  module Exporter
3
- VERSION = "10.5.0".freeze
3
+ VERSION = "11.0.0".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-exporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.5.0
4
+ version: 11.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Carranza
@@ -189,7 +189,6 @@ files:
189
189
  - lib/gitlab_exporter/prometheus.rb
190
190
  - lib/gitlab_exporter/ruby.rb
191
191
  - lib/gitlab_exporter/sidekiq.rb
192
- - lib/gitlab_exporter/sidekiq_queue_job_stats.lua
193
192
  - lib/gitlab_exporter/util.rb
194
193
  - lib/gitlab_exporter/version.rb
195
194
  - lib/gitlab_exporter/web_exporter.rb
@@ -1,42 +0,0 @@
1
- --
2
- -- Adapted from https://github.com/mperham/sidekiq/blob/2f9258e4fe77991c526f7a65c92bcf792eef8338/lib/sidekiq/api.rb#L231
3
- --
4
- local queue_name = KEYS[1]
5
- local initial_size = redis.call('llen', queue_name)
6
- local deleted_size = 0
7
- local page = 0
8
- local page_size = 2000
9
- local temp_job_stats = {}
10
- local final_job_stats = {}
11
-
12
- while true do
13
- local range_start = page * page_size - deleted_size
14
- local range_end = range_start + page_size - 1
15
- local entries = redis.call('lrange', queue_name, range_start, range_end)
16
-
17
- if #entries == 0 then
18
- break
19
- end
20
-
21
- page = page + 1
22
-
23
- for index, entry in next, entries do
24
- local class = cjson.decode(entry)['class']
25
- if class ~= nil then
26
- if temp_job_stats[class] ~= nil then
27
- temp_job_stats[class] = temp_job_stats[class] + 1
28
- else
29
- temp_job_stats[class] = 1
30
- end
31
- end
32
- end
33
-
34
- deleted_size = initial_size - redis.call('llen', queue_name)
35
- end
36
-
37
- for class, count in next, temp_job_stats do
38
- local stat_entry = {class, count}
39
- table.insert(final_job_stats, stat_entry)
40
- end
41
-
42
- return final_job_stats