gitlab-exporter 5.0.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fdd56172f3a01bd1e0cd2f2054aee6c8e4877e39847e6d242a7e9b51e04b1289
4
- data.tar.gz: fa7a64cf59169efc726326fd7fb3c3e7bc832a9a10f3ea122e4bfad53f906ec8
3
+ metadata.gz: 7f73ad8856766603f5e3bfc3d142c803812a121b370fc4c2f717dde81e2796ec
4
+ data.tar.gz: e599d10943b9ed01befbfc642f49f561665e2e6d8134bbe68f20b4e997b845a5
5
5
  SHA512:
6
- metadata.gz: 2d66f6aafab68e9d9e5cbde86a81d1f28385b887e35b4032cf76a147203208708a302a0e565340bd87c25c6a99e4e11f6ba39839644f79b9e78dce0b30f1b7dd
7
- data.tar.gz: 3f80aa6f2bca1afc0593150471afc532d9d01aaf299a50f6a4b54fd13dba4dd59aadaa28bc4a495a84afd5a789a7ab463396bf94bcc62357b4434ee3200aeec0
6
+ metadata.gz: a2229b8daf628778d9e9b5c95adb782d8cfa8a3f9cab0966696ea2b99a54592734e3ede04c73175c540e3a331199a97bc637d678a98b41edbc5223891213ddc7
7
+ data.tar.gz: 6b0c1f64c4c02e22d11dc2abac2286612e8546ea31d591ce50f102ab6295229ed231bc16604bdeed9f3a3b4b828e4b33bacd81422dd58dae5a49084d738f2886
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-exporter (5.0.1)
4
+ gitlab-exporter (5.1.0)
5
5
  connection_pool (~> 2.2.1)
6
6
  pg (~> 1.1)
7
7
  quantile (~> 0.2.0)
@@ -60,7 +60,7 @@ module GitLab
60
60
  def probe_for_type(type)
61
61
  collector.run(type).each do |query_name, data|
62
62
  METRIC_KEYS.each do |key|
63
- metrics.add("gitlab_database_bloat_#{type}_#{key}", data[key], query_name: query_name)
63
+ metrics.add("gitlab_database_bloat_#{type}_#{key}", data[key].to_f, query_name: query_name)
64
64
  end
65
65
  end
66
66
 
@@ -463,7 +463,7 @@ module GitLab
463
463
  other_values[key] ||= 0
464
464
  other_values[key] += metric[:value]
465
465
  else
466
- add_ci_created_pending_builds(metric_name, metric[:value], metric)
466
+ add_ci_created_pending_builds(metric_name, metric[:value].to_f, metric)
467
467
  end
468
468
  end
469
469
 
@@ -479,7 +479,7 @@ module GitLab
479
479
  end
480
480
 
481
481
  def ci_stale_builds_metrics
482
- @metrics.add("ci_stale_builds", @results[:stale_builds])
482
+ @metrics.add("ci_stale_builds", @results[:stale_builds].to_f)
483
483
  end
484
484
 
485
485
  def metrics_per_runner
@@ -519,19 +519,19 @@ module GitLab
519
519
  labels[:namespace] = "" unless labels[:namespace]
520
520
 
521
521
  selected_labels = labels.select { |k, _| allowed_labels.include?(k) }.sort.to_h
522
- @metrics.add(metric_name, value, selected_labels)
522
+ @metrics.add(metric_name, value.to_f, selected_labels)
523
523
  end
524
524
 
525
525
  def repeated_commands_metrics
526
526
  @results[:repeated_commands].each do |metric|
527
527
  value = metric.delete(:value)
528
528
 
529
- @metrics.add("ci_repeated_commands_builds", value, metric)
529
+ @metrics.add("ci_repeated_commands_builds", value.to_f, metric)
530
530
  end
531
531
  end
532
532
 
533
533
  def unarchived_traces_metrics
534
- @metrics.add("ci_unarchived_traces", @results[:unarchived_traces])
534
+ @metrics.add("ci_unarchived_traces", @results[:unarchived_traces].to_f)
535
535
  end
