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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/gitlab_exporter/database/bloat.rb +1 -1
- data/lib/gitlab_exporter/database/ci_builds.rb +5 -5
- data/lib/gitlab_exporter/database/remote_mirrors.rb +2 -2
- data/lib/gitlab_exporter/database/row_count.rb +1 -1
- data/lib/gitlab_exporter/database/tuple_stats.rb +3 -1
- data/lib/gitlab_exporter/prometheus.rb +2 -0
- data/lib/gitlab_exporter/version.rb +1 -1
- data/spec/database/ci_builds_spec.rb +46 -46
- data/spec/prometheus_metrics_spec.rb +9 -0
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f73ad8856766603f5e3bfc3d142c803812a121b370fc4c2f717dde81e2796ec
|
4
|
+
data.tar.gz: e599d10943b9ed01befbfc642f49f561665e2e6d8134bbe68f20b4e997b845a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2229b8daf628778d9e9b5c95adb782d8cfa8a3f9cab0966696ea2b99a54592734e3ede04c73175c540e3a331199a97bc637d678a98b41edbc5223891213ddc7
|
7
|
+
data.tar.gz: 6b0c1f64c4c02e22d11dc2abac2286612e8546ea31d591ce50f102ab6295229ed231bc16604bdeed9f3a3b4b828e4b33bacd81422dd58dae5a49084d738f2886
|
data/Gemfile.lock
CHANGED
@@ -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"].
|
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"].
|
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.
|
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}",
|
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
|
|
@@ -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
|
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
|
-
|
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
|