appoptics_apm 4.6.0 → 4.7.0

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
- SHA1:
3
- metadata.gz: cbe2fe3eb37b24986942279b151f1b75bcc1d992
4
- data.tar.gz: 44afa0ee08b1835b75bfab6bfd18380d43bb9df4
2
+ SHA256:
3
+ metadata.gz: dbff2f2eda2d2c65cf7dbac060957eb6505b3eba743f11dc415f6b06c67217cb
4
+ data.tar.gz: 6008d6151ab8eb3b29aa465ebb131eef38139d159587e35d5d68dd07de716104
5
5
  SHA512:
6
- metadata.gz: ea8bbfb90ddee8a6eeac9acba93eda3a66645ca409ded1d15fbb73ef2e9c05f14f0b0052072826a4f5e9704311e5509c528a4de613a902edfe646b8210bae19d
7
- data.tar.gz: 4282a917fc4d523c471bb2d322f5bff18348b0154d5f18562fad85c8f777e421f091390f11c78adf4e19d75fe7da34c7ac8b9d1a8457239fa89c5b90836fe2ef
6
+ metadata.gz: 1247aa650e5ff98074d479248c01ff11c8b18f0c63dac47987f79b75efe7518987f43af8ce9adf63cf50df7b9f8d9024deb59da1b9d4b3bd9be56c9d70252114
7
+ data.tar.gz: 7196764529dfde97d4ca10871d9506a21e411454e5acdd0218945241de2acb22b1ece9e38876ed054d586ed695b276d602ebe116b1f08ff2cf5a98c9537fd5de
data/.yardopts CHANGED
@@ -2,3 +2,4 @@
2
2
  --readme yardoc_frontpage.md
3
3
  lib/appoptics_apm/sdk/tracing.rb
4
4
  lib/appoptics_apm/sdk/custom_metrics.rb
5
+ lib/appoptics_apm/sdk/current_trace.rb
data/README.md CHANGED
@@ -372,9 +372,9 @@ manually build this C extension for the gem to function.
372
372
  To make this simpler, we've included a few rake tasks to automate this process:
373
373
 
374
374
  ```bash
375
+ rake clean # make sure no old stuff is around
376
+ rake fetch_ext_deps # download c-files
375
377
  rake compile # Build the gem's c extension
376
- rake distclean # Remove all built files and extensions
377
- rake recompile # Rebuild the gem's c extension
378
378
  ```
379
379
 
380
380
  To see the code related to the C extension, take a look at `ext/oboe_metal/extconf.rb` for details.
data/Rakefile CHANGED
@@ -63,13 +63,13 @@ end
63
63
  desc "Run all test suites defined by travis"
64
64
  task "docker_tests" do
65
65
  Dir.chdir('test/run_tests')
66
- exec('docker-compose run ruby_appoptics /code/ruby-appoptics/test/run_tests/ruby_setup.sh test')
66
+ exec('docker-compose run ruby_appoptics /code/ruby-appoptics/test/run_tests/ruby_setup.sh test --remove-orphans')
67
67
  end
68
68
 
69
69
  desc "Start docker container for testing and debugging"
70
70
  task "docker" do
71
71
  Dir.chdir('test/run_tests')
72
- exec('docker-compose run ruby_appoptics /code/ruby-appoptics/test/run_tests/ruby_setup.sh bash')
72
+ exec('docker-compose run ruby_appoptics /code/ruby-appoptics/test/run_tests/ruby_setup.sh bash --remove-orphans')
73
73
  end
74
74
 
75
75
  desc "Stop all containers that were started for testing and debugging"
@@ -63,6 +63,8 @@ def do_traced_work
63
63
  end
64
64
  end
65
65
 
66
+ # Example with logging
66
67
  AppOpticsAPM::SDK.start_trace('outer_span_2') do
68
+ AppopticsAPM.logger.warn "Hello World!"
67
69
  do_traced_work
68
70
  end
@@ -24,7 +24,18 @@ if ENV['APPOPTICS_FROM_S3'].to_s.downcase == 'true'
24
24
  else