536
536
  end
537
537
  end
@@ -48,13 +48,13 @@ module GitLab
48
48
  results.to_a.each do |row|
49
49
  @metrics.add(
50
50
  "project_remote_mirror_last_successful_update_time_seconds",
51
- row["last_successful_update_at"].to_i,
51
+ row["last_successful_update_at"].to_f,
52
52
  project_id: row["project_id"],
53
53
  url: row["url"]
54
54
  )
55
55
  @metrics.add(
56
56
  "project_remote_mirror_last_update_time_seconds",
57
- row["last_update_at"].to_i,
57
+ row["last_update_at"].to_f,
58
58
  project_id: row["project_id"],
59
59
  url: row["url"]
60
60
  )
@@ -147,7 +147,7 @@ module GitLab
147
147
  def probe_db
148
148
  results = @collector.run
149
149
  results.each do |key, value|
150
- @metrics.add("gitlab_database_rows", value.to_i, query_name: key.to_s)
150
+ @metrics.add("gitlab_database_rows", value.to_f, query_name: key.to_s)
151
151
  end
152
152
 
153
153
  self
@@ -35,7 +35,9 @@ module GitLab
35
35
 
36
36
  result.each do |table_name, tuple_stats|
37
37
  tuple_stats.each do |column_name, value|
38
- @metrics.add("gitlab_database_stat_table_#{column_name}", value.to_s, table_name: table_name)
38
+ @metrics.add("gitlab_database_stat_table_#{column_name}",
39
+ value.to_f,
40
+ table_name: table_name) unless value.is_a?(Numeric)
39
41
  end
40
42
  end
41
43
 
@@ -16,6 +16,8 @@ module GitLab
16
16
  end
17
17
 
18
18
  def add(name, value, quantile = false, **labels)
19
+ fail "value '#{value}' must be a number" unless value.is_a?(Numeric)
20
+
19
21
  if quantile
20
22
  @quantiles[{ name: name, labels: labels }] << value
21
23
  else
@@ -1,5 +1,5 @@
1
1
  module GitLab
2
2
  module Exporter
3
- VERSION = "5.0.1".freeze
3
+ VERSION = "5.1.0".freeze
4
4
  end
5
5
  end
@@ -206,27 +206,27 @@ describe GitLab::Exporter::Database do
206
206
 
207
207
  context "when executed on EE" do
208
208
  let(:expected_pending_builds) do
209
- [{ namespace: "1", shared_runners: "yes", has_minutes: "yes", value: 30 },
210
- { namespace: "2", shared_runners: "yes", has_minutes: "yes", value: 50 },
211
- { namespace: "3", shared_runners: "yes", has_minutes: "no", value: 1 },
212
- { namespace: "4", shared_runners: "yes", has_minutes: "yes", value: 2 },
213
- { namespace: "5", shared_runners: "no", has_minutes: "no", value: 2 }]
209
+ [{ namespace: "1", shared_runners: "yes", has_minutes: "yes", value: 30.0 },
210
+ { namespace: "2", shared_runners: "yes", has_minutes: "yes", value: 50.0 },
211
+ { namespace: "3", shared_runners: "yes", has_minutes: "no", value: 1.0 },
212
+ { namespace: "4", shared_runners: "yes", has_minutes: "yes", value: 2.0 },
213
+ { namespace: "5", shared_runners: "no", has_minutes: "no", value: 2.0 }]
214
214
  end
215
215
  let(:expected_created_builds) do
216
- [{ namespace: "1", shared_runners: "no", has_minutes: "no", value: 10 },
217
- { namespace: "2", shared_runners: "no", has_minutes: "no", value: 20 }]
216
+ [{ namespace: "1", shared_runners: "no", has_minutes: "no", value: 10.0 },
217
+ { namespace: "2", shared_runners: "no", has_minutes: "no", value: 20.0 }]
218
218
  end
219
219
  let(:expected_per_runner) do
