gitlab-exporter 7.2.0 → 10.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  module GitLab
2
2
  module Exporter
3
- VERSION = "7.2.0".freeze
3
+ VERSION = "10.1.0".freeze
4
4
  end
5
5
  end
@@ -24,7 +24,7 @@ module GitLab
24
24
  private
25
25
 
26
26
  def memory_usage
27
- io = IO.popen(%W(ps -o rss= -p #{$PID}))
27
+ io = IO.popen(%W[ps -o rss= -p #{$PID}])
28
28
 
29
29
  mem = io.read
30
30
  io.close
@@ -35,7 +35,24 @@ module GitLab
35
35
  end
36
36
  end
37
37
 
38
+ # Performs a major GC after each request. We found that this helps to free up
39
+ # several MB of memory in conjunction with sricter malloc config.
40
+ # See https://gitlab.com/gitlab-org/gitlab/-/issues/297241
41
+ class RunGC
42
+ def initialize(app)
43
+ @app = app
44
+ end
45
+
46
+ def call(env)
47
+ @app.call(env).tap do
48
+ GC.start
49
+ end
50
+ end
51
+ end
52
+
38
53
  class << self
54
+ DEFAULT_WEB_SERVER = "webrick".freeze
55
+
39
56
  def setup(config)
40
57
  setup_server(config[:server])
41
58
  setup_probes(config[:probes])
@@ -43,6 +60,10 @@ module GitLab
43
60
  memory_threshold = (config[:server] && config[:server][:memory_threshold]) || 1024
44
61
  use MemoryKillerMiddleware, memory_threshold
45
62
  use Rack::Logger
63
+ use RunGC
64
+
65
+ # Defrag heap after everything is loaded into memory.
66
+ GC.compact
46
67
  end
47
68
 
48
69
  def logger
@@ -52,6 +73,7 @@ module GitLab
52
73
  def setup_server(config)
53
74
  config ||= {}
54
75
 
76
+ set(:server, config.fetch(:name, DEFAULT_WEB_SERVER))
55
77
  set(:bind, config.fetch(:listen_address, "0.0.0.0"))
56
78
  set(:port, config.fetch(:listen_port, 9168))
57
79
  end
@@ -26,7 +26,7 @@ describe GitLab::Exporter::Database::BloatCollector do
26
26
  end
27
27
 
28
28
  describe GitLab::Exporter::Database::BloatProber do
29
- let(:opts) { { bloat_types: %i(btree table) } }
29
+ let(:opts) { { bloat_types: %i[btree table] } }
30
30
  let(:metrics) { double("PrometheusMetrics", add: nil) }
31
31
  let(:collector) { double("BloatCollector", run: data) }
32
32
 
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
  require "gitlab_exporter/database/ci_builds"
3
3
 
4
- # rubocop:disable Metrics/LineLength
4
+ # rubocop:disable Layout/LineLength
5
5
  describe GitLab::Exporter::Database do
6
6
  let(:set_random_page_cost_query) { "SET random_page_cost" }
7
7
  let(:builds_query_ee) { "SELECT BUILDS EE" }
@@ -10,12 +10,9 @@ describe GitLab::Exporter::Database do
10
10
  let(:per_runner_query_ee) { "SELECT ALL RUNNING PER RUNNER EE" }
11
11
  let(:per_runner_query_ce) { "SELECT ALL RUNNING PER RUNNER CE" }
12
12
  let(:ee_check_query) { "SELECT COUNT(*) FROM licenses" }
13
- let(:repeated_commands_query_ee) { "SELECT EE REPEATED COMNANDS %d" }
14
- let(:repeated_commands_query_ce) { "SELECT CE REPEATED COMNANDS %d" }
15
13
  let(:unarchived_traces_query) { "SELECT UNARCHIVED TRACES %s LIST" }
16
14
  let(:connection_pool) { double("connection pool") }
17
15
  let(:connection) { double("connection") }
18
- let(:allowed_repeated_commands_count) { 5 }
19
16
  let(:created_builds_counting_disabled) { true }
20
17
  let(:time_now) { Time.new(2019, 4, 9, 6, 30, 0) }
21
18
  let(:unarchived_traces_query_time) { "2019-04-09 05:30:00" }
@@ -63,22 +60,6 @@ describe GitLab::Exporter::Database do
63
60
  end
64
61
  # rubocop:enable Metrics/ParameterLists
65
62
 
66
- # rubocop:disable Metrics/ParameterLists
67
- def repeated_commands_query_row_ee(namespace_id, shared_runners_enabled, project_id, status, has_minutes, count)
68
- row = repeated_commands_query_row_ce(namespace_id, shared_runners_enabled, project_id, status, count)
69
- row["has_minutes"] = has_minutes
70
- row
71
- end
72
- # rubocop:enable Metrics/ParameterLists
73
-
74
- def repeated_commands_query_row_ce(namespace_id, shared_runners_enabled, project_id, status, count)
75
- { "namespace_id" => namespace_id,
76
- "shared_runners_enabled" => shared_runners_enabled,
77
- "project_id" => project_id,
78
- "status" => status,
79
- "count" => count }
80
- end
81
-
82
63
  before do
83
64
  stub_const("GitLab::Exporter::Database::CiBuildsCollector::SET_RANDOM_PAGE_COST", set_random_page_cost_query)
84
65
  stub_const("GitLab::Exporter::Database::CiBuildsCollector::BUILDS_QUERY_EE", builds_query_ee)
@@ -87,8 +68,6 @@ describe GitLab::Exporter::Database do
87
68
  stub_const("GitLab::Exporter::Database::CiBuildsCollector::PER_RUNNER_QUERY_EE", per_runner_query_ee)
88
69
  stub_const("GitLab::Exporter::Database::CiBuildsCollector::PER_RUNNER_QUERY_CE", per_runner_query_ce)
89
70
  stub_const("GitLab::Exporter::Database::CiBuildsCollector::EE_CHECK_QUERY", ee_check_query)
90
- stub_const("GitLab::Exporter::Database::CiBuildsCollector::REPEATED_COMMANDS_QUERY_EE", repeated_commands_query_ee)
91
- stub_const("GitLab::Exporter::Database::CiBuildsCollector::REPEATED_COMMANDS_QUERY_CE", repeated_commands_query_ce)
92
71
  stub_const("GitLab::Exporter::Database::CiBuildsCollector::UNARCHIVED_TRACES_QUERY", unarchived_traces_query)
93
72
 
94
73
  allow_any_instance_of(GitLab::Exporter::Database::CiBuildsCollector).to receive(:connection_pool).and_return(connection_pool)
@@ -100,53 +79,35 @@ describe GitLab::Exporter::Database do
100
79
  allow(Time).to receive(:now).and_return(time_now)
101
80
 
102
81
  allow(connection).to receive(:exec).with(builds_query_ee)
103
- .and_return([builds_query_row_ee("f", "created", "1", "f", 10),
104
- builds_query_row_ee("t", "pending", "1", "t", 30),
105
- builds_query_row_ee("f", "created", "2", "f", 20),
106
- builds_query_row_ee("t", "pending", "2", "t", 50),
107
- builds_query_row_ee("t", "pending", "3", "f", 1),
108
- builds_query_row_ee("t", "pending", "4", "t", 2),
109
- builds_query_row_ee("f", "pending", "5", "f", 2)])
82
+ .and_return([builds_query_row_ee("f", "created", "1", "f", 10),
83
+ builds_query_row_ee("t", "pending", "1", "t", 30),
84
+ builds_query_row_ee("f", "created", "2", "f", 20),
85
+ builds_query_row_ee("t", "pending", "2", "t", 50),
86
+ builds_query_row_ee("t", "pending", "3", "f", 1),
87
+ builds_query_row_ee("t", "pending", "4", "t", 2),
88
+ builds_query_row_ee("f", "pending", "5", "f", 2)])
110
89
  allow(connection).to receive(:exec).with(builds_query_ce)
111
- .and_return([builds_query_row_ce("f", "created", "1", 10),
112
- builds_query_row_ce("t", "pending", "1", 30),
113
- builds_query_row_ce("f", "created", "2", 20),
114
- builds_query_row_ce("t", "pending", "2", 50),
115
- builds_query_row_ce("t", "pending", "3", 1),
116
- builds_query_row_ce("t", "pending", "4", 2),
117
- builds_query_row_ce("f", "pending", "5", 2)])
90
+ .and_return([builds_query_row_ce("f", "created", "1", 10),
91
+ builds_query_row_ce("t", "pending", "1", 30),
92
+ builds_query_row_ce("f", "created", "2", 20),
93
+ builds_query_row_ce("t", "pending", "2", 50),
94
+ builds_query_row_ce("t", "pending", "3", 1),
95
+ builds_query_row_ce("t", "pending", "4", 2),
96
+ builds_query_row_ce("f", "pending", "5", 2)])
118
97
 
119
98
  allow(connection).to receive(:exec).with(stale_builds_query).and_return([{ "count" => 2 }])
120
99
 
121
100
  allow(connection).to receive(:exec).with(per_runner_query_ee)
122
- .and_return([per_runner_query_row_ee(1, "instance_type", 1, "f", "f", 1, nil, "t", 15),
123
- per_runner_query_row_ee(2, "project_type", 2, "t", "t", nil, 3, "f", 5),
124
- per_runner_query_row_ee(2, "project_type", 3, "t", "t", nil, 3, "t", 5),
125
- per_runner_query_row_ee(3, "project_type", 4, "t", "t", nil, 3, "f", 5)])
101
+ .and_return([per_runner_query_row_ee(1, "instance_type", 1, "f", "f", 1, nil, "t", 15),
102
+ per_runner_query_row_ee(2, "project_type", 2, "t", "t", nil, 3, "f", 5),
103
+ per_runner_query_row_ee(2, "project_type", 3, "t", "t", nil, 3, "t", 5),
104
+ per_runner_query_row_ee(3, "project_type", 4, "t", "t", nil, 3, "f", 5)])
126
105
 
127
106
  allow(connection).to receive(:exec).with(per_runner_query_ce)
128
- .and_return([per_runner_query_row_ce(1, "instance_type", 1, 1, nil, 15),
129
- per_runner_query_row_ce(2, "project_type", 2, nil, 3, 5),
130
- per_runner_query_row_ce(2, "project_type", 3, nil, 3, 5),
131
- per_runner_query_row_ce(3, "project_type", 4, nil, 3, 5)])
132
-
133
- # rubocop:disable Style/FormatString
134
- repeated_commands_query_ee_with_limit = repeated_commands_query_ee % [allowed_repeated_commands_count]
135
- repeated_commands_query_ce_with_limit = repeated_commands_query_ce % [allowed_repeated_commands_count]
136
- # rubocop:enable Style/FormatString
137
-
138
- allow(connection).to receive(:exec)
139
- .with(repeated_commands_query_ee_with_limit)
140
- .and_return([repeated_commands_query_row_ee(1, "t", 1, "pending", "t", 10),
141
- repeated_commands_query_row_ee(2, "f", 2, "running", "f", 20),
142
- repeated_commands_query_row_ee(1, "f", 3, "pending", "t", 30),
143
- repeated_commands_query_row_ee(2, "t", 4, "running", "f", 40)])
144
- allow(connection).to receive(:exec)
145
- .with(repeated_commands_query_ce_with_limit)
146
- .and_return([repeated_commands_query_row_ce(1, "t", 1, "pending", 10),
147
- repeated_commands_query_row_ce(2, "f", 2, "running", 20),
148
- repeated_commands_query_row_ce(1, "f", 3, "pending", 30),
149
- repeated_commands_query_row_ce(2, "t", 4, "running", 40)])
107
+ .and_return([per_runner_query_row_ce(1, "instance_type", 1, 1, nil, 15),
108
+ per_runner_query_row_ce(2, "project_type", 2, nil, 3, 5),
109
+ per_runner_query_row_ce(2, "project_type", 3, nil, 3, 5),
110
+ per_runner_query_row_ce(3, "project_type", 4, nil, 3, 5)])
150
111
 
151
112
  unarchived_traces_query_with_time = unarchived_traces_query % [unarchived_traces_query_time] # rubocop:disable Style/FormatString
152
113
 
@@ -156,7 +117,6 @@ describe GitLab::Exporter::Database do
156
117
  describe GitLab::Exporter::Database::CiBuildsCollector do
157
118
  let(:collector) do
158
119
  described_class.new(connection_string: "host=localhost",
159
- allowed_repeated_commands_count: allowed_repeated_commands_count,
160
120
  created_builds_counting_disabled: created_builds_counting_disabled,
161
121
  unarchived_traces_offset_minutes: unarchived_traces_offset_minutes)
162
122
  end
@@ -195,10 +155,6 @@ describe GitLab::Exporter::Database do
195
155
  expect(subject[:stale_builds]).to eq(expected_stale_builds)
196
156
  end
197
157
 
198
- it "returns raw repeated_commands data" do
199
- expect(subject[:repeated_commands]).to include(*expected_repeated_commands)
200
- end
201
-
202
158
  it "returns raw unarchived_traces data" do
203
159
  expect(subject[:unarchived_traces]).to eq(expected_unarchived_traces)
204
160
  end
@@ -222,12 +178,6 @@ describe GitLab::Exporter::Database do
222
178
  { runner: "2", runner_type: "project_type", namespace: "3", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "yes", value: 5.0 },
223
179
  { runner: "3", runner_type: "project_type", namespace: "4", mirror: "yes", mirror_trigger_builds: "yes", scheduled: "no", triggered: "yes", has_minutes: "no", value: 5.0 }]
224
180
  end
225
- let(:expected_repeated_commands) do
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
- end
231
181
 
232
182
  before do
233
183
  stub_ee
@@ -254,12 +204,6 @@ describe GitLab::Exporter::Database do
254
204
  { runner: "2", runner_type: "project_type", namespace: "3", scheduled: "no", triggered: "yes", value: 5 },
255
205
  { runner: "3", runner_type: "project_type", namespace: "4", scheduled: "no", triggered: "yes", value: 5 }]
256
206
  end
257
- let(:expected_repeated_commands) do
258
- [{ namespace: "1", project: "1", shared_runners: "yes", status: "pending", value: 10 },
259
- { namespace: "2", project: "2", shared_runners: "no", status: "running", value: 20 },
260
- { namespace: "1", project: "3", shared_runners: "no", status: "pending", value: 30 },
261
- { namespace: "2", project: "4", shared_runners: "yes", status: "running", value: 40 }]
262
- end
263
207
 
264
208
  before do
265
209
  stub_ce
@@ -273,7 +217,6 @@ describe GitLab::Exporter::Database do
273
217
  let(:writer) { StringIO.new }
274
218
  let(:prober) do
275
219
  opts = { connection_string: "host=localhost",
276
- allowed_repeated_commands_count: allowed_repeated_commands_count,
277
220
  created_builds_counting_disabled: created_builds_counting_disabled,
278
221
  unarchived_traces_offset_minutes: unarchived_traces_offset_minutes }
279
222
  described_class.new(opts,
@@ -324,12 +267,6 @@ describe GitLab::Exporter::Database do
324
267
  end
325
268
  end
326
269
 
327
- it "responds with repeated commands Prometheus metrics" do
328
- ci_repeated_commands_builds_lines.each do |expected_line|
329
- expect(subject).to match(Regexp.new("^#{expected_line}$", Regexp::MULTILINE))
330
- end
331
- end
332
-
333
270
  it "responds with stale builds Prometheus metrics" do
334
271
  expect(subject).to match(/^ci_stale_builds 2.0$/m)
335
272
  end
@@ -372,12 +309,6 @@ describe GitLab::Exporter::Database do
372
309
  'ci_running_builds\{has_minutes="yes",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="2",runner_type="project_type",scheduled="no",triggered="yes"\} 5.0',
373
310
  'ci_running_builds\{has_minutes="no",mirror="yes",mirror_trigger_builds="yes",namespace="",runner="3",runner_type="project_type",scheduled="no",triggered="yes"\} 5.0']
374
311
  end
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.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
- end
381
312
  let(:namespace_out_of_limit) { 2 }
382
313
 
383
314
  before do
@@ -403,12 +334,6 @@ describe GitLab::Exporter::Database do
403
334
  'ci_running_builds\{namespace="",runner="2",runner_type="project_type",scheduled="no",triggered="yes"\} 10.0',
404
335
  'ci_running_builds\{namespace="",runner="3",runner_type="project_type",scheduled="no",triggered="yes"\} 5.0']
405
336
  end
406
- let(:ci_repeated_commands_builds_lines) do
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
- end
412
337
  let(:namespace_out_of_limit) { 0 }
413
338
 
414
339
  before do
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
  require "gitlab_exporter"
3
3
 
4
- # rubocop:disable Metrics/LineLength
4
+ # rubocop:disable Layout/LineLength
5
5
  describe GitLab::Exporter::GitProcessProber do
6
6
  describe ".extract_subcommand" do
7
7
  it "extract git subcommand" do
@@ -14,11 +14,11 @@ describe GitLab::Exporter::MemStats do
14
14
  it "parses the data properly" do
15
15
  expect(subject.valid?).to be_truthy
16
16
 
17
- nonzero_fields = %w(size rss shared_clean shared_dirty private_dirty pss)
18
- zero_fields = %w(private_clean swap)
17
+ nonzero_fields = %w[size rss shared_clean shared_dirty private_dirty pss]
18
+ zero_fields = %w[private_clean swap]
19
19
 
20
20
  nonzero_fields.each do |field|
21
- expect(subject.totals[field]).to be > 0 # rubocop:disable Style/NumericPredicate
21
+ expect(subject.totals[field]).to be > 0
22
22
  end
23
23
 
24
24
  zero_fields.each do |field|
data/spec/ruby_spec.rb ADDED
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+ require "gitlab_exporter/ruby"
3
+ require "gitlab_exporter/prober"
4
+
5
+ describe GitLab::Exporter::RubyProber do
6
+ let(:prober) { GitLab::Exporter::Prober.new(options) }
7
+
8
+ let(:options) do
9
+ {
10
+ ruby: {
11
+ class_name: described_class.to_s,
12
+ methods: %w[probe_gc],
13
+ opts: { quantiles: false }
14
+ }
15
+ }
16
+ end
17
+
18
+ it "probes and returns GC stats" do
19
+ prober.probe_all
20
+
21
+ output = StringIO.new
22
+ prober.write_to(output)
23
+ expect(output.string).to match(/ruby_gc_stat_count \d+ \d+/)
24
+ end
25
+ end
data/spec/spec_helper.rb CHANGED
@@ -51,11 +51,9 @@ class CLIArgs
51
51
  yield self
52
52
  end
53
53
 
54
- def on(*args)
55
- end
54
+ def on(*args); end
56
55
 
57
- def banner=(banner)
58
- end
56
+ def banner=(banner); end
59
57
 
60
58
  def parse!
61
59
  @arguments
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: 7.2.0
4
+ version: 10.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Carranza
@@ -11,61 +11,61 @@ cert_chain: []
11
11
  date: 2016-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pg
14
+ name: connection_pool
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: 2.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.1'
26
+ version: 2.2.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: sinatra
28
+ name: pg
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.4
33
+ version: '1.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.0.4
40
+ version: '1.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: quantile
42
+ name: puma
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.2.0
47
+ version: 5.1.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.2.0
54
+ version: 5.1.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: sidekiq
56
+ name: quantile
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 5.2.1
61
+ version: 0.2.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 5.2.1
68
+ version: 0.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: redis
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,19 +95,33 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.6.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: connection_pool
98
+ name: sidekiq
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 2.2.1
103
+ version: 5.2.1
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 2.2.1
110
+ version: 5.2.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: sinatra
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 2.0.4
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.0.4
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rspec
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +160,8 @@ files:
146
160
  - ".gitignore"
147
161
  - ".gitlab-ci.yml"
148
162
  - ".rubocop.yml"
163
+ - ".rubocop_todo.yml"
164
+ - ".ruby-version"
149
165
  - CONTRIBUTING.md
150
166
  - Gemfile
151
167
  - Gemfile.lock
@@ -171,6 +187,7 @@ files:
171
187
  - lib/gitlab_exporter/prober.rb
172
188
  - lib/gitlab_exporter/process.rb
173
189
  - lib/gitlab_exporter/prometheus.rb
190
+ - lib/gitlab_exporter/ruby.rb
174
191
  - lib/gitlab_exporter/sidekiq.rb
175
192
  - lib/gitlab_exporter/sidekiq_queue_job_stats.lua
176
193
  - lib/gitlab_exporter/util.rb
@@ -185,6 +202,7 @@ files:
185
202
  - spec/git_spec.rb
186
203
  - spec/memstats_spec.rb
187
204
  - spec/prometheus_metrics_spec.rb
205
+ - spec/ruby_spec.rb
188
206
  - spec/spec_helper.rb
189
207
  - spec/util_spec.rb
190
208
  homepage: http://gitlab.com
@@ -206,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
224
  - !ruby/object:Gem::Version
207
225
  version: '0'
208
226
  requirements: []
209
- rubygems_version: 3.0.3
227
+ rubygems_version: 3.1.4
210
228
  signing_key:
211
229
  specification_version: 4
212
230
  summary: GitLab metrics exporter
@@ -220,5 +238,6 @@ test_files:
220
238
  - spec/git_spec.rb
221
239
  - spec/memstats_spec.rb
222
240
  - spec/prometheus_metrics_spec.rb
241
+ - spec/ruby_spec.rb
223
242
  - spec/spec_helper.rb
224
243
  - spec/util_spec.rb