25
25
  ao_path = File.join('https://files.appoptics.com/c-lib', version)
26
26
  end
27
- ao_arch = `ldd --version 2>&1` =~ /musl/ ? 'alpine-x86_64' : 'x86_64'
27
+
28
+ ao_arch = 'x86_64'
29
+ if File.exist?('/etc/alpine-release')
30
+ version = open('/etc/alpine-release').read.chomp
31
+ ao_arch =
32
+ if Gem::Version.new(version) < Gem::Version.new('3.9')
33
+ 'alpine-libressl-x86_64'
34
+ else # openssl
35
+ 'alpine-x86_64'
36
+ end
37
+ end
38
+
28
39
  ao_clib = "liboboe-1.0-#{ao_arch}.so.0.0.0"
29
40
  ao_item = File.join(ao_path, ao_clib)
30
41
  ao_checksum_item = "#{ao_item}.sha256"
@@ -88,7 +99,6 @@ if success
88
99
  create_makefile('oboe_noop', 'noop')
89
100
 
90
101
  elsif have_library('oboe', 'oboe_config_get_revision', 'oboe.h')
91
-
92
102
  $libs = append_library($libs, 'oboe')
93
103
  $libs = append_library($libs, 'stdc++')
94
104
 
@@ -1 +1 @@
1
- 4.0.1
1
+ 4.1.0
@@ -12,6 +12,8 @@ module AppOpticsAPM
12
12
 
13
13
  require_relative './sdk/tracing'
14
14
  require_relative './sdk/custom_metrics'
15
+ require_relative './sdk/current_trace'
16
+ require_relative './sdk/logging' # to make sure it is loaded <- not very elegant
15
17
 
16
18
  extend AppOpticsAPM::SDK::Tracing
17
19
  extend AppOpticsAPM::SDK::CustomMetrics
@@ -50,6 +50,7 @@ module AppOpticsAPM
50
50
  require 'appoptics_apm/frameworks/rails/inst/action_view'
51
51
  require 'appoptics_apm/frameworks/rails/inst/action_view_30'
52
52
  require 'appoptics_apm/frameworks/rails/inst/active_record'
53
+ require 'appoptics_apm/frameworks/rails/inst/logger_formatters'
53
54
 
54
55
  AppOpticsAPM.logger.info "[appoptics_apm/rails] AppOpticsAPM gem #{AppOpticsAPM::Version::STRING} successfully loaded."
55
56
  end
@@ -0,0 +1,27 @@
1
+ # Copyright (c) 2019 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ if AppOpticsAPM.loaded && defined?(ActiveSupport::Logger::SimpleFormatter)
5
+ module ActiveSupport
6
+ class Logger
7
+ class SimpleFormatter
8
+ # even though SimpleFormatter inherits from Logger,
9
+ # this will not append traceId twice,
10
+ # because SimpleFormatter#call does not call super
11
+ prepend AppOpticsAPM::Logger::Formatter
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+
18
+ if AppOpticsAPM.loaded && defined?(ActiveSupport::TaggedLogging::Formatter)
19
+ module ActiveSupport
20
+ module TaggedLogging
21
+ module Formatter
22
+ # TODO figure out ancestors situation
23
+ prepend AppOpticsAPM::Logger::Formatter
24
+ end
25
+ end
26
+ end
27
+ end
@@ -38,7 +38,6 @@ module AppOpticsAPM
38
38
  @tags = grpc_tags('SERVER_STREAMING', metadata[:method] || metadata_to_send[:method])
39
39
  AppOpticsAPM::API.log_entry('grpc-client', @tags)
40
40
  metadata['x-trace'] = AppOpticsAPM::Context.toString if AppOpticsAPM::Context.isValid
41
- AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
42
41
 
43
42
  patch_receive_and_check_status # need to patch this so that log_exit can be called after the enum is consumed
44
43
 
@@ -58,7 +57,6 @@ module AppOpticsAPM
58
57
  @tags = grpc_tags('BIDI_STREAMING', metadata[:method] || metadata_to_send[:method])
59
58
  AppOpticsAPM::API.log_entry('grpc-client', @tags)