220
- [{ runner: "1", shared_runner: "yes", namespace: "1", mirror: "no", mirror_trigger_builds: "no", scheduled: "yes", triggered: "no", has_minutes: "yes", value: 15 },
221
- { runner: "2", shared_runner: "no", namespace: "2", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "no", value: 5 },
222
- { runner: "2", shared_runner: "no", namespace: "3", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "yes", value: 5 },
223
- { runner: "3", shared_runner: "no", namespace: "4", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "no", value: 5 }]
220
+ [{ runner: "1", shared_runner: "yes", namespace: "1", mirror: "no", mirror_trigger_builds: "no", scheduled: "yes", triggered: "no", has_minutes: "yes", value: 15.0 },
221
+ { runner: "2", shared_runner: "no", namespace: "2", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "no", value: 5.0 },
222
+ { runner: "2", shared_runner: "no", namespace: "3", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "yes", value: 5.0 },
223
+ { runner: "3", shared_runner: "no", namespace: "4", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "no", value: 5.0 }]
224
224
  end
225
225
  let(:expected_repeated_commands) do
226
- [{ namespace: "1", project: "1", shared_runners: "yes", status: "pending", has_minutes: "yes", value: 10 },
227
- { namespace: "2", project: "2", shared_runners: "no", status: "running", has_minutes: "no", value: 20 },
228
- { namespace: "1", project: "3", shared_runners: "no", status: "pending", has_minutes: "yes", value: 30 },
229
- { namespace: "2", project: "4", shared_runners: "yes", status: "running", has_minutes: "no", value: 40 }]
226
+ [{ namespace: "1", project: "1", shared_runners: "yes", status: "pending", has_minutes: "yes", value: 10.0 },
227
+ { namespace: "2", project: "2", shared_runners: "no", status: "running", has_minutes: "no", value: 20.0 },
228
+ { namespace: "1", project: "3", shared_runners: "no", status: "pending", has_minutes: "yes", value: 30.0 },
229
+ { namespace: "2", project: "4", shared_runners: "yes", status: "running", has_minutes: "no", value: 40.0 }]
230
230
  end
231
231
 
232
232
  before do
@@ -331,11 +331,11 @@ describe GitLab::Exporter::Database do
331
331
  end
332
332
 
333
333
  it "responds with stale builds Prometheus metrics" do
334
- expect(subject).to match(/^ci_stale_builds 2$/m)
334
+ expect(subject).to match(/^ci_stale_builds 2.0$/m)
335
335
  end
336
336
 
337
337
  it "responds with unarchived traces Prometheus metrics" do
338
- expect(subject).to match(/^ci_unarchived_traces 10$/m)
338
+ expect(subject).to match(/^ci_unarchived_traces 10.0$/m)
339
339
  end
340
340
  end
341
341
 
@@ -349,34 +349,34 @@ describe GitLab::Exporter::Database do
349
349
  prober.write_to(writer)
350
350
  output = writer.string
351
351
 
352
- expect(output).to match(/^ci_stale_builds 0$/m)
352
+ expect(output).to match(/^ci_stale_builds 0.0$/m)
353
353
  end
354
354
  end
355
355
  end
356
356
 
357
357
  context "when executed on EE" do
358
358
  let(:ci_created_builds_expected_lines) do
359
- ['ci_created_builds\{has_minutes="no",namespace="1",shared_runners="no"\} 10',
360
- 'ci_created_builds\{has_minutes="no",namespace="2",shared_runners="no"\} 20']
359
+ ['ci_created_builds\{has_minutes="no",namespace="1",shared_runners="no"\} 10.0',
360
+ 'ci_created_builds\{has_minutes="no",namespace="2",shared_runners="no"\} 20.0']
361
361
  end
362
362
  let(:ci_pending_builds_expected_lines) do
