scout_apm 3.0.0.pre16 → 3.0.0.pre17
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 +4 -4
- data/CHANGELOG.markdown +22 -0
- data/README.markdown +15 -7
- data/lib/scout_apm/agent.rb +4 -7
- data/lib/scout_apm/agent_context.rb +1 -1
- data/lib/scout_apm/background_job_integrations/delayed_job.rb +0 -1
- data/lib/scout_apm/background_job_integrations/sidekiq.rb +0 -1
- data/lib/scout_apm/instruments/action_controller_rails_2.rb +0 -1
- data/lib/scout_apm/instruments/action_controller_rails_3_rails4.rb +0 -2
- data/lib/scout_apm/instruments/grape.rb +0 -1
- data/lib/scout_apm/instruments/resque.rb +0 -1
- data/lib/scout_apm/layer_converters/find_layer_by_type.rb +4 -0
- data/lib/scout_apm/logger.rb +16 -8
- data/lib/scout_apm/rack.rb +2 -2
- data/lib/scout_apm/server_integrations/passenger.rb +1 -1
- data/lib/scout_apm/tracked_request.rb +8 -15
- data/lib/scout_apm/version.rb +1 -1
- data/test/unit/background_job_integrations/sidekiq_test.rb +0 -3
- data/test/unit/logger_test.rb +67 -0
- data/test/unit/test_tracked_request.rb +8 -44
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2ca61b61ba4135b8ee89ffb1efb4946f0c0afa44
         | 
| 4 | 
            +
              data.tar.gz: d980d2baab58e6ceecf1d54aa97128180cf9052e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5bd058b09d66c99c304af71ca7343462d02dc588230253712462fdad6628f718bad8a33655de42f1eb27ae98e2cec39840f247173e4fe0cf1ef0110dbb727105
         | 
| 7 | 
            +
              data.tar.gz: 2cd9079153c0d8f050055ae62e7d3c18531b6e90e6d5a4e12661c0cd5e598ab930584229304d2a44017347f00cb2fada6e407bfbc5b54a8ce871e3df91147f3d
         | 
    
        data/CHANGELOG.markdown
    CHANGED
    
    | @@ -2,9 +2,31 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            * ScoutProf BETA
         | 
| 4 4 |  | 
| 5 | 
            +
            # 2.4.3
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Ensure a startup hook runs on forking webservers
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # 2.4.2
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            * Fix shutdown hook for Passenger
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # 2.4.1
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            * Fix logging on STDOUT only platforms (Heroku)
         | 
| 16 | 
            +
             | 
| 5 17 | 
             
            # 2.4.0
         | 
| 6 18 |  | 
| 7 19 | 
             
            * Rework agent startup sequence
         | 
| 20 | 
            +
            * Install all background job instrumentations if you're running more than one
         | 
| 21 | 
            +
            * Capture longer individual SQL statements
         | 
| 22 | 
            +
            * Capture multiple SQL statements if multiple are run during a single AR call.
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            # 2.3.5
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            * More robust recovery from stale layaway files
         | 
| 27 | 
            +
            * Quiet logging when hitting unusual layaway file limits
         | 
| 28 | 
            +
            * Better naming for Sidekiq delayed method jobs
         | 
| 29 | 
            +
            * Webrick is only required if actually needed
         | 
| 8 30 |  | 
| 9 31 | 
             
            # 2.3.4
         | 
| 10 32 |  | 
    
        data/README.markdown
    CHANGED
    
    | @@ -1,14 +1,21 @@ | |
| 1 | 
            -
            # ScoutApm
         | 
| 1 | 
            +
            # ScoutApm Ruby Agent
         | 
| 2 2 |  | 
| 3 | 
            -
            A Ruby gem for detailed Rails application performance analysis. Metrics are | 
| 3 | 
            +
            A Ruby gem for detailed Rails application performance analysis. Metrics are
         | 
