prometheus_exporter 2.1.0 → 2.1.1

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: '042907307e8e1555111f34fb69d6cf66127e7742a76130952e3708a742ada24a'
4
- data.tar.gz: 1e474618e9ddfa870a47e3ba7d7e55935677f3770d73968bb60457474b49502d
3
+ metadata.gz: e5381fb78e6440d77a61269f3bf7c40a84b44a53594d687db4a683be3cb82725
4
+ data.tar.gz: 18216fbeae6978d5427fa9f97a67bbf3f0ee36e92091a2606b2dadcaa6497d83
5
5
  SHA512:
6
- metadata.gz: '0137930945e0b254dbf0d7245d696d782044bfee9dd255ff022ffadaddafb47cdefc1aa6f83927bc84866d87fee761027590c2f08fbe730496e7099e68a883b7'
7
- data.tar.gz: 562691a91a7f4a0e380b92236f3295177481763393db7b0db9d8763f6ac631d317e6bd21bd3368471029742b8e649a1c2a3884fa2aafe93d280aa353909d9ecd
6
+ metadata.gz: 626d1f7c05e5bf21bc499e69fd1ab0d73c94c5a565ac7eae81ec9d43fc93f6cf96b83a6fd72b25846e49371079a9c87a497e719d74c20dfa57c0fb5cbe4507e5
7
+ data.tar.gz: b43a57442d6326648cbc3539c50400556575e425756358d45ad39832e099671ca617ea66b6754d16d66693b9fbdf9045b96a95713b36f1f135ab8ab0e38a6d0b
@@ -27,15 +27,16 @@ jobs:
27
27
  strategy:
28
28
  fail-fast: false
29
29
  matrix:
30
- ruby: ['3.0', '3.1', '3.2', '3.3']
31
- activerecord: [60, 61, 70]
30
+ ruby: ['3.1', '3.2', '3.3']
31
+ activerecord: [61, 70, 71]
32
32
 
33
33
  steps:
34
- - uses: actions/checkout@v2
34
+ - uses: actions/checkout@v4
35
35
 
36
36
  - uses: ruby/setup-ruby@v1
37
37
  with:
38
38
  ruby-version: ${{ matrix.ruby }}
39
+ bundler: latest
39
40
  bundler-cache: true
40
41
 
41
42
  - name: Rubocop
@@ -50,10 +51,10 @@ jobs:
50
51
  runs-on: ubuntu-latest
51
52
 
52
53
  outputs:
53
- new_version_published: ${{ steps.release.outputs.new_version_published }}
54
+ new_version_published: ${{ steps.release.outputs.new_version }}
54
55
 
55
56
  steps:
56
- - uses: actions/checkout@v2
57
+ - uses: actions/checkout@v4
57
58
 
58
59
  - name: Release gem
59
60
  id: release
@@ -70,7 +71,7 @@ jobs:
70
71
  timeout-minutes: 20
71
72
 
72
73
  steps:
73
- - uses: actions/checkout@v3
74
+ - uses: actions/checkout@v4
74
75
  - uses: docker/setup-qemu-action@v2
75
76
  - uses: docker/setup-buildx-action@v2
76
77
 
data/.rubocop ADDED
@@ -0,0 +1 @@
1
+ --ignore-unrecognized-cops
data/.rubocop.yml CHANGED
@@ -4,4 +4,15 @@ inherit_gem:
4
4
  AllCops:
5
5
  Exclude:
6
6
  - 'gemfiles/**/*'
7
- - 'vendor/**/*'
7
+ - 'vendor/**/*'
8
+
9
+ Discourse/Plugins/NoMonkeyPatching:
10
+ Enabled: false
11
+
12
+ Discourse/Plugins/NamespaceMethods:
13
+ Exclude:
14
+ - bin/prometheus_exporter
15
+
16
+ Style/InvertibleUnlessCondition:
17
+ Exclude:
18
+ - '*.gemspec'
data/CHANGELOG CHANGED
@@ -1,4 +1,10 @@
1
- 2.1.0 - 2024-08-01
1
+ 2.1.1 - 2024-06-19
2
+
3
+ - FEATURE: improve good_job instrumentation
4
+ - FIX: improve Ruby 3.X support
5
+ - FEATURE: imstrumentation for malloc / oldmalloc increace in GC stats
6
+
7
+ 2.1.0 - 2024-01-08
2
8
 