363
- ['ci_pending_builds\{has_minutes="yes",namespace="1",shared_runners="yes"\} 30',
364
- 'ci_pending_builds\{has_minutes="yes",namespace="2",shared_runners="yes"\} 50',
365
- 'ci_pending_builds\{has_minutes="no",namespace="",shared_runners="yes"\} 1',
366
- 'ci_pending_builds\{has_minutes="yes",namespace="",shared_runners="yes"\} 2',
367
- 'ci_pending_builds\{has_minutes="no",namespace="",shared_runners="no"\} 2']
363
+ ['ci_pending_builds\{has_minutes="yes",namespace="1",shared_runners="yes"\} 30.0',
364
+ 'ci_pending_builds\{has_minutes="yes",namespace="2",shared_runners="yes"\} 50.0',
365
+ 'ci_pending_builds\{has_minutes="no",namespace="",shared_runners="yes"\} 1.0',
366
+ 'ci_pending_builds\{has_minutes="yes",namespace="",shared_runners="yes"\} 2.0',
367
+ 'ci_pending_builds\{has_minutes="no",namespace="",shared_runners="no"\} 2.0']
368
368
  end
369
369
  let(:ci_running_builds_expected_lines) do
370
- ['ci_running_builds\{has_minutes="yes",mirror="no",mirror_trigger_builds="no",namespace="1",runner="1",scheduled="yes",shared_runner="yes",triggered="no"\} 15',
371
- 'ci_running_builds\{has_minutes="no",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="2",scheduled="no",shared_runner="no",triggered="yes"\} 5',
372
- 'ci_running_builds\{has_minutes="yes",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="2",scheduled="no",shared_runner="no",triggered="yes"\} 5',
373
- 'ci_running_builds\{has_minutes="no",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="3",scheduled="no",shared_runner="no",triggered="yes"\} 5']
370
+ ['ci_running_builds\{has_minutes="yes",mirror="no",mirror_trigger_builds="no",namespace="1",runner="1",scheduled="yes",shared_runner="yes",triggered="no"\} 15.0',
371
+ 'ci_running_builds\{has_minutes="no",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="2",scheduled="no",shared_runner="no",triggered="yes"\} 5.0',
372
+ 'ci_running_builds\{has_minutes="yes",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="2",scheduled="no",shared_runner="no",triggered="yes"\} 5.0',
373
+ 'ci_running_builds\{has_minutes="no",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="3",scheduled="no",shared_runner="no",triggered="yes"\} 5.0']
374
374
  end
375
375
  let(:ci_repeated_commands_builds_lines) do
376
- ['ci_repeated_commands_builds\{namespace="1",project="1",shared_runners="yes",status="pending",has_minutes="yes"\} 10',
377
- 'ci_repeated_commands_builds\{namespace="2",project="2",shared_runners="no",status="running",has_minutes="no"\} 20',
378
- 'ci_repeated_commands_builds\{namespace="1",project="3",shared_runners="no",status="pending",has_minutes="yes"\} 30',
379
- 'ci_repeated_commands_builds\{namespace="2",project="4",shared_runners="yes",status="running",has_minutes="no"\} 40']
376
+ ['ci_repeated_commands_builds\{namespace="1",project="1",shared_runners="yes",status="pending",has_minutes="yes"\} 10.0',
377
+ 'ci_repeated_commands_builds\{namespace="2",project="2",shared_runners="no",status="running",has_minutes="no"\} 20.0',
378
+ 'ci_repeated_commands_builds\{namespace="1",project="3",shared_runners="no",status="pending",has_minutes="yes"\} 30.0',
379
+ 'ci_repeated_commands_builds\{namespace="2",project="4",shared_runners="yes",status="running",has_minutes="no"\} 40.0']
380
380
  end
381
381
  let(:namespace_out_of_limit) { 2 }
382
382
 
@@ -389,25 +389,25 @@ describe GitLab::Exporter::Database do
389
389
 
390
390
  context "when executed on CE" do
391
391
  let(:ci_created_builds_expected_lines) do
392
- ['ci_created_builds\{namespace="1",shared_runners="no"\} 10',
393
- 'ci_created_builds\{namespace="2",shared_runners="no"\} 20']
392
+ ['ci_created_builds\{namespace="1",shared_runners="no"\} 10.0',
393
+ 'ci_created_builds\{namespace="2",shared_runners="no"\} 20.0']
394
394
  end