| 4 | 
            +
            reported to [Scout](https://scoutapp.com), a hosted application monitoring
         | 
| 5 | 
            +
            service.
         | 
| 4 6 |  | 
| 5 7 | 
             
            ## Getting Started
         | 
| 6 8 |  | 
| 7 | 
            -
             | 
| 9 | 
            +
            Add the gem to your Gemfile
         | 
| 8 10 |  | 
| 9 | 
            -
                gem  | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 11 | 
            +
                gem 'scout_apm'
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Update your Gemfile
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                bundle install
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Signup for a [Scout](https://apm.scoutapp.com) account and put the provided
         | 
| 18 | 
            +
            config file at `RAILS_ROOT/config/scout_apm.yml`.
         | 
| 12 19 |  | 
| 13 20 | 
             
            Your config file should look like:
         | 
| 14 21 |  | 
| @@ -22,7 +29,8 @@ Your config file should look like: | |
| 22 29 |  | 
| 23 30 | 
             
            ## Docs
         | 
| 24 31 |  | 
| 25 | 
            -
            For the complete list of supported frameworks, Rubies,  | 
| 32 | 
            +
            For the complete list of supported frameworks, Rubies, configuration options
         | 
| 33 | 
            +
            and more, see our [help site](http://help.apm.scoutapp.com/).
         | 
| 26 34 |  | 
| 27 35 | 
             
            ## Help
         | 
| 28 36 |  | 
    
        data/lib/scout_apm/agent.rb
    CHANGED
    
    | @@ -48,13 +48,6 @@ module ScoutApm | |
| 48 48 | 
             
                  context.installed!
         | 
| 49 49 |  | 
| 50 50 | 
             
                  if ScoutApm::Agent::Preconditions.check?(context) || force
         | 
| 51 | 
            -
                    # XXX: Should this happen at application start?
         | 
| 52 | 
            -
                    # Should this ever happen after fork?
         | 
| 53 | 
            -
                    # We start a thread in this, which can screw stuff up when we then fork.
         | 
| 54 | 
            -
                    #
         | 
| 55 | 
            -
                    # Save it into a variable to prevent it from ever running twice
         | 
| 56 | 
            -
                    @app_server_load ||= AppServerLoad.new(context).run
         | 
| 57 | 
            -
             | 
| 58 51 | 
             
                    start
         | 
| 59 52 | 
             
                  end
         | 
| 60 53 | 
             
                end
         | 
| @@ -75,6 +68,9 @@ module ScoutApm | |
| 75 68 |  | 
| 76 69 | 
             
                  log_environment
         | 
| 77 70 |  | 
| 71 | 
            +
                  # Save it into a variable to prevent it from ever running twice
         | 
| 72 | 
            +
                  @app_server_load ||= AppServerLoad.new(context).run
         | 
| 73 | 
            +
             | 
| 78 74 | 
             
                  start_background_worker
         | 
| 79 75 | 
             
                end
         | 
| 80 76 |  | 
| @@ -124,6 +120,7 @@ module ScoutApm | |
| 124 120 |  | 
| 125 121 | 
             
                def should_load_instruments?
         | 
| 126 122 | 
             
                  return true if context.config.value('dev_trace')
         | 
| 123 | 
            +
                  return false unless context.config.value('monitor')
         | 
| 127 124 | 
             
                  context.environment.app_server_integration.found? || context.environment.background_job_integrations.any?
         | 
| 128 125 | 
             
                end
         | 
| 129 126 |  | 
| @@ -220,7 +220,7 @@ module ScoutApm | |
| 220 220 | 
             
                    {
         | 
| 221 221 | 
             
                      :log_level     => config.value('log_level'),
         | 
| 222 222 | 
             
                      :log_file_path => config.value('log_file_path'),
         | 
| 223 | 
            -
                      :stdout        => config.value('log_stdout') | 
| 223 | 
            +
                      :stdout        => config.value('log_stdout') || environment.platform_integration.log_to_stdout?,
         | 
| 224 224 | 
             
                      :stderr        => config.value('log_stderr'),
         | 
| 225 225 | 
             
                      :logger_class  => config.value('log_class'),
         | 
| 226 226 | 
             
                    }
         | 
| @@ -57,7 +57,6 @@ module ScoutApm | |
| 57 57 | 
             
                    req.context.add_user(:ip => request.remote_ip)
         | 
| 58 58 | 
             
                    req.set_headers(request.headers)
         | 
| 59 59 | 
             
                    req.start_layer( ScoutApm::Layer.new("Controller", "#{controller_path}/#{action_name}") )
         | 
| 60 | 
            -
                    req.web!
         | 
| 61 60 |  | 
| 62 61 | 
             
                    begin
         | 
| 63 62 | 
             
                      perform_action_without_scout_instruments(*args, &block)
         | 
| @@ -77,8 +77,6 @@ module ScoutApm | |
| 77 77 | 
             
                          req.context.add_user(:ip => request.remote_ip) rescue nil
         | 
| 78 78 | 
             
                          req.set_headers(request.headers)
         | 
| 79 79 |  | 
| 80 | 
            -
                          req.web!
         | 
| 81 | 
            -
             | 
| 82 80 | 
             
                          resolved_name = scout_action_name(*args)
         | 
| 83 81 | 
             
                          layer = ScoutApm::Layer.new("Controller", "#{controller_path}/#{resolved_name}")
         | 
| 84 82 |  | 
    
        data/lib/scout_apm/logger.rb
    CHANGED
    
    | @@ -40,7 +40,11 @@ module ScoutApm | |
| 40 40 | 
             
                def fatal(*args, &block); @logger.fatal(*args, &block); end
         | 
| 41 41 |  | 
| 42 42 | 
             
                def log_level=(level)
         | 
| 43 | 
            -
                  @logger.level = level
         | 
| 43 | 
            +
                  @logger.level = log_level_from_opts(level)
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def log_level
         | 
| 47 | 
            +
                  @logger.level
         | 
| 44 48 | 
             
                end
         | 
| 45 49 |  | 
| 46 50 | 
             
                def log_file_path
         | 
| @@ -48,11 +52,11 @@ module ScoutApm | |
| 48 52 | 
             
                end
         | 
| 49 53 |  | 
| 50 54 | 
             
                def stdout?
         | 
| 51 | 
            -
                  @opts[:stdout] || @opts[:log_file_path] == "STDOUT"
         | 
| 55 | 
            +
                  @opts[:stdout] || (@opts[:log_file_path] || "").upcase == "STDOUT"
         | 
| 52 56 | 
             
                end
         | 
| 53 57 |  | 
| 54 58 | 
             
                def stderr?
         | 
| 55 | 
            -
                  @opts[:stderr] || @opts[:log_file_path] == "STDERR"
         | 
| 59 | 
            +
                  @opts[:stderr] || (@opts[:log_file_path] || "").upcase == "STDERR"
         | 
| 56 60 | 
             
                end
         | 
| 57 61 |  | 
| 58 62 | 
             
                private
         | 
| @@ -86,13 +90,16 @@ module ScoutApm | |
| 86 90 | 
             
                  end
         | 
| 87 91 | 
             
                end
         | 
| 88 92 |  | 
| 89 | 
            -
                def log_level_from_opts
         | 
| 90 | 
            -
                   | 
| 93 | 
            +
                def log_level_from_opts(explicit=nil)
         | 
| 94 | 
            +
                  candidate = explicit || (@opts[:log_level] || "").downcase
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  case candidate
         | 
| 91 97 | 
             
                  when "debug" then ::Logger::DEBUG
         | 
| 92 98 | 
             
                  when "info" then ::Logger::INFO
         | 
| 93 99 | 
             
                  when "warn" then ::Logger::WARN
         | 
| 94 100 | 
             
                  when "error" then ::Logger::ERROR
         | 
| 95 101 | 
             
                  when "fatal" then ::Logger::FATAL
         | 
| 102 | 
            +
                  when ::Logger::DEBUG, ::Logger::INFO, ::Logger::WARN, ::Logger::ERROR, ::Logger::FATAL then candidate
         | 
| 96 103 | 
             
                  else ::Logger::INFO
         | 
| 97 104 | 
             
                  end
         | 
| 98 105 | 
             
                end
         | 
| @@ -116,11 +123,12 @@ module ScoutApm | |
| 116 123 | 
             
                # Check if this path is ok for a log file.
         | 
| 117 124 | 
             
                # Does it exist?
         | 
| 118 125 | 
             
                # Is it writable?
         | 
| 119 | 
            -
                # XXX: Implement
         | 
| 120 126 | 
             
                def validate_path(candidate)
         | 
| 121 | 
            -
                   | 
| 122 | 
            -
                end
         | 
| 127 | 
            +
                  return false if candidate.nil?
         | 
| 123 128 |  | 
| 129 | 
            +
                  directory = File.dirname(candidate)
         | 
| 130 | 
            +
                  File.writable?(directory)
         | 
| 131 | 
            +
                end
         | 
| 124 132 |  | 
| 125 133 | 
             
                class DefaultFormatter < ::Logger::Formatter
         | 
| 126 134 | 
             
                  def call(severity, time, progname, msg)
         | 
    
        data/lib/scout_apm/rack.rb
    CHANGED
    
    | @@ -10,8 +10,8 @@ module ScoutApm | |
| 10 10 | 
             
                  req.annotate_request(:uri => env["REQUEST_PATH"]) rescue nil
         | 
| 11 11 | 
             
                  req.context.add_user(:ip => env["REMOTE_ADDR"]) rescue nil
         | 
| 12 12 |  | 
| 13 | 
            -
                   | 
| 14 | 
            -
                  req.start_layer( | 
| 13 | 
            +
                  layer = ScoutApm::Layer.new('Controller', endpoint_name)
         | 
| 14 | 
            +
                  req.start_layer(layer)
         | 
| 15 15 |  | 
| 16 16 | 
             
                  begin
         | 
| 17 17 | 
             
                    yield
         | 
| @@ -29,7 +29,7 @@ module ScoutApm | |
| 29 29 | 
             
                    # This does run when a process stops.
         | 
| 30 30 | 
             
                    PhusionPassenger.on_event(:stopping_worker_process) do
         | 
| 31 31 | 
             
                      logger.debug "Passenger is stopping a worker process, shutting down the agent."
         | 
| 32 | 
            -
                      ScoutApm::Agent.instance. | 
| 32 | 
            +
                      ScoutApm::Agent.instance.stop_background_worker
         | 
| 33 33 | 
             
                    end
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 |  | 
| @@ -26,10 +26,6 @@ module ScoutApm | |
| 26 26 | 
             
                # Can be nil if we never reach a Rails Controller
         | 
| 27 27 | 
             
                attr_reader :headers
         | 
| 28 28 |  | 
| 29 | 
            -
                # What kind of request is this? A trace of a web request, or a background job?
         | 
| 30 | 
            -
                # Use job! and web! to set, and job? and web? to query
         | 
| 31 | 
            -
                attr_reader :request_type
         | 
| 32 | 
            -
             | 
| 33 29 | 
             
                # This maintains a lookup hash of Layer names and call counts. It's used to trigger fetching a backtrace on n+1 calls.
         | 
| 34 30 | 
             
                # Note that layer names might not be Strings - can alse be Utils::ActiveRecordMetricName. Also, this would fail for layers
         | 
| 35 31 | 
             
                # with same names across multiple types.
         | 
| @@ -249,20 +245,14 @@ module ScoutApm | |
| 249 245 | 
             
                  @headers = headers
         | 
| 250 246 | 
             
                end
         | 
| 251 247 |  | 
| 252 | 
            -
                 | 
| 253 | 
            -
                  @request_type = "job"
         | 
| 254 | 
            -
                end
         | 
| 255 | 
            -
             | 
| 248 | 
            +
                # This request is a job transaction iff it has a 'Job' layer
         | 
| 256 249 | 
             
                def job?
         | 
| 257 | 
            -
                   | 
| 258 | 
            -
                end
         | 
| 259 | 
            -
             | 
| 260 | 
            -
                def web!
         | 
| 261 | 
            -
                  @request_type = "web"
         | 
| 250 | 
            +
                  layer_finder.job != nil
         | 
| 262 251 | 
             
                end
         | 
| 263 252 |  | 
| 253 | 
            +
                # This request is a web transaction iff it has a 'Controller' layer
         | 
| 264 254 | 
             
                def web?
         | 
| 265 | 
            -
                   | 
| 255 | 
            +
                  layer_finder.controller != nil
         | 
| 266 256 | 
             
                end
         | 
| 267 257 |  | 
| 268 258 | 
             
                def instant?
         | 
| @@ -306,7 +296,6 @@ module ScoutApm | |
| 306 296 | 
             
                    LayerConverters::SlowRequestConverter,
         | 
| 307 297 | 
             
                  ]
         | 
| 308 298 |  | 
| 309 | 
            -
                  layer_finder = LayerConverters::FindLayerByType.new(self)
         | 
| 310 299 | 
             
                  walker = LayerConverters::DepthFirstWalker.new(self.root_layer)
         | 
| 311 300 | 
             
                  converters = converters.map do |klass|
         | 
| 312 301 | 
             
                    instance = klass.new(@agent_context, self, layer_finder, @store)
         | 
| @@ -328,6 +317,10 @@ module ScoutApm | |
| 328 317 | 
             
                  end
         | 
| 329 318 | 
             
                end
         | 
| 330 319 |  | 
| 320 | 
            +
                def layer_finder
         | 
| 321 | 
            +
                  @layer_finder ||= LayerConverters::FindLayerByType.new(self)
         | 
| 322 | 
            +
                end
         | 
| 323 | 
            +
             | 
| 331 324 | 
             
                # Ensure the background worker thread is up & running - a fallback if other
         | 
| 332 325 | 
             
                # detection doesn't achieve this at boot.
         | 
| 333 326 | 
             
                def ensure_background_worker
         | 
    
        data/lib/scout_apm/version.rb
    CHANGED
    
    
| @@ -11,7 +11,6 @@ class SidekiqTest < Minitest::Test | |
| 11 11 | 
             
              def test_middleware_call_happy_path
         | 
| 12 12 | 
             
                fake_request = mock
         | 
| 13 13 | 
             
                fake_request.expects(:annotate_request)
         | 
| 14 | 
            -
                fake_request.expects(:job!)
         | 
| 15 14 | 
             
                fake_request.expects(:start_layer).twice
         | 
| 16 15 | 
             
                fake_request.expects(:stop_layer).twice
         | 
| 17 16 | 
             
                fake_request.expects(:error!).never
         | 
| @@ -29,7 +28,6 @@ class SidekiqTest < Minitest::Test | |
| 29 28 | 
             
              def test_middleware_call_job_exception
         | 
| 30 29 | 
             
                fake_request = mock
         | 
| 31 30 | 
             
                fake_request.expects(:annotate_request)
         | 
| 32 | 
            -
                fake_request.expects(:job!)
         | 
| 33 31 | 
             
                fake_request.expects(:start_layer).twice
         | 
| 34 32 | 
             
                fake_request.expects(:stop_layer).twice
         | 
| 35 33 | 
             
                fake_request.expects(:error!)
         | 
| @@ -47,7 +45,6 @@ class SidekiqTest < Minitest::Test | |
| 47 45 | 
             
              def test_middleware_call_edge_cases
         | 
| 48 46 | 
             
                fake_request = mock
         | 
| 49 47 | 
             
                fake_request.expects(:annotate_request)
         | 
| 50 | 
            -
                fake_request.expects(:job!)
         | 
| 51 48 | 
             
                fake_request.expects(:start_layer).twice
         | 
| 52 49 | 
             
                fake_request.expects(:stop_layer).twice
         | 
| 53 50 | 
             
                fake_request.expects(:error!)
         | 
| @@ -0,0 +1,67 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'scout_apm/logger'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class LoggerTest < Minitest::Test
         | 
| 6 | 
            +
              def setup
         | 
| 7 | 
            +
                @env_root = Pathname.new(File.dirname(__FILE__)) + "../../"
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def test_detect_stdout
         | 
| 11 | 
            +
                logger = ScoutApm::Logger.new("", { :log_file_path => "STDOUT"})
         | 
| 12 | 
            +
                assert logger.stdout?
         | 
| 13 | 
            +
                assert_equal STDOUT, logger.log_destination
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # and lowercase
         | 
| 16 | 
            +
                logger = ScoutApm::Logger.new("", { :log_file_path => "stdout"})
         | 
| 17 | 
            +
                assert logger.stdout?
         | 
| 18 | 
            +
                assert_equal STDOUT, logger.log_destination
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_force_stdout
         | 
| 22 | 
            +
                logger = ScoutApm::Logger.new("", { :stdout => true })
         | 
| 23 | 
            +
                assert logger.stdout?
         | 
| 24 | 
            +
                assert_equal STDOUT, logger.log_destination
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              def test_pick_log_file_with_no_options
         | 
| 28 | 
            +
                logger = ScoutApm::Logger.new(@env_root, { })
         | 
| 29 | 
            +
                assert_equal (@env_root + "log" + "scout_apm.log").to_s, logger.log_destination
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              def test_pick_log_file_with_different_dir
         | 
| 33 | 
            +
                logger = ScoutApm::Logger.new(@env_root, { :log_file_path => "/tmp" })
         | 
| 34 | 
            +
                assert_equal "/tmp/scout_apm.log", logger.log_destination
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def test_pick_log_file_invalid_dir
         | 
| 38 | 
            +
                logger = ScoutApm::Logger.new(@env_root, { :log_file_path => "/not_a_real_dir" })
         | 
| 39 | 
            +
                assert_equal STDOUT, logger.log_destination
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def test_pick_log_dir_not_writable
         | 
| 43 | 
            +
                Dir.mktmpdir { |dir|
         | 
| 44 | 
            +
                  # An unwritable dir
         | 
| 45 | 
            +
                  FileUtils.chmod(0000, dir)
         | 
| 46 | 
            +
                  logger = ScoutApm::Logger.new(@env_root, { :log_file_path => dir })
         | 
| 47 | 
            +
                  assert_equal STDOUT, logger.log_destination
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  # so it can be deleted
         | 
| 50 | 
            +
                  FileUtils.chmod(0700, dir)
         | 
| 51 | 
            +
                }
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              def test_set_log_level
         | 
| 55 | 
            +
                logger = ScoutApm::Logger.new(@env_root, { :log_level => "debug" })
         | 
| 56 | 
            +
                assert_equal ::Logger::DEBUG, logger.log_level
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              def test_set_log_level_after
         | 
| 60 | 
            +
                logger = ScoutApm::Logger.new(@env_root, { :log_level => "debug" })
         | 
| 61 | 
            +
                logger.log_level = "info"
         | 
| 62 | 
            +
                assert_equal ::Logger::INFO, logger.log_level
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                logger.log_level = ::Logger::ERROR
         | 
| 65 | 
            +
                assert_equal ::Logger::ERROR, logger.log_level
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         | 
| @@ -3,7 +3,7 @@ require 'test_helper' | |
| 3 3 | 
             
            class TrackedRequestDumpAndLoadTest < Minitest::Test
         | 
| 4 4 | 
             
              # TrackedRequest must be marshalable
         | 
| 5 5 | 
             
              def test_marshal_dump_load
         | 
| 6 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 6 | 
            +
                tr = ScoutApm::TrackedRequest.new(ScoutApm::AgentContext.new, ScoutApm::FakeStore.new)
         | 
| 7 7 | 
             
                tr.prepare_to_dump!
         | 
| 8 8 |  | 
| 9 9 | 
             
                dumped = Marshal.dump(tr)
         | 
| @@ -12,58 +12,22 @@ class TrackedRequestDumpAndLoadTest < Minitest::Test | |
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 14 | 
             
              def test_restore_store
         | 
| 15 | 
            -
                 | 
| 16 | 
            -
                 | 
| 17 | 
            -
                 | 
| 15 | 
            +
                faux_store = ScoutApm::FakeStore.new
         | 
| 16 | 
            +
                context = ScoutApm::AgentContext.new
         | 
| 17 | 
            +
                tr = ScoutApm::TrackedRequest.new(context, faux_store)
         | 
| 18 | 
            +
                assert_equal faux_store, tr.instance_variable_get("@store")
         | 
| 18 19 |  | 
| 19 20 | 
             
                tr.prepare_to_dump!
         | 
| 20 21 | 
             
                assert_nil tr.instance_variable_get("@store")
         | 
| 21 22 |  | 
| 22 23 | 
             
                tr.restore_store
         | 
| 23 | 
            -
                assert_equal  | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
            end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            class TrackedRequestFlagsTest < Minitest::Test
         | 
| 28 | 
            -
              def test_set_web
         | 
| 29 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 30 | 
            -
                assert_false tr.web?
         | 
| 31 | 
            -
                tr.web!
         | 
| 32 | 
            -
                assert tr.web?
         | 
| 33 | 
            -
              end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
              def test_set_job
         | 
| 36 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 37 | 
            -
                assert ! tr.job?
         | 
| 38 | 
            -
                tr.job!
         | 
| 39 | 
            -
                assert tr.job?
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              def test_set_error
         | 
| 43 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 44 | 
            -
                assert_false tr.error?
         | 
| 45 | 
            -
                tr.error!
         | 
| 46 | 
            -
                assert tr.error?
         | 
| 47 | 
            -
              end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
              def test_set_error_and_web
         | 
| 50 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 51 | 
            -
                assert_false tr.error?
         | 
| 52 | 
            -
                assert_false tr.web?
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                tr.web!
         | 
| 55 | 
            -
                assert_false tr.error?
         | 
| 56 | 
            -
                assert tr.web?
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                tr.error!
         | 
| 59 | 
            -
                assert tr.error?
         | 
| 60 | 
            -
                assert tr.web?
         | 
| 24 | 
            +
                assert_equal context.store, tr.instance_variable_get("@store")
         | 
| 61 25 | 
             
              end
         | 
| 62 26 | 
             
            end
         | 
| 63 27 |  | 
| 64 28 | 
             
            class TrackedRequestLayerManipulationTest < Minitest::Test
         | 
| 65 29 | 
             
              def test_start_layer
         | 
| 66 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 30 | 
            +
                tr = ScoutApm::TrackedRequest.new(ScoutApm::AgentContext.new, ScoutApm::FakeStore.new)
         | 
| 67 31 | 
             
                tr.start_layer(ScoutApm::Layer.new("Foo", "Bar"))
         | 
| 68 32 |  | 
| 69 33 | 
             
                assert_equal "Foo", tr.current_layer.type
         | 
| @@ -74,7 +38,7 @@ class TrackedRequestLayerManipulationTest < Minitest::Test | |
| 74 38 | 
             
                controller_layer = ScoutApm::Layer.new("Controller", "users/index")
         | 
| 75 39 | 
             
                ar_layer = ScoutApm::Layer.new("ActiveRecord", "Users#find")
         | 
| 76 40 |  | 
| 77 | 
            -
                tr = ScoutApm::TrackedRequest.new(ScoutApm::FakeStore.new)
         | 
| 41 | 
            +
                tr = ScoutApm::TrackedRequest.new(ScoutApm::AgentContext.new, ScoutApm::FakeStore.new)
         | 
| 78 42 | 
             
                tr.start_layer(controller_layer)
         | 
| 79 43 | 
             
                tr.start_layer(ar_layer)
         | 
| 80 44 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: scout_apm
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3.0.0. | 
| 4 | 
            +
              version: 3.0.0.pre17
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Derek Haynes
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2018-01- | 
| 12 | 
            +
            date: 2018-01-18 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: minitest
         | 
| @@ -335,6 +335,7 @@ files: | |
| 335 335 | 
             
            - test/unit/layer_converters/metric_converter_test.rb
         | 
| 336 336 | 
             
            - test/unit/layer_converters/stubs.rb
         | 
| 337 337 | 
             
            - test/unit/limited_layer_test.rb
         | 
| 338 | 
            +
            - test/unit/logger_test.rb
         | 
| 338 339 | 
             
            - test/unit/metric_set_test.rb
         | 
| 339 340 | 
             
            - test/unit/remote/test_message.rb
         | 
| 340 341 | 
             
            - test/unit/remote/test_router.rb
         | 
| @@ -399,6 +400,7 @@ test_files: | |
| 399 400 | 
             
            - test/unit/layer_converters/metric_converter_test.rb
         | 
| 400 401 | 
             
            - test/unit/layer_converters/stubs.rb
         | 
| 401 402 | 
             
            - test/unit/limited_layer_test.rb
         | 
| 403 | 
            +
            - test/unit/logger_test.rb
         | 
| 402 404 | 
             
            - test/unit/metric_set_test.rb
         | 
| 403 405 | 
             
            - test/unit/remote/test_message.rb
         | 
| 404 406 | 
             
            - test/unit/remote/test_router.rb
         |