3
9
  - FEATURE: good_job instrumentation
4
10
  - PERF: improve performance of histogram
data/README.md CHANGED
@@ -40,7 +40,7 @@ To learn more see [Instrumenting Rails with Prometheus](https://samsaffron.com/a
40
40
 
41
41
  ## Requirements
42
42
 
43
- Minimum Ruby of version 2.6.0 is required, Ruby 2.5.0 is EOL as of March 31st 2021.
43
+ Minimum Ruby of version 3.0.0 is required, Ruby 2.7 is EOL as of March 31st 2023.
44
44
 
45
45
  ## Migrating from v0.x
46
46
 
@@ -583,6 +583,17 @@ The puma metrics are using the `Puma.stats` method and hence need to be started
583
583
  workers has been booted and from a Puma thread otherwise the metrics won't be accessible.
584
584
  The easiest way to gather this metrics is to put the following in your `puma.rb` config:
585
585
 
586
+ For Puma single mode
587
+ ```ruby
588
+ # puma.rb config
589
+ require 'prometheus_exporter/instrumentation'
590
+ # optional check, avoids spinning up and down threads per worker
591
+ if !PrometheusExporter::Instrumentation::Puma.started?
592
+ PrometheusExporter::Instrumentation::Puma.start
593
+ end
594
+ ```
595
+
596
+ For Puma clustered mode
586
597
  ```ruby
587
598
  # puma.rb config
588
599
  after_worker_boot do
@@ -884,7 +895,7 @@ prometheus_exporter -p 8080 \
884
895
  --prefix 'foo_'
885
896
  ```
886
897
 
887
- You can use `-b` option to bind the `prometheus_exporter` web server to any IPv4 interface with `-b 0.0.0.0`,
898
+ You can use `-b` option to bind the `prometheus_exporter` web server to any IPv4 interface with `-b 0.0.0.0`,
888
899
  any IPv6 interface with `-b ::`, or `-b ANY` to any IPv4/IPv6 interfaces available on your host system.
889
900
 
890
901
  #### Enabling Basic Authentication
@@ -74,7 +74,7 @@ def run
74
74
  end.parse!
75
75
 
76
76
  logger = Logger.new(options[:logger_path])
77
- logger.level = Logger::WARN
77
+ logger.level = Logger::INFO
78
78
 
79
79
  if options.has_key?(:realm) && !options.has_key?(:auth)
80
80
  logger.warn "Providing REALM without AUTH has no effect"
@@ -121,7 +121,7 @@ def run
121
121
 
122
122
  runner = PrometheusExporter::Server::Runner.new(options)
123
123
 
124
- puts "#{Time.now} Starting prometheus exporter on #{runner.bind}:#{runner.port}"
124
+ logger.info "Starting prometheus exporter on #{runner.bind}:#{runner.port}"
125
125
  runner.start
126
126
  sleep
127
127
  end
@@ -2,4 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "activerecord", "~> 7.0.0"
6
+
5
7
  gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 7.1.0"
6
+
7
+ gemspec path: "../"
@@ -2,10 +2,10 @@
2
2
 
3
3
  module PrometheusExporter::Instrumentation
4
4
  class DelayedJob
5
- JOB_CLASS_REGEXP = %r{job_class: (\w+:{0,2})+}.freeze
5
+ JOB_CLASS_REGEXP = %r{job_class: ((\w+:{0,2})+)}.freeze
6
6
 
7
7
  class << self
8
- def register_plugin(client: nil)
8
+ def register_plugin(client: nil, include_module_name: false)
9
9
  instrumenter = self.new(client: client)
10
10
  return unless defined?(Delayed::Plugin)
11
11
 
@@ -15,7 +15,8 @@ module PrometheusExporter::Instrumentation
15
15
  max_attempts = Delayed::Worker.max_attempts
16
16
  enqueued_count = Delayed::Job.where(queue: job.queue).count
17
17
  pending_count = Delayed::Job.where(attempts: 0, locked_at: nil, queue: job.queue).count
18
- instrumenter.call(job, max_attempts, enqueued_count, pending_count, *args, &block)
18
+ instrumenter.call(job, max_attempts, enqueued_count, pending_count, include_module_name,
19
+ *args, &block)
19
20
  end
20
21
  end
21
22
  end
@@ -28,7 +29,7 @@ module PrometheusExporter::Instrumentation
28
29
  @client = client || PrometheusExporter::Client.default
29
30
  end
30
31
 
31
- def call(job, max_attempts, enqueued_count, pending_count, *args, &block)
32
+ def call(job, max_attempts, enqueued_count, pending_count, include_module_name, *args, &block)
32
33
  success = false
33
34
  start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
34
35
  latency = Time.current - job.run_at
@@ -41,7 +42,7 @@ module PrometheusExporter::Instrumentation
41
42
 
42
43
  @client.send_json(
43
44
  type: "delayed_job",
44
- name: job.handler.to_s.match(JOB_CLASS_REGEXP).to_a[1].to_s,
45
+ name: job.handler.to_s.match(JOB_CLASS_REGEXP).to_a[include_module_name ? 1 : 2].to_s,
45
46
  queue_name: job.queue,
46
47
  success: success,
47
48
  duration: duration,
@@ -44,7 +44,7 @@ class PrometheusExporter::Instrumentation::MethodProfiler
44
44
  patch_source_line = __LINE__ + 3
45
45
  patches = methods.map do |method_name|
46
46
  <<~RUBY
47
- def #{method_name}(*args, &blk)
47
+ def #{method_name}(...)
48
48
  unless prof = Thread.current[:_method_profiler]
49
49
  return super
50
50
  end
@@ -75,13 +75,13 @@ class PrometheusExporter::Instrumentation::MethodProfiler
75
75
  <<~RUBY
76
76
  unless defined?(#{method_name}__mp_unpatched)
77
77
  alias_method :#{method_name}__mp_unpatched, :#{method_name}
78
- def #{method_name}(*args, &blk)
78
+ def #{method_name}(...)
79
79
  unless prof = Thread.current[:_method_profiler]
80
- return #{method_name}__mp_unpatched(*args, &blk)
80
+ return #{method_name}__mp_unpatched(...)
81
81
  end
82
82
  begin
83
83
  start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
84
- #{method_name}__mp_unpatched(*args, &blk)
84
+ #{method_name}__mp_unpatched(...)
85
85
  ensure
86
86
  data = (prof[:#{name}] ||= {duration: 0.0, calls: 0})
87
87
  data[:duration] += Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
@@ -63,6 +63,8 @@ module PrometheusExporter::Instrumentation
63
63
  metric[:major_gc_ops_total] = stat[:major_gc_count]
64
64
  metric[:minor_gc_ops_total] = stat[:minor_gc_count]
65
65
  metric[:allocated_objects_total] = stat[:total_allocated_objects]
66
+ metric[:malloc_increase_bytes_limit] = stat[:malloc_increase_bytes_limit]
67
+ metric[:oldmalloc_increase_bytes_limit] = stat[:oldmalloc_increase_bytes_limit]
66
68
  end
67
69
 
68
70
  def collect_v8_stats(metric)
@@ -23,7 +23,7 @@ class PrometheusExporter::Middleware
23
23
  end
24
24
  if defined? PG::Connection
25
25
  MethodProfiler.patch(PG::Connection, [
26
- :exec, :async_exec, :exec_prepared, :send_query_prepared, :query
26
+ :exec, :async_exec, :exec_prepared, :exec_params, :send_query_prepared, :query
27
27
  ], :sql, instrument: config[:instrument])
28
28
  end
29
29
  if defined? Mysql2::Client
@@ -13,6 +13,8 @@ module PrometheusExporter::Server
13
13
  v8_physical_size: "Physical size consumed by V8 heaps.",
14
14
  v8_heap_count: "Number of V8 contexts running.",
15
15
  rss: "Total RSS used by process.",
16
+ malloc_increase_bytes_limit: 'Limit before Ruby triggers a GC against current objects (bytes).',
17
+ oldmalloc_increase_bytes_limit: 'Limit before Ruby triggers a major GC against old objects (bytes).'
16
18
  }
17
19
 
18
20
  PROCESS_COUNTERS = {
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PrometheusExporter
4
- VERSION = "2.1.0"
4
+ VERSION = "2.1.1"
5
5
  end
@@ -27,14 +27,14 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rubocop", ">= 0.69"
28
28
  spec.add_development_dependency "bundler", ">= 2.1.4"
29
29
  spec.add_development_dependency "rake", "~> 13.0"
30
- spec.add_development_dependency "minitest", "~> 5.15.0" # https://github.com/qrush/m/issues/93
30
+ spec.add_development_dependency "minitest", "~> 5.23.0"
31
31
  spec.add_development_dependency "guard", "~> 2.0"
32
- spec.add_development_dependency "mini_racer", "~> 0.5.0"
32
+ spec.add_development_dependency "mini_racer", "~> 0.12.0"
33
33
  spec.add_development_dependency "guard-minitest", "~> 2.0"
34
34
  spec.add_development_dependency "oj", "~> 3.0"
35
- spec.add_development_dependency "rack-test", "~> 0.8.3"
35
+ spec.add_development_dependency "rack-test", "~> 2.1.0"
36
36
  spec.add_development_dependency "minitest-stub-const", "~> 0.6"
37
- spec.add_development_dependency "rubocop-discourse", ">2"
37
+ spec.add_development_dependency "rubocop-discourse", ">= 3"
38
38
  spec.add_development_dependency "appraisal", "~> 2.3"
39
39
  spec.add_development_dependency "activerecord", "~> 6.0.0"
40
40
  spec.add_development_dependency "redis", "> 5"
@@ -42,5 +42,5 @@ Gem::Specification.new do |spec|
42
42
  if !RUBY_ENGINE == 'jruby'
43
43
  spec.add_development_dependency "raindrops", "~> 0.19"
44
44
  end
45
- spec.required_ruby_version = '>= 2.6.0'
45
+ spec.required_ruby_version = '>= 3.0.0'
46
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus_exporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-07 00:00:00.000000000 Z
11
+ date: 2024-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: webrick
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 5.15.0
75
+ version: 5.23.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 5.15.0
82
+ version: 5.23.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.5.0
103
+ version: 0.12.0
104
104
  type: :development
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: 0.5.0
110
+ version: 0.12.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: guard-minitest
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 0.8.3
145
+ version: 2.1.0
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 0.8.3
152
+ version: 2.1.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: minitest-stub-const
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -168,16 +168,16 @@ dependencies:
168
168
  name: rubocop-discourse
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ">"
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: '2'
173
+ version: '3'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ">"
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
- version: '2'
180
+ version: '3'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: appraisal
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -244,6 +244,7 @@ extra_rdoc_files: []
244
244
  files:
245
245
  - ".github/workflows/ci.yml"
246
246
  - ".gitignore"
247
+ - ".rubocop"
247
248
  - ".rubocop.yml"
248
249
  - Appraisals
249
250
  - CHANGELOG
@@ -261,6 +262,7 @@ files:
261
262
  - gemfiles/ar_60.gemfile
262
263
  - gemfiles/ar_61.gemfile
263
264
  - gemfiles/ar_70.gemfile
265
+ - gemfiles/ar_71.gemfile
264
266
  - lib/prometheus_exporter.rb
265
267
  - lib/prometheus_exporter/client.rb
266
268
  - lib/prometheus_exporter/instrumentation.rb
@@ -321,7 +323,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
321
323
  requirements:
322
324
  - - ">="
323
325
  - !ruby/object:Gem::Version
324
- version: 2.6.0
326
+ version: 3.0.0
325
327
  required_rubygems_version: !ruby/object:Gem::Requirement
326
328
  requirements:
327
329
  - - ">="