gitlab-exporter 5.0.1 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|