395
395
  let(:ci_pending_builds_expected_lines) do
396
- ['ci_pending_builds\{namespace="1",shared_runners="yes"\} 30',
397
- 'ci_pending_builds\{namespace="2",shared_runners="yes"\} 50',
398
- 'ci_pending_builds\{namespace="",shared_runners="yes"\} 3',
399
- 'ci_pending_builds\{namespace="",shared_runners="no"\} 2']
396
+ ['ci_pending_builds\{namespace="1",shared_runners="yes"\} 30.0',
397
+ 'ci_pending_builds\{namespace="2",shared_runners="yes"\} 50.0',
398
+ 'ci_pending_builds\{namespace="",shared_runners="yes"\} 3.0',
399
+ 'ci_pending_builds\{namespace="",shared_runners="no"\} 2.0']
400
400
  end
401
401
  let(:ci_running_builds_expected_lines) do
402
- ['ci_running_builds\{namespace="1",runner="1",scheduled="yes",shared_runner="yes",triggered="no"\} 15',
403
- 'ci_running_builds\{namespace="",runner="2",scheduled="no",shared_runner="no",triggered="yes"\} 10',
404
- 'ci_running_builds\{namespace="",runner="3",scheduled="no",shared_runner="no",triggered="yes"\} 5']
402
+ ['ci_running_builds\{namespace="1",runner="1",scheduled="yes",shared_runner="yes",triggered="no"\} 15.0',
403
+ 'ci_running_builds\{namespace="",runner="2",scheduled="no",shared_runner="no",triggered="yes"\} 10.0',
404
+ 'ci_running_builds\{namespace="",runner="3",scheduled="no",shared_runner="no",triggered="yes"\} 5.0']
405
405
  end
406
406
  let(:ci_repeated_commands_builds_lines) do
407
- ['ci_repeated_commands_builds\{namespace="1",project="1",shared_runners="yes",status="pending"\} 10',
408
- 'ci_repeated_commands_builds\{namespace="2",project="2",shared_runners="no",status="running"\} 20',
409
- 'ci_repeated_commands_builds\{namespace="1",project="3",shared_runners="no",status="pending"\} 30',
410
- 'ci_repeated_commands_builds\{namespace="2",project="4",shared_runners="yes",status="running"\} 40']
407
+ ['ci_repeated_commands_builds\{namespace="1",project="1",shared_runners="yes",status="pending"\} 10.0',
408
+ 'ci_repeated_commands_builds\{namespace="2",project="2",shared_runners="no",status="running"\} 20.0',
409
+ 'ci_repeated_commands_builds\{namespace="1",project="3",shared_runners="no",status="pending"\} 30.0',
410
+ 'ci_repeated_commands_builds\{namespace="2",project="4",shared_runners="yes",status="running"\} 40.0']
411
411
  end
412
412
  let(:namespace_out_of_limit) { 0 }
413
413
 
@@ -14,4 +14,13 @@ describe GitLab::Exporter::PrometheusMetrics do
14
14
  /mymetric{mylabel="x",myotherlabel="y"} 1.3 \d*$/
15
15
  )
16
16
  end
17
+
18
+ it "fails to add a non-numeric metric value" do
19
+ expect {
20
+ subject.add("mymetric", "1.4", mylabel: "x", myotherlabel: "y").to_s
21
+ }.to raise_error(RuntimeError)
22
+ expect {
23
+ subject.add("mymetric", "invalid", mylabel: "x", myotherlabel: "y").to_s
24
+ }.to raise_error(RuntimeError)
25
+ end
17
26
  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: 5.0.1
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Carranza
@@ -206,8 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  requirements: []
209
- rubyforge_project:
210
- rubygems_version: 2.7.8
209
+ rubygems_version: 3.0.3
211
210
  signing_key:
212
211
  specification_version: 4
213
212
  summary: GitLab metrics exporter