app_profiler 0.2.3 → 0.2.4

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: f312a0076c72716017684a2438e0a255250fda160f5e7450813869da8bcac922
4
- data.tar.gz: cbec087431d3a5271599bb6e6b2238aa4e67d7f51c79e7d1f3a50a3da3d12feb
3
+ metadata.gz: 8d37c7a09664237b5de220c0eeb2e06e5d71e962c475d8b5d48379908f1fcde6
4
+ data.tar.gz: de727300e3a86062ba2924aee795553098bd5f0fa1b03bf9b422d17caa99b90b
5
5
  SHA512:
6
- metadata.gz: 55c7acf18a8c4933e348e80ac6f58201797c1f2935b928c1749fca01fec1d65bf4414648240aeac65fdd5044838565b46a002c4ea87f6472c543478946221c3e
7
- data.tar.gz: a5b18127dff76a6482f30d17b18bb9dcb4f3db42a5c0434b6dc764e57f6383ba86417fa1fa9f5e6ce0dcae007aa0470a294f566346c07c87b30a733021451483
6
+ metadata.gz: 67bc3d4a7da8dd12063cae5d82c8cb8643133b36cbe42456dd903b1182b4b2c6687073cddcdcb33b84cc76a27ce7d8a2ea3fc135f6f462591bc90e02fd87cb62
7
+ data.tar.gz: 7efb402266de2269237d9d170d94d7689146a94e1a721488f462638ca18a0d8c4335e3a3c68452791a554067214429b9ce7903dfb5cb8fea293607db8bb07974
@@ -50,7 +50,6 @@ module AppProfiler
50
50
 
51
51
  def profile_params(params)
52
52
  return params if params.valid?
53
-
54
53
  return unless AppProfiler.profile_sampler_enabled
55
54
 
56
55
  AppProfiler::Sampler.profile_params(params, AppProfiler.profile_sampler_config)
@@ -5,19 +5,20 @@ require "app_profiler/sampler/vernier_config"
5
5
  module AppProfiler
6
6
  module Sampler
7
7
  class Config
8
- attr_reader :sample_rate, :paths, :cpu_interval, :backends_probability
8
+ attr_reader :sample_rate, :targets, :cpu_interval, :backends_probability
9
9
 
10
10
  SAMPLE_RATE = 0.001 # 0.1%
11
- PATHS = ["/"]
11
+ TARGETS = ["/"]
12
12
  BACKEND_PROBABILITES = { stackprof: 1.0, vernier: 0.0 }
13
13
  @backends = {}
14
14
 
15
15
  def initialize(sample_rate: SAMPLE_RATE,
16
- paths: PATHS,
16
+ targets: TARGETS,
17
17
  backends_probability: BACKEND_PROBABILITES,
18
18
  backends_config: {
19
19
  stackprof: StackprofConfig.new,
20
- })
20
+ },
21
+ paths: nil)
21
22
 
22
23
  if sample_rate < 0.0 || sample_rate > 1.0
23
24
  raise ArgumentError, "sample_rate must be between 0 and 1"
@@ -25,8 +26,10 @@ module AppProfiler
25
26
 
26
27
  raise ArgumentError, "mode probabilities must sum to 1" unless backends_probability.values.sum == 1.0
27
28
 
29
+ ActiveSupport::Deprecation.new.warn("passing paths is deprecated, use targets instead") if paths
30
+
28
31
  @sample_rate = sample_rate
29
- @paths = paths
32
+ @targets = paths || targets
30
33
  @backends_config = backends_config
31
34
  @backends_probability = backends_probability
32
35
  end
@@ -5,18 +5,21 @@ module AppProfiler
5
5
  module Sampler
6
6
  class << self
7
7
  def profile_params(request, config)
8
- return unless sample?(config, request)
8
+ profile_params_for(request.path, config)
9
+ end
10
+
11
+ def profile_params_for(target, config)
12
+ return unless sample?(config, target)
9
13
 
10
14
  get_profile_params(config)
11
15
  end
12
16
 
13
17
  private
14
18
 
15
- def sample?(config, request)
19
+ def sample?(config, target)
16
20
  return false if Kernel.rand > config.sample_rate
17
21
 
18
- path = request.path
19
- return false unless config.paths.any? { |p| path.match?(p) }
22
+ return false unless config.targets.any? { |t| target.match?(t) }
20
23
 
21
24
  true
22
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppProfiler
4
- VERSION = "0.2.3"
4
+ VERSION = "0.2.4"
5
5
  end
data/lib/app_profiler.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support"
3
4
  require "active_support/core_ext/class"
4
5
  require "active_support/core_ext/module"
5
6
  require "logger"
@@ -63,7 +64,7 @@ module AppProfiler
63
64
  mattr_reader :profile_enqueue_failure, default: nil
64
65
  mattr_reader :after_process_queue, default: nil
65
66
  mattr_accessor :forward_metadata_on_upload, default: false
66
- mattr_accessor :profile_sampler_enabled, default: false
67
+
67
68
  mattr_accessor :profile_sampler_config
68
69
 
69
70
  class << self
@@ -116,6 +117,28 @@ module AppProfiler
116
117
  @profiler_backend = new_profiler_backend
117
118
  end
118
119
 
120
+ def profile_sampler_enabled=(value)
121
+ if value.is_a?(Proc)
122
+ raise ArgumentError,
123
+ "profile_sampler_enabled must be a proc or a lambda that accepts no argument" if value.arity != 0
124
+ else
125
+ raise ArgumentError, "Must be TrueClass or FalseClass" unless [TrueClass, FalseClass].include?(value.class)
126
+ end
127
+
128
+ @profile_sampler_enabled = value
129
+ end
130
+
131
+ def profile_sampler_enabled
132
+ return false unless defined?(@profile_sampler_enabled)
133
+
134
+ @profile_sampler_enabled.is_a?(Proc) ? @profile_sampler_enabled.call : @profile_sampler_enabled
135
+ rescue => e
136
+ logger.error(
137
+ "[AppProfiler.profile_sampler_enabled] exception: #{e}, message: #{e.message}",
138
+ )
139
+ false
140
+ end
141
+
119
142
  def backend_for(backend_name)
120
143
  if vernier_supported? &&
121
144
  backend_name == AppProfiler::Backend::VernierBackend.name
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gannon McGibbon
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2024-08-28 00:00:00.000000000 Z
16
+ date: 2024-09-06 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activesupport
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  - !ruby/object:Gem::Version
185
185
  version: '0'
186
186
  requirements: []
187
- rubygems_version: 3.5.17
187
+ rubygems_version: 3.5.18
188
188
  signing_key:
189
189
  specification_version: 4
190
190
  summary: Collect performance profiles for your Rails application.