promenade 0.12.1 → 0.12.3

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: bb2dbe0d103ff6ea073b522ad86a19e45157b39cb543bcd28b19bea3e67e61db
4
- data.tar.gz: 996c08318d59dd7566a0672270ee7309f23582b972e6956b878b6bb09f871d1f
3
+ metadata.gz: 1ce2f5d337f4a1fe6de094092a79d85d228dd6b4efa0f0b690f61e0f20db747e
4
+ data.tar.gz: b4b552462b63b3b502206e8bf795ec42d461f97c1d078d21a8fb530f2d07fa88
5
5
  SHA512:
6
- metadata.gz: d2229ff8f71723344362f38ad8c2828cfb36d1d23b1b0b78a6feb29133e9d6a31a6baa5acbb62a7412f01f1825e81165079163e7bbc3ce72117f54286bf0d188
7
- data.tar.gz: 7aef5ad799f1be6d8bc7465bb30b91fc5a506e3c088f7d24b15c01bfb21abb1b7d187c115ff6a34865a2840e98c6446f20adf2a14571988a558347574253c355
6
+ metadata.gz: ff7629ea8b250ed7ebb2d42b0fd4eb77f8c662f2144ff7a0bd751b363b8cff662306dd2d96d581c6cce7d4e7c58f4e8a4981b9d985b09b36575d30da5dc148ff
7
+ data.tar.gz: 4f6ba22211d7309034f61e2f66444f9dfac8b13a0a329c83445af8ef615224ceb76fb238a4e507357f28b278b35eb5b6e9ee9e98a82599f8e3204a0b634246db
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- promenade (0.12.1)
4
+ promenade (0.12.3)
5
5
  actionpack
6
6
  activesupport (> 6.0, < 8.0)
7
7
  prometheus-client-mmap (~> 1.1)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "promenade"
5
+ require "promenade/yjit/stats"
6
+ require "prometheus/client"
7
+ require "prometheus/client/formats/text"
8
+
9
+ Promenade.setup
10
+ Promenade::YJIT::Stats.instrument
11
+ puts Prometheus::Client::Formats::Text.marshal_multiprocess
@@ -2,11 +2,13 @@ require "promenade/setup"
2
2
  require "promenade/engine"
3
3
  require "promenade/client/rack/http_request_duration_collector"
4
4
  require "promenade/client/rack/http_request_queue_time_collector"
5
+ require "promenade/yjit/middleware"
5
6
 
6
7
  module Promenade
7
8
  class Railtie < ::Rails::Railtie
8
9
  initializer "promenade.configure_rails_initialization" do
9
10
  Promenade.setup
11
+ Rails.application.config.middleware.use Promenade::YJIT::Middlware if defined? ::RubyVM::YJIT
10
12
  Rails.application.config.middleware.insert_after ActionDispatch::ShowExceptions,
11
13
  Promenade::Client::Rack::HTTPRequestDurationCollector
12
14
  Rails.application.config.middleware.insert 0,
@@ -1,3 +1,3 @@
1
1
  module Promenade
2
- VERSION = "0.12.1".freeze
2
+ VERSION = "0.12.3".freeze
3
3
  end
@@ -0,0 +1,22 @@
1
+ require "promenade/yjit/stats"
2
+
3
+ module Promenade
4
+ module YJIT
5
+ class Middlware
6
+ RACK_AFTER_REPLY = "rack.after_reply".freeze
7
+
8
+ def initialize(app)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ if env.key?(RACK_AFTER_REPLY)
14
+ env[RACK_AFTER_REPLY] << -> {
15
+ ::Promenade::YJIT::Stats.instrument
16
+ }
17
+ end
18
+ @app.call(env)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ module Promenade
2
+ module YJIT
3
+ class Stats
4
+ RUNTIME_STATS = %i(
5
+ code_region_size
6
+ ratio_in_yjit
7
+ ).freeze
8
+
9
+ Promenade.gauge :ruby_yjit_code_region_size do
10
+ doc "Ruby YJIT code size"
11
+ end
12
+
13
+ Promenade.gauge :ruby_yjit_ratio_in_yjit do
14
+ doc "Shows the ratio of YJIT-executed instructions in %"
15
+ end
16
+
17
+ def self.instrument
18
+ return unless defined?(::RubyVM::YJIT) && ::RubyVM::YJIT.enabled?
19
+
20
+ ::RubyVM::YJIT.runtime_stats.select { |stat, _| RUNTIME_STATS.include? stat }.each do |stat, value|
21
+ Promenade.metric(:"ruby_yjit_#{stat}").set({}, value)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
data/lib/promenade.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require "promenade/version"
2
2
  require "promenade/setup"
3
3
  require "promenade/configuration"
4
- require "promenade/railtie" if defined? Rails::Railtie
5
4
  require "promenade/prometheus"
6
5
 
7
6
  module Promenade
@@ -25,3 +24,5 @@ module Promenade
25
24
  end
26
25
  end
27
26
  end
27
+
28
+ require "promenade/railtie" if defined? Rails::Railtie
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promenade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.12.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ed Robinson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-09 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -283,6 +283,7 @@ files:
283
283
  - bin/integration_test
284
284
  - bin/rails
285
285
  - bin/setup
286
+ - bin/yjit_intergration_test
286
287
  - exe/promenade
287
288
  - lib/promenade.rb
288
289
  - lib/promenade/client/rack/exception_handler.rb
@@ -316,6 +317,8 @@ files:
316
317
  - lib/promenade/waterdrop/message_subscriber.rb
317
318
  - lib/promenade/waterdrop/statistics_subscriber.rb
318
319
  - lib/promenade/waterdrop/subscriber.rb
320
+ - lib/promenade/yjit/middleware.rb
321
+ - lib/promenade/yjit/stats.rb
319
322
  - promenade.gemspec
320
323
  homepage: https://github.com/errm/promenade
321
324
  licenses:
@@ -337,7 +340,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
337
340
  - !ruby/object:Gem::Version
338
341
  version: '0'
339
342
  requirements: []
340
- rubygems_version: 3.4.10
343
+ rubygems_version: 3.5.3
341
344
  signing_key:
342
345
  specification_version: 4
343
346
  summary: Promenade makes it simple to instrument Ruby apps for prometheus scraping