Skip to content

Commit

Permalink
log sampling config and when ignoring request
Browse files Browse the repository at this point in the history
  • Loading branch information
Mitch Hartweg committed Jan 6, 2025
1 parent f9b1c6e commit c66dcd5
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 4 deletions.
1 change: 1 addition & 0 deletions lib/scout_apm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ module ScoutApm
require 'scout_apm/app_server_load'

require 'scout_apm/ignored_uris.rb'
require 'scout_apm/sampling.rb'
require 'scout_apm/utils/active_record_metric_name'
require 'scout_apm/utils/backtrace_parser'
require 'scout_apm/utils/installed_gems'
Expand Down
4 changes: 4 additions & 0 deletions lib/scout_apm/agent_context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ def logger
@logger ||= LoggerFactory.build(config, environment)
end

def sampling
@sampling ||= ScoutApm::Sampling.new(config)
end

def ignored_uris
@ignored_uris ||= ScoutApm::IgnoredUris.new(config.value('ignore'))
end
Expand Down
13 changes: 10 additions & 3 deletions lib/scout_apm/sampling.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ def initialize(config)
@sample_endpoints = individual_sample_to_hash(config.value('sample_endpoints'))
@ignore_uri_regex = create_uri_regex(config.value('ignore_endpoints'))
@sample_uri_regex = create_uri_regex(sample_endpoints.keys) if sample_endpoints
@ignore_jobs = config.value('ignore_jobs').split(',') if config.value('ignore_jobs')
@ignore_jobs = config.value('ignore_jobs')
@sample_jobs = individual_sample_to_hash(config.value('sample_jobs'))
# TODO make this safer/smarter
logger.info("Sampling Initialized: global_sample_rate: #{global_sample_rate}, sample_endpoints: #{sample_endpoints}, ignore_uri_regex: #{ignore_uri_regex}, sample_uri_regex: #{sample_uri_regex}, ignore_jobs: #{ignore_jobs}, sample_jobs: #{sample_jobs}")
end

def ignore?(transaction)
Expand Down Expand Up @@ -40,7 +41,7 @@ def ignore?(transaction)
end

def individual_sample_to_hash(sampling_config)
return nil if sampling_config.nil?
return nil if sampling_config.empty?
# config looks like ['/foo:50','/bar:100']. parse it into hash of string: integer
sample_hash = {}
sampling_config.each do |sample|
Expand All @@ -52,7 +53,7 @@ def individual_sample_to_hash(sampling_config)
end

def create_uri_regex(prefixes)
return nil if prefixes.nil?
return nil if prefixes.empty?
regexes = Array(prefixes).
reject{|prefix| prefix == ""}.
map {|prefix| %r{\A#{prefix}} }
Expand Down Expand Up @@ -81,5 +82,11 @@ def sample?(rate)
rand * 100 > rate
end

private

def logger
ScoutApm::Agent.instance.logger
end

end
end
6 changes: 5 additions & 1 deletion lib/scout_apm/tracked_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,11 @@ def record!
restore_from_dump! if @agent_context.nil?

# Bail out early if the user asked us to ignore this uri
return if @agent_context.ignored_uris.ignore?(annotations[:uri])
# return if @agent_context.ignored_uris.ignore?(annotations[:uri])
if @agent_context.sampling.ignore?(self)
logger.debug("Ignoring request due to sampling")
return
end

apply_name_override

Expand Down

0 comments on commit c66dcd5

Please sign in to comment.