60
59
  metadata['x-trace'] = AppOpticsAPM::Context.toString if AppOpticsAPM::Context.isValid
61
- AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
62
60
 
63
61
  patch_set_input_stream_done
64
62
 
@@ -79,7 +77,6 @@ module AppOpticsAPM
79
77
  tags = grpc_tags(type, metadata[:method] || metadata_to_send[:method])
80
78
  AppOpticsAPM::SDK.trace('grpc-client', tags) do
81
79
  metadata['x-trace'] = AppOpticsAPM::Context.toString if AppOpticsAPM::Context.isValid
82
- AppOpticsAPM::SDK.set_transaction_name(metadata[:method]) if AppOpticsAPM.transaction_name.nil?
83
80
  begin
84
81
  send(without, req, metadata: metadata)
85
82
  ensure
@@ -0,0 +1,49 @@
1
+ # Copyright (c) 2019 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ require 'logger'
5
+
6
+ module AppOpticsAPM
7
+ module Logger
8
+ module Formatter
9
+
10
+ def call(severity, time, progname, msg)
11
+ return super if AppOpticsAPM::Config[:log_traceId] == :never
12
+
13
+ msg = insert_trace_id(msg)
14
+ super
15
+ end
16
+
17
+ private
18
+
19
+ def insert_trace_id(msg)
20
+ return msg if msg =~ /ao(=>{:|\.){1}traceId/
21
+
22
+ current_trace = AppOpticsAPM::SDK.current_trace
23
+ if current_trace.log?
24
+ case msg
25
+ when ::String
26
+ msg.strip.empty? ? msg : insert_before_empty_lines(msg, current_trace.for_log)
27
+ when ::Exception
28
+ # conversion to String copied from Logger::Formatter private method #msg2str
29
+ "#{msg.message} (#{msg.class}) #{current_trace.for_log}\n" <<
30
+ (msg.backtrace || []).join("\n")
31
+ end
32
+ end
33
+ end
34
+
35
+ def insert_before_empty_lines(msg, for_log)
36
+ stripped = msg.rstrip
37
+ "#{stripped} #{for_log}#{msg[stripped.length..-1]}"
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ if AppOpticsAPM.loaded
44
+ class Logger
45
+ class Formatter
46
+ prepend AppOpticsAPM::Logger::Formatter
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,28 @@
1
+ # Copyright (c) 2019 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ require_relative 'logger_formatter'
5
+
6
+ module AppOpticsAPM
7
+ module Logging
8
+ module LogEvent
9
+ include AppOpticsAPM::Logger::Formatter # provides #insert_trace_id
10
+
11
+ def initialize(logger, level, data, caller_tracing )
12
+ return super if AppOpticsAPM::Config[:log_traceId] == :never
13
+
14
+ data = insert_trace_id(data)
15
+ super
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+
22
+ if AppOpticsAPM.loaded && defined?(Logging::LogEvent)
23
+ module Logging
24
+ class LogEvent
25
+ prepend AppOpticsAPM::Logging::LogEvent
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2019 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ require_relative 'logger_formatter'
5
+
6
+ if AppOpticsAPM.loaded && defined?(Lumberjack::Formatter)
7
+ module Lumberjack
8
+ class Formatter
9
+ prepend AppOpticsAPM::Logger::Formatter
10
+ end
11
+ end
12
+ end
13
+
@@ -7,38 +7,8 @@ module AppOpticsAPM
7
7
  class << self
8
8
  attr_accessor :logger
9
9
  end
10
-
11
- # TODO ME currently unused, keeping it around for xtrace logging epic
12
- # class Logger
13
- # # Fatal message
14
- # def fatal(msg, exception = nil)
15
- # AppOpticsAPM.logger.fatal(msg) if AppOpticsAPM.logger
16
- # end
17
- #
18
- # # Error message
19
- # def error(msg, exception = nil)
20
- # AppOpticsAPM.logger.error(msg) if AppOpticsAPM.logger
21
- # end
22
- #
23
- # # Warn message
24
- # def warn(msg, exception = nil)
25
- # AppOpticsAPM.logger.warn(msg) if AppOpticsAPM.logger
26
- # end
27
- #
28
- # # Info message
29
- # def info(msg, exception = nil)
30
- # AppOpticsAPM.logger.info(msg) if AppOpticsAPM.logger
31
- # end
32
- #
33
- # # Debug message
34
- # def debug(msg, exception = nil)
35
- # AppOpticsAPM.logger.debug(msg) if AppOpticsAPM.logger
36
- # end
37
- #
38
- # end
39
10
  end
40
11
 
41
- # Using the currently defined Logger, e.g. the Rails logger
42
12
  AppOpticsAPM.logger = Logger.new(STDERR)
43
13
  # set log level to INFO to be consistent with the c-lib, DEBUG would be default
44
14
  AppOpticsAPM.logger.level = Logger::INFO
@@ -13,7 +13,7 @@ module AppOpticsAPM
13
13
  # the noop version returns an empty string
14
14
  #
15
15
  def self.toString
16
- ''
16
+ '2B0000000000000000000000000000000000000000000000000000000000'
17
17
  end
18
18
 
19
19
  ##
@@ -0,0 +1,81 @@
1
+ #--
2
+ # Copyright (c) 2019 SolarWinds, LLC.
3
+ # All rights reserved.
4
+ #++
5
+
6
+ module AppOpticsAPM
7
+ module SDK
8
+
9
+ module CurrentTrace
10
+
11
+ # Creates an instance of {TraceId} with instance methods {TraceId#id}, {TraceId#for_log}
12
+ # and {TraceId#hash_for_log}.
13
+ #
14
+ # === Example:
15
+ #
16
+ # trace = AppOpticsAPM::SDK.current_trace
17
+ # trace.id # '7435A9FE510AE4533414D425DADF4E180D2B4E36-0'
18
+ # trace.for_log # 'ao.traceId=7435A9FE510AE4533414D425DADF4E180D2B4E36-0' or '' depends on Config
19
+ # trace.hash_for_log # { ao: { traceId: '7435A9FE510AE4533414D425DADF4E180D2B4E36-0 } } or {} depends on Config
20
+ #
21
+ # Configure traceId injection with lograge:
22
+ #
23
+ # Lograge.custom_options = lambda do |event|
24
+ # AppOpticsAPM::SDK.current_trace.hash_for_log
25
+ # end
26
+ #
27
+ def current_trace
28
+ TraceId.new
29
+ end
30
+
31
+ # @attr id the current traceId, it looks like: '7435A9FE510AE4533414D425DADF4E180D2B4E36-0'
32
+ # and ends in '-1' if the request is sampled and '-0' otherwise.
33
+ # Results in '0000000000000000000000000000000000000000-0'
34
+ # if the CurrentTrace instance was created outside of the context
35
+ # of a request.
36
+ class TraceId
37
+ attr_reader :id
38
+
39
+ def initialize
40
+ if AppOpticsAPM::Config[:log_traceId] == :never
41
+ @id = '0000000000000000000000000000000000000000-0'
42
+ else
43
+ @xtrace = AppOpticsAPM::Context.toString
44
+ task_id = AppOpticsAPM::XTrace.task_id(@xtrace)
45
+ sampled = AppOpticsAPM::XTrace.sampled?(@xtrace)
46
+ @id = "#{task_id}-#{sampled ? 1 : 0}"
47
+ end
48
+ end
49
+
50
+ # for_log returns a string in the format 'traceId=<current_trace.id>' or ''.
51
+ # An empty string is returned depending on the setting for
52
+ # <tt>AppOpticsAPM::Config[:log_traceId]</tt>, which can be :never,
53
+ # :sampled, :traced, or :always.
54
+ #
55
+ def for_log
56
+ @for_log ||= log? ? "ao.traceId=#{@id}" : ''
57
+ end
58
+
59
+ def hash_for_log
60
+ @hash_for_log ||= log? ? { ao: { traceId: @id } } : {}
61
+ end
62
+
63
+ def log? # should the traceId be added to the log?
64
+ case AppOpticsAPM::Config[:log_traceId]
65
+ when :never, nil
66
+ false
67
+ when :always
68
+ AppOpticsAPM::XTrace.ok?(@xtrace)
69
+ when :traced
70
+ AppOpticsAPM::XTrace.valid?(@xtrace)
71
+ when :sampled
72
+ AppOpticsAPM::XTrace.sampled?(@xtrace)
73
+ end
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ extend CurrentTrace
80
+ end
81
+ end
@@ -0,0 +1,37 @@
1
+ # Copyright (c) 2019 SolarWinds, LLC.
2
+ # All rights reserved.
3
+ #
4
+
5
+ module AppOpticsAPM
6
+ module SDK
7
+ module Logging
8
+
9
+ # Log an information event in the current span
10
+ #
11
+ # a possible use-case is to collect extra information during the execution of a request
12
+ #
13
+ # === Arguments:
14
+ # * +opts+ - (optional) hash containing key/value pairs that will be reported with this span.
15
+ #
16
+ def log_info(opts)
17
+ AppOpticsAPM::API.log_info(AppOpticsAPM.layer, opts)
18
+ end
19
+
20
+ # Log an exception/error event in the current span
21
+ #
22
+ # this may be helpful to track problems when an exception is rescued
23
+ #
24
+ # === Arguments:
25
+ # * +exception+ - an exception, must respond to :message and :backtrace
26
+ # * +opts+ - (optional) hash containing key/value pairs that will be reported with this span.
27
+ #
28
+ def log_exception(exception, opts)
29
+ AppOpticsAPM::API.log_exception(AppOpticsAPM.layer, exception, opts)
30
+ end
31
+
32
+ end
33
+
34
+ extend Logging
35
+
36
+ end
37
+ end
@@ -7,7 +7,7 @@ module AppOpticsAPM
7
7
  # appoptics_apm.gemspec during gem build process
8
8
  module Version
9
9
  MAJOR = 4
10
- MINOR = 6
10
+ MINOR = 7
11
11
  PATCH = 0
12
12
 
13
13
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
@@ -5,12 +5,15 @@ module AppOpticsAPM
5
5
  ##
6
6
  # Methods to act on, manipulate or investigate an X-Trace
7
7
  # value
8
+ #
9
+ # TODO add unit tests
8
10
  module XTrace
9
11
  class << self
10
12
  ##
11
13
  # AppOpticsAPM::XTrace.valid?
12
14
  #
13
- # Perform basic validation on a potential X-Trace ID
15
+ # Perform basic validation on a potential X-Trace Id
16
+ # returns true if it is from a valid context
14
17
  #
15
18
  def valid?(xtrace)
16
19
  # Shouldn't be nil
@@ -20,9 +23,7 @@ module AppOpticsAPM
20
23
  return false if (xtrace =~ /^2b0000000/i) == 0
21
24
 
22
25
  # Valid X-Trace IDs have a length of 60 bytes and start with '2b'
23
- return false unless xtrace.length == 60 && (xtrace =~ /^2b/i) == 0
24
-
25
- true
26
+ xtrace.length == 60 && (xtrace =~ /^2b/i) == 0
26
27
  rescue StandardError => e
27
28
  AppOpticsAPM.logger.debug "[appoptics_apm/xtrace] #{e.message}"
28
29
  AppOpticsAPM.logger.debug e.backtrace
@@ -33,12 +34,23 @@ module AppOpticsAPM
33
34
  valid?(xtrace) && xtrace[59].to_i & 1 == 1
34
35
  end
35
36
 
37
+ def ok?(xtrace)
38
+ # Valid X-Trace IDs have a length of 60 bytes and start with '2b'
39
+ xtrace && xtrace.length == 60 && (xtrace =~ /^2b/i) == 0
40
+ rescue StandardError => e
41
+ AppOpticsAPM.logger.debug "[appoptics_apm/xtrace] #{e.message}"
42
+ AppOpticsAPM.logger.debug e.backtrace
43
+ false
44
+ end
45
+
36
46
  def set_sampled(xtrace)
37
47
  xtrace[59] = (xtrace[59].hex | 1).to_s(16).upcase
48
+ xtrace
38
49
  end
39
50
 
40
51
  def unset_sampled(xtrace)
41
52
  xtrace[59] = (~(~xtrace[59].hex | 1)).to_s(16).upcase
53
+ xtrace
42
54
  end
43
55
 
44
56
  ##
@@ -47,7 +59,7 @@ module AppOpticsAPM
47
59
  # Extract and return the task_id portion of an X-Trace ID
48
60
  #
49
61
  def task_id(xtrace)
50
- return nil unless AppOpticsAPM::XTrace.valid?(xtrace)
62
+ return nil unless ok?(xtrace)
51
63
 
52
64
  xtrace[2..41]
53
65
  rescue StandardError => e
@@ -79,7 +91,7 @@ module AppOpticsAPM
79
91
  # across servers and applications.
80
92
  #
81
93
  # Remote requests can return a X-Trace header in which case we want
82
- # to pickup on and continue the context in most cases.
94
+ # to pickup and continue the context in most cases.
83
95
  #
84
96
  # +start+ is the context just before the outgoing request
85
97
  # +finish+ is the context returned to us (as an HTTP response header
@@ -90,7 +102,8 @@ module AppOpticsAPM
90
102
 
91
103
  # Assure that we received back a valid X-Trace with the same task_id
92
104
  # and the sampling bit is set, otherwise it is a response from a non-sampling service
93
- if AppOpticsAPM::XTrace.task_id(start) == AppOpticsAPM::XTrace.task_id(finish) && AppOpticsAPM::XTrace.sampled?(finish)
105
+ if AppOpticsAPM::XTrace.task_id(start) == AppOpticsAPM::XTrace.task_id(finish) &&
106
+ AppOpticsAPM::XTrace.sampled?(finish)
94
107
  AppOpticsAPM::Context.fromString(finish)
95
108
  else
96
109
  AppOpticsAPM.logger.debug "[XTrace] Sampling flag unset or mismatched start and finish ids:\n#{start}\n#{finish}"
@@ -54,17 +54,37 @@ if defined?(AppOpticsAPM::Config)
54
54
  #
55
55
  # By default tracing is set to :enabled, the other option is :disabled.
56
56
  # :enabled means that sampling will be done according to the current
57
- # sampling rate. :disabled means that there is no sampling.
57
+ # sampling rate and metrics are reported.
58
+ # :disabled means that there is no sampling and metrics are not reported.
58
59
  #
59
60
  # The values :always and :never are deprecated
60
61
  #
61
62
  AppOpticsAPM::Config[:tracing_mode] = :enabled
62
63
 
64
+ #
65
+ # Trace Context in Logs
66
+ #
67
+ # Configure if and when the traceId should be included in application logs.
68
+ # Common Ruby and Rails loggers are auto-instrumented, so that they can include
69
+ # the current traceId in log messages.
70
+ #
71
+ # The added string will look like: "ao.traceId=7435A9FE510AE4533414D425DADF4E180D2B4E36-0"
72
+ # It ends in '-1' if the request is sampled and in '-0' otherwise.
73
+ #
74
+ # The following options are available:
75
+ # :never (default)
76
+ # :sampled only include the traceId of sampled requests
77
+ # :traced include the traceId for all traced requests
78
+ # :always always add a traceId, it will be '0000000000000000000000000000000000000000-0'
79
+ # when there is no tracing context.
80
+ #
81
+ AppOpticsAPM::Config[:log_traceId] = :never
82
+
63
83
  #
64
84
  # Prepend domain to transaction name
65
85
  #
66
86
  # If this is set to `true` transaction names will be composed as `my.host.com/controller.action` instead of
67
- # `controller.action`. This configuration applies to all transaction names, whether deducted by the instrumentation
87
+ # `controller.action`. This configuration applies to all transaction names, whether deduced by the instrumentation
68
88
  # or implicitly set.
69
89
  #
70
90
  AppOpticsAPM::Config[:transaction_name][:prepend_domain] = false
@@ -87,9 +107,8 @@ if defined?(AppOpticsAPM::Config)
87
107
  # Please comment out if no filtering is desired, e.g. your static
88
108
  # assets are served by the web server and not the application
89
109
  #
90
- # This configuration allows creating a regexp for paths for which no metrics or
91
- # traces should get recorded. These requests should not include transactions
92
- # with outbound calls, for which metrics and traces aren't desired either.
110
+ # This configuration allows creating a regexp for paths that should be excluded
111
+ # from appoptics processing.
93
112
  #
94
113
  # For example:
95
114
  # - static assets that aren't served by the web server, or
@@ -120,10 +139,14 @@ if defined?(AppOpticsAPM::Config)
120
139
  # The matching of settings to urls happens before routes are applied.
121
140
  # The url is extracted from the env argument passed to rack: `env['PATH_INFO']`
122
141
  #
123
- # :extensions takes an array of strings for filtering (not regular expressions!)
124
- # :regexp is a regular expression that is applied to the incoming path
125
- # :opts (optional) nil(default) or Regexp::IGNORECASE (options for regexp)
126
- # :tracing defaults to :disabled, can be set to :enabled to override
142
+ # and the hashes within the :url list either:
143
+ # :extensions takes an array of strings for filtering (not regular expressions!)
144
+ # :tracing defaults to :disabled, can be set to :enabled to override
145
+ # the global :disabled setting
146
+ # or:
147
+ # :regexp is a regular expression that is applied to the incoming path
148
+ # :opts (optional) nil(default) or Regexp::IGNORECASE (options for regexp)
149
+ # :tracing defaults to :disabled, can be set to :enabled to override
127
150
  # the global :disabled setting
128
151
  #
129
152
  # Be careful not to add too many :regexp configurations as they will slow
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appoptics_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.0
4
+ version: 4.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maia Engeli
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-03-28 00:00:00.000000000 Z
13
+ date: 2019-04-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -170,6 +170,7 @@ files:
170
170
  - lib/appoptics_apm/frameworks/rails/inst/connection_adapters/postgresql.rb
171
171
  - lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils.rb
172
172
  - lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils5x.rb
173
+ - lib/appoptics_apm/frameworks/rails/inst/logger_formatters.rb
173
174
  - lib/appoptics_apm/frameworks/sinatra.rb
174
175
  - lib/appoptics_apm/inst/bunny-client.rb
175
176
  - lib/appoptics_apm/inst/bunny-consumer.rb
@@ -183,6 +184,9 @@ files:
183
184
  - lib/appoptics_apm/inst/grpc_server.rb
184
185
  - lib/appoptics_apm/inst/http.rb
185
186
  - lib/appoptics_apm/inst/httpclient.rb
187
+ - lib/appoptics_apm/inst/logger_formatter.rb
188
+ - lib/appoptics_apm/inst/logging_log_event.rb
189
+ - lib/appoptics_apm/inst/lumberjack_formatter.rb
186
190
  - lib/appoptics_apm/inst/memcached.rb
187
191
  - lib/appoptics_apm/inst/mongo.rb
188
192
  - lib/appoptics_apm/inst/mongo2.rb
@@ -205,7 +209,9 @@ files:
205
209
  - lib/appoptics_apm/noop/context.rb
206
210
  - lib/appoptics_apm/noop/metadata.rb
207
211
  - lib/appoptics_apm/ruby.rb
212
+ - lib/appoptics_apm/sdk/current_trace.rb
208
213
  - lib/appoptics_apm/sdk/custom_metrics.rb
214
+ - lib/appoptics_apm/sdk/logging.rb
209
215
  - lib/appoptics_apm/sdk/tracing.rb
210
216
  - lib/appoptics_apm/support/transaction_metrics.rb
211
217
  - lib/appoptics_apm/support/transaction_settings.rb
@@ -248,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
254
  version: '0'
249
255
  requirements: []
250
256
  rubyforge_project:
251
- rubygems_version: 2.6.11
257
+ rubygems_version: 2.7.3
252
258
  signing_key:
253
259
  specification_version: 4
254
260
  summary: AppOptics APM performance instrumentation gem for Ruby