promenade 0.12.1 → 0.12.3

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