appsignal 2.10.7-java → 2.10.11-java

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 645a4ec88a4246ec1e45109ae9c8f5727f95500472707ab16785e3ccbbc93a34
4
- data.tar.gz: 750530a66bf499dd130a52987a7df7428ce55a0bb7d034fceb9603850ff4648d
3
+ metadata.gz: d565cfd8db2282ca0a5cebc1bda0485d5fff26381fa4ebf0d6e39bf4bf6d060d
4
+ data.tar.gz: befbc7775e674cd682e8090c5f638fddeddef0eb6b2bac6ca35acc212cadea94
5
5
  SHA512:
6
- metadata.gz: d1f3152cb80c32dc0ae8485d2352b6a63af135dc14dc12ba9f7089a2ab3f84d39379d77304d02a9d3b87a0f1650692bd585b058fa0ba696f2a31ac75207a386f
7
- data.tar.gz: 11ff3543333791541973623f246e015f8f186a8941a0260d5025e1e2201d9ab657ef78ada39ef3a7998f11258f423157743b726d3d4e62c94777977659b4853a
6
+ metadata.gz: a42301c4ff83f2ed0ae6808ef2ef53f5439c9635b708f2297ad5dbaef9407269c9e8e79c3e014b1ca51e5752315a20a80da8a930a3b57dd43a22984bde069690
7
+ data.tar.gz: 36aa97a5d728eaeb4269a94766f3ca7a2917bb6ef90dd55ad7704ce6b753c702036613c910db07c8d43f0c9463067ab5672886f4b3e50526ecc078efba526743
@@ -11,7 +11,7 @@ agent:
11
11
  os_image: ubuntu1804
12
12
  auto_cancel:
13
13
  running:
14
- when: branch != 'master' AND branch != 'develop'
14
+ when: branch != 'main' AND branch != 'develop'
15
15
  global_job_config:
16
16
  env_vars:
17
17
  - name: _BUNDLER_CACHE
@@ -36,6 +36,7 @@ global_job_config:
36
36
  - cache restore $_BUNDLER_CACHE-bundler-$RUBY_VERSION-$GEMSET-$(checksum $BUNDLE_GEMFILE),$_BUNDLER_CACHE-bundler-$RUBY_VERSION-$GEMSET,$_BUNDLER_CACHE-bundler-$RUBY_VERSION
37
37
  - cache restore $_GEMS_CACHE-gems-$RUBY_VERSION-$(checksum $BUNDLE_GEMFILE),$_GEMS_CACHE-gems-$RUBY_VERSION
38
38
  - "./support/install_deps"
39
+ - bundle config set clean 'true'
39
40
  - "./support/bundler_wrapper install --jobs=3 --retry=3"
40
41
  epilogue:
41
42
  on_pass:
@@ -43,6 +44,11 @@ global_job_config:
43
44
  - cache store $_BUNDLER_CACHE-bundler-$RUBY_VERSION-$GEMSET-$(checksum $BUNDLE_GEMFILE)
44
45
  .bundle
45
46
  - cache store $_GEMS_CACHE-gems-$RUBY_VERSION-$(checksum $BUNDLE_GEMFILE) $HOME/.gem
47
+ on_fail:
48
+ commands:
49
+ - "[ -e ext/install.report ] && cat ext/install.report || echo 'No ext/install.report
50
+ file found'"
51
+ - "[ -f ext/mkmf.log ] && cat ext/mkmf.log || echo 'No ext/mkmf.log file found'"
46
52
  blocks:
47
53
  - name: Validation
48
54
  dependencies: []
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ # 2.10.11
4
+ - Fix extension install report status output in `appsignal diagnose`. PR #636
5
+ - Support setting a specific configuration file to load with the
6
+ `Appsignal::Config` initializer. PR #638
7
+
8
+ # 2.10.10
9
+ - Bump agent to v-4548c88. PR #634
10
+ - Fix issue with host metrics values being reported as "Infinity".
11
+
12
+ # 2.10.9
13
+ - Use http proxy if configured when downloading agent. PR #606
14
+ - Clear event details cache every 48 hours.
15
+ Commit eb5e899db69fcd7cfa221567bfd6ac04f2654c9c
16
+ - Add support for Resque ActiveJob queue time reporting. PR #616
17
+
18
+ ## 2.10.8
19
+ - Fix failed checksum error log. PR #609
20
+ - Fix DelayedJob action name detection for objects that listen to the `[]`
21
+ method and return a non-String value. #611
22
+ - CI test build improvements. PR #607, #608, #614
23
+
3
24
  ## 2.10.7
4
25
  - Revert fix for compatibility with the `http_logger` gem. PR #604.
5
26
  For more information, see issue #603 about our reasoning and discussion.
data/README.md CHANGED
@@ -9,7 +9,7 @@ issues.
9
9
  - [Ruby code documentation][ruby-doc]
10
10
  - [Support][contact]
11
11
 
12
- [![Build status](https://appsignal.semaphoreci.com/badges/appsignal-ruby/branches/master.svg)](https://appsignal.semaphoreci.com/projects/appsignal-ruby)
12
+ [![Build status](https://appsignal.semaphoreci.com/badges/appsignal-ruby/branches/main.svg)](https://appsignal.semaphoreci.com/projects/appsignal-ruby)
13
13
  [![Gem Version](https://badge.fury.io/rb/appsignal.svg)](http://badge.fury.io/rb/appsignal)
14
14
  [![Code Climate](https://codeclimate.com/github/appsignal/appsignal.png)](https://codeclimate.com/github/appsignal/appsignal)
15
15
 
@@ -183,7 +183,7 @@ installing the AppSignal C-extension.
183
183
  # Gemfile
184
184
  gem "appsignal",
185
185
  :git => "https://github.com/appsignal/appsignal-ruby.git",
186
- :branch => "master"
186
+ :branch => "main"
187
187
  ```
188
188
 
189
189
  When you need to use a git source of the gem in your JRuby install, you'll need
@@ -242,12 +242,12 @@ a number of different Ruby versions.
242
242
 
243
243
  This gem uses [Semantic Versioning][semver].
244
244
 
245
- The `master` branch corresponds to the current stable release of the gem.
245
+ The `main` branch corresponds to the current stable release of the gem.
246
246
 
247
247
  The `develop` branch is used for development of features that will end up in
248
248
  the next minor release.
249
249
 
250
- Open a Pull Request on the `master` branch if you're fixing a bug. For new new
250
+ Open a Pull Request on the `main` branch if you're fixing a bug. For new new
251
251
  features, open a Pull Request on the `develop` branch.
252
252
 
253
253
  Every stable and unstable release is tagged in git with a version tag.
@@ -29,7 +29,7 @@ Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
29
29
  gem.metadata = {
30
30
  "bug_tracker_uri" => "https://github.com/appsignal/appsignal-ruby/issues",
31
31
  "changelog_uri" =>
32
- "https://github.com/appsignal/appsignal-ruby/blob/master/CHANGELOG.md",
32
+ "https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md",
33
33
  "documentation_uri" => "https://docs.appsignal.com/ruby/",
34
34
  "homepage_uri" => "https://docs.appsignal.com/ruby/",
35
35
  "source_code_uri" => "https://github.com/appsignal/appsignal-ruby"
@@ -10,8 +10,8 @@ semaphore: # Default `.semaphore/semaphore.yml` contents
10
10
  # Cancel all running and queued workflows before this one
11
11
  auto_cancel:
12
12
  running:
13
- # Ignore master AND develop branch as we want it to build all workflows
14
- when: "branch != 'master' AND branch != 'develop'"
13
+ # Ignore main AND develop branch as we want it to build all workflows
14
+ when: "branch != 'main' AND branch != 'develop'"
15
15
 
16
16
  global_job_config:
17
17
  env_vars:
@@ -37,12 +37,17 @@ semaphore: # Default `.semaphore/semaphore.yml` contents
37
37
  - cache restore $_BUNDLER_CACHE-bundler-$RUBY_VERSION-$GEMSET-$(checksum $BUNDLE_GEMFILE),$_BUNDLER_CACHE-bundler-$RUBY_VERSION-$GEMSET,$_BUNDLER_CACHE-bundler-$RUBY_VERSION
38
38
  - cache restore $_GEMS_CACHE-gems-$RUBY_VERSION-$(checksum $BUNDLE_GEMFILE),$_GEMS_CACHE-gems-$RUBY_VERSION
39
39
  - ./support/install_deps
40
+ - bundle config set clean 'true'
40
41
  - ./support/bundler_wrapper install --jobs=3 --retry=3
41
42
  epilogue:
42
43
  on_pass:
43
44
  commands:
44
45
  - cache store $_BUNDLER_CACHE-bundler-$RUBY_VERSION-$GEMSET-$(checksum $BUNDLE_GEMFILE) .bundle
45
46
  - cache store $_GEMS_CACHE-gems-$RUBY_VERSION-$(checksum $BUNDLE_GEMFILE) $HOME/.gem
47
+ on_fail:
48
+ commands:
49
+ - "[ -e ext/install.report ] && cat ext/install.report || echo 'No ext/install.report file found'"
50
+ - "[ -f ext/mkmf.log ] && cat ext/mkmf.log || echo 'No ext/mkmf.log file found'"
46
51
 
47
52
  blocks:
48
53
  - name: Validation
@@ -1,70 +1,70 @@
1
1
  ---
2
- version: 96b684b
2
+ version: 4548c88
3
3
  mirrors:
4
4
  - https://appsignal-agent-releases.global.ssl.fastly.net
5
5
  - https://d135dj0rjqvssy.cloudfront.net
6
6
  triples:
7
7
  x86_64-darwin:
8
8
  static:
9
- checksum: 6278d03abdcacde207e210374601b0a98eabace8cbc9fb74dffea3c18fc8a252
9
+ checksum: 322340b402d7750c107bc2c83be46598b3ec0baab27ab7083c6b49dde236cd45
10
10
  filename: appsignal-x86_64-darwin-all-static.tar.gz
11
11
  dynamic:
12
- checksum: b0ad069bbff68acde7ef19de47938fa786771bae4821c757718f1894b9654a93
12
+ checksum: e92cfc0eda7101a1f08b080233ee6f4385fe32a555b31fd62ab13e904686fbc8
13
13
  filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
14
14
  universal-darwin:
15
15
  static:
16
- checksum: 6278d03abdcacde207e210374601b0a98eabace8cbc9fb74dffea3c18fc8a252
16
+ checksum: 322340b402d7750c107bc2c83be46598b3ec0baab27ab7083c6b49dde236cd45
17
17
  filename: appsignal-x86_64-darwin-all-static.tar.gz
18
18
  dynamic:
19
- checksum: b0ad069bbff68acde7ef19de47938fa786771bae4821c757718f1894b9654a93
19
+ checksum: e92cfc0eda7101a1f08b080233ee6f4385fe32a555b31fd62ab13e904686fbc8
20
20
  filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
21
21
  i686-linux:
22
22
  static:
23
- checksum: f3e79a575241a50d7968fe4743c4f4e5aebb840e0b8664d055383caf696d5d38
23
+ checksum: '08addb14f53856cc1befcc4428bef7541e04ea733deb4bf600904cc780de95f5'
24
24
  filename: appsignal-i686-linux-all-static.tar.gz
25
25
  dynamic:
26
- checksum: 0df11c9fe85c9c94336dfb4df788032c78eda1ea648f98e8c1e4e213258816e1
26
+ checksum: c0c2b3a8ea9e32e686e089101c2f2b4533686eb183f4f30b9ab90cc452222bf0
27
27
  filename: appsignal-i686-linux-all-dynamic.tar.gz
28
28
  x86-linux:
29
29
  static:
30
- checksum: f3e79a575241a50d7968fe4743c4f4e5aebb840e0b8664d055383caf696d5d38
30
+ checksum: '08addb14f53856cc1befcc4428bef7541e04ea733deb4bf600904cc780de95f5'
31
31
  filename: appsignal-i686-linux-all-static.tar.gz
32
32
  dynamic:
33
- checksum: 0df11c9fe85c9c94336dfb4df788032c78eda1ea648f98e8c1e4e213258816e1
33
+ checksum: c0c2b3a8ea9e32e686e089101c2f2b4533686eb183f4f30b9ab90cc452222bf0
34
34
  filename: appsignal-i686-linux-all-dynamic.tar.gz
35
35
  i686-linux-musl:
36
36
  static:
37
- checksum: 07ab5749b532f1cc6cb45a3334fd950f6d15edacbe6d1bfe25af75b24df73cd1
37
+ checksum: b9d3419bcca5a2fe07179af29b8e0fd26df73be46b18e9edaf1049d162eefed4
38
38
  filename: appsignal-i686-linux-musl-all-static.tar.gz
39
39
  x86-linux-musl:
40
40
  static:
41
- checksum: 07ab5749b532f1cc6cb45a3334fd950f6d15edacbe6d1bfe25af75b24df73cd1
41
+ checksum: b9d3419bcca5a2fe07179af29b8e0fd26df73be46b18e9edaf1049d162eefed4
42
42
  filename: appsignal-i686-linux-musl-all-static.tar.gz
43
43
  x86_64-linux:
44
44
  static:
45
- checksum: d0e8f48973bca7d783d654404617bb5ab4f47756deb6805c4876bfcda83981cd
45
+ checksum: 4befb33b621cb1d273b5dec9f3395271d4ecfe1d637d5f311c80bac105a06b4b
46
46
  filename: appsignal-x86_64-linux-all-static.tar.gz
47
47
  dynamic:
48
- checksum: aff7569b04416cd40440d228c5b9881b860e1ecf597bc996ac02c2735f49d993
48
+ checksum: c3696467fcb00aee14041b30f827524634babe3fd2f16bd20320d3f28fb11582
49
49
  filename: appsignal-x86_64-linux-all-dynamic.tar.gz
50
50
  x86_64-linux-musl:
51
51
  static:
52
- checksum: 2e3db648d0883f2a7e72f1207ec0976b97d144cafe0a3e755df2d91ca93d113f
52
+ checksum: 49b95f4c3d025b633e22632ca7b401b56d8acd448a545be3976466676d5aed54
53
53
  filename: appsignal-x86_64-linux-musl-all-static.tar.gz
54
54
  dynamic:
55
- checksum: 5da62f954d761af47da16f34ab675b46fedd7b91b485574bf895b43896f61ce0
55
+ checksum: db789b22a4ed788db73cbfca5c82cdee29d4d40bedd85a22176b95987ce2c07d
56
56
  filename: appsignal-x86_64-linux-musl-all-dynamic.tar.gz
57
57
  x86_64-freebsd:
58
58
  static:
59
- checksum: 8dc226834ef39bac43dbc4a5c6a812c50c34669b0607036dd9494ac587e72d6a
59
+ checksum: b8734f66d077e9acd9fc990c812877b92e4fc783ee30f430d829da058d3a709f
60
60
  filename: appsignal-x86_64-freebsd-all-static.tar.gz
61
61
  dynamic:
62
- checksum: 0edfbaa450c89dba5750b306043efc00b82851dce2b75fa6ee62de07d30b4a3b
62
+ checksum: e8bce24495933d8fad137c1075abbf4173161d0ee3e830f83eb6bfecf309ada5
63
63
  filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
64
64
  amd64-freebsd:
65
65
  static:
66
- checksum: 8dc226834ef39bac43dbc4a5c6a812c50c34669b0607036dd9494ac587e72d6a
66
+ checksum: b8734f66d077e9acd9fc990c812877b92e4fc783ee30f430d829da058d3a709f
67
67
  filename: appsignal-x86_64-freebsd-all-static.tar.gz
68
68
  dynamic:
69
- checksum: 0edfbaa450c89dba5750b306043efc00b82851dce2b75fa6ee62de07d30b4a3b
69
+ checksum: e8bce24495933d8fad137c1075abbf4173161d0ee3e830f83eb6bfecf309ada5
70
70
  filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
@@ -32,7 +32,8 @@ def report
32
32
  "version" => "#{rbconfig["ruby_version"]}-p#{rbconfig["PATCHLEVEL"]}"
33
33
  },
34
34
  "download" => {
35
- "checksum" => "unverified"
35
+ "checksum" => "unverified",
36
+ "http_proxy" => http_proxy
36
37
  },
37
38
  "build" => {
38
39
  "time" => Time.now.utc,
@@ -126,7 +127,11 @@ def download_archive(type)
126
127
  report["download"]["download_url"] = download_url
127
128
 
128
129
  begin
129
- return open(download_url, :ssl_ca_cert => CA_CERT_PATH)
130
+ return open(
131
+ download_url,
132
+ :ssl_ca_cert => CA_CERT_PATH,
133
+ :proxy => http_proxy
134
+ )
130
135
  rescue
131
136
  next
132
137
  end
@@ -142,14 +147,16 @@ def download_archive(type)
142
147
  end
143
148
 
144
149
  def verify_archive(archive, type)
145
- if Digest::SHA256.hexdigest(archive.read) == ARCH_CONFIG[type]["checksum"]
150
+ expected_checksum = ARCH_CONFIG[type]["checksum"]
151
+ actual_checksum = Digest::SHA256.hexdigest(archive.read)
152
+ if actual_checksum == expected_checksum
146
153
  report["download"]["checksum"] = "verified"
147
154
  true
148
155
  else
149
156
  report["download"]["checksum"] = "invalid"
150
157
  abort_installation(
151
158
  "Checksum of downloaded archive could not be verified: " \
152
- "Expected '#{ARCH_CONFIG[type]["checksum"]}', got '#{checksum}'."
159
+ "Expected '#{expected_checksum}', got '#{actual_checksum}'."
153
160
  )
154
161
  end
155
162
  end
@@ -172,3 +179,7 @@ def store_download_version_on_report
172
179
  path = File.expand_path(File.join(File.dirname(__FILE__), "appsignal.version"))
173
180
  report["build"]["agent_version"] = File.read(path).strip
174
181
  end
182
+
183
+ def http_proxy
184
+ Gem.configuration[:http_proxy] || ENV["http_proxy"] || ENV["HTTP_PROXY"]
185
+ end
@@ -371,7 +371,7 @@ module Appsignal
371
371
  end
372
372
 
373
373
  def print_installation_result_report(report)
374
- report = report.fetch("download", {})
374
+ report = report.fetch("result", {})
375
375
  puts " Installation result"
376
376
  puts " Status: #{report["status"]}"
377
377
  puts " Message: #{report["message"]}" if report["message"]
@@ -119,8 +119,41 @@ module Appsignal
119
119
  :initial_config, :file_config, :env_config
120
120
  attr_accessor :logger
121
121
 
122
- def initialize(root_path, env, initial_config = {}, logger = Appsignal.logger)
122
+ # Initialize a new configuration object for AppSignal.
123
+ #
124
+ # If this is manually initialized, and not by {Appsignal.start}, it needs
125
+ # to be assigned to the {Appsignal.config} attribute.
126
+ #
127
+ # @example
128
+ # require "appsignal"
129
+ # Appsignal.config = Appsignal::Config.new(
130
+ # app_path,
131
+ # "production"
132
+ # )
133
+ # Appsignal.start
134
+ #
135
+ # @param root_path [String] Root path of the app.
136
+ # @param env [String] The environment to load when AppSignal is started. It
137
+ # will look for an environment with this name in the `config/appsignal.yml`
138
+ # config file.
139
+ # @param initial_config [Hash<String, Object>] The initial configuration to
140
+ # use. This will be overwritten by the file config and environment
141
+ # variables config.
142
+ # @param logger [Logger] The logger to use for the AppSignal gem. This is
143
+ # used by the configuration class only. Default: {Appsignal.logger}. See
144
+ # also {Appsignal.start_logger}.
145
+ # @param config_file [String] Custom config file location. Default
146
+ # `config/appsignal.yml`.
147
+ #
148
+ # @see https://docs.appsignal.com/ruby/configuration/
149
+ # Configuration documentation
150
+ # @see https://docs.appsignal.com/ruby/configuration/load-order.html
151
+ # Configuration load order
152
+ # @see https://docs.appsignal.com/ruby/instrumentation/integrating-appsignal.html
153
+ # How to integrate AppSignal manually
154
+ def initialize(root_path, env, initial_config = {}, logger = Appsignal.logger, config_file = nil)
123
155
  @root_path = root_path
156
+ @config_file = config_file
124
157
  @logger = logger
125
158
  @valid = false
126
159
  @config_hash = Hash[DEFAULT_CONFIG]
@@ -27,9 +27,8 @@ module Appsignal
27
27
  method_name = "perform"
28
28
  else
29
29
  # Delayed Job
30
- args = extract_value(job.payload_object, :args, {})
31
- class_and_method_name = extract_value(job.payload_object, :appsignal_name, job.name)
32
- class_name, method_name = class_and_method_name.split("#")
30
+ args = extract_value(payload, :args, {})
31
+ class_name, method_name = class_and_method_name_from_object_or_hash(payload, job.name)
33
32
  end
34
33
 
35
34
  params = Appsignal::Utils::HashSanitizer.sanitize(
@@ -54,6 +53,20 @@ module Appsignal
54
53
  end
55
54
  end
56
55
 
56
+ def self.class_and_method_name_from_object_or_hash(payload, default_name)
57
+ # Attempt to find appsignal_name override
58
+ class_and_method_name = extract_value(payload, :appsignal_name, nil)
59
+ return class_and_method_name.split("#") if class_and_method_name.is_a?(String)
60
+
61
+ pound_split = default_name.split("#")
62
+ return pound_split if pound_split.length == 2
63
+
64
+ dot_split = default_name.split(".")
65
+ return default_name if dot_split.length == 2
66
+
67
+ ["unknown"]
68
+ end
69
+
57
70
  def self.extract_value(object_or_hash, field, default_value = nil, convert_to_s = false)
58
71
  value = nil
59
72
 
@@ -14,12 +14,18 @@ module Appsignal
14
14
  Appsignal.config[:filter_parameters]
15
15
  )
16
16
 
17
+ queue_start =
18
+ if job.respond_to?(:enqueued_at) && job.enqueued_at
19
+ Time.parse(job.enqueued_at).utc
20
+ end
21
+
17
22
  Appsignal.monitor_single_transaction(
18
23
  "perform_job.resque",
19
- :class => job.class.to_s,
20
- :method => "perform",
21
- :params => params,
22
- :metadata => {
24
+ :class => job.class.to_s,
25
+ :method => "perform",
26
+ :params => params,
27
+ :queue_start => queue_start,
28
+ :metadata => {
23
29
  :id => job.job_id,
24
30
  :queue => job.queue_name
25
31
  }
@@ -29,8 +29,11 @@ module Appsignal
29
29
  Appsignal.logger.debug \
30
30
  "Initializing Appsignal::Rack::JSExceptionCatcher"
31
31
  deprecation_message "The Appsignal::Rack::JSExceptionCatcher is " \
32
- "deprecated. Please use the official AppSignal JavaScript " \
33
- "integration instead. https://docs.appsignal.com/front-end/"
32
+ "deprecated and will be removed in a future version. Please use " \
33
+ "the official AppSignal JavaScript integration by disabling " \
34
+ "`enable_frontend_error_catching` in your configuration and " \
35
+ "installing AppSignal for JavaScript instead. " \
36
+ "(https://docs.appsignal.com/front-end/)"
34
37
  @app = app
35
38
  end
36
39
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Appsignal
4
- VERSION = "2.10.7".freeze
4
+ VERSION = "2.10.11".freeze
5
5
  end
@@ -10,7 +10,7 @@ if DependencyHelper.capistrano2_present?
10
10
  let(:capistrano_config) do
11
11
  Capistrano::Configuration.new.tap do |c|
12
12
  c.set(:rails_env, "production")
13
- c.set(:repository, "master")
13
+ c.set(:repository, "main")
14
14
  c.set(:deploy_to, "/home/username/app")
15
15
  c.set(:current_release, "")
16
16
  c.set(:current_revision, "503ce0923ed177a3ce000005")
@@ -15,7 +15,7 @@ if DependencyHelper.capistrano3_present?
15
15
  c.set(:log_level, :error)
16
16
  c.set(:logger, logger)
17
17
  c.set(:rails_env, "production")
18
- c.set(:repository, "master")
18
+ c.set(:repository, "main")
19
19
  c.set(:deploy_to, "/home/username/app")
20
20
  c.set(:current_release, "")
21
21
  c.set(:current_revision, "503ce0923ed177a3ce000005")
@@ -263,7 +263,8 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
263
263
  },
264
264
  "download" => {
265
265
  "download_url" => kind_of(String),
266
- "checksum" => "verified"
266
+ "checksum" => "verified",
267
+ "http_proxy" => nil
267
268
  },
268
269
  "build" => {
269
270
  "time" => kind_of(String),
@@ -289,6 +290,8 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
289
290
  jruby = Appsignal::System.jruby?
290
291
  expect(output).to include(
291
292
  "Extension installation report",
293
+ "Installation result",
294
+ " Status: success",
292
295
  "Language details",
293
296
  " Implementation: #{jruby ? "jruby" : "ruby"}",
294
297
  " Ruby version: #{"#{rbconfig["ruby_version"]}-p#{rbconfig["PATCHLEVEL"]}"}",
@@ -309,6 +312,46 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
309
312
  )
310
313
  end
311
314
 
315
+ context "with error in install report" do
316
+ let(:error) { RuntimeError.new("some error") }
317
+ before do
318
+ allow(File).to receive(:read).and_call_original
319
+ expect(File).to receive(:read)
320
+ .with(File.expand_path("../../../../../ext/install.report", __FILE__))
321
+ .and_return(
322
+ YAML.dump(
323
+ "result" => {
324
+ "status" => "error",
325
+ "error" => "RuntimeError: some error",
326
+ "backtrace" => error.backtrace
327
+ }
328
+ )
329
+ )
330
+ end
331
+
332
+ it "sends an error" do
333
+ run
334
+ expect(received_report["installation"]).to match(
335
+ "result" => {
336
+ "status" => "error",
337
+ "error" => "RuntimeError: some error",
338
+ "backtrace" => error.backtrace
339
+ }
340
+ )
341
+ end
342
+
343
+ it "prints the error" do
344
+ run
345
+
346
+ expect(output).to include(
347
+ "Extension installation report",
348
+ "Installation result",
349
+ "Status: error\n Error: RuntimeError: some error"
350
+ )
351
+ expect(output).to_not include("Raw report:")
352
+ end
353
+ end
354
+
312
355
  context "without install report" do
313
356
  let(:error) { RuntimeError.new("foo") }
314
357
  before do
@@ -243,6 +243,27 @@ describe Appsignal::Config do
243
243
  end
244
244
  end
245
245
 
246
+ context "with an overriden config file" do
247
+ let(:config) do
248
+ project_fixture_config("production", {}, Appsignal.logger, File.join(project_fixture_path, "config", "appsignal.yml"))
249
+ end
250
+
251
+ it "is valid and active" do
252
+ expect(config.valid?).to be_truthy
253
+ expect(config.active?).to be_truthy
254
+ end
255
+
256
+ context "with an invalid overriden config file" do
257
+ let(:config) do
258
+ project_fixture_config("production", {}, Appsignal.logger, File.join(project_fixture_path, "config", "missing.yml"))
259
+ end
260
+
261
+ it "is not valid" do
262
+ expect(config.valid?).to be_falsy
263
+ end
264
+ end
265
+ end
266
+
246
267
  context "with the config file causing an error" do
247
268
  let(:config_path) do
248
269
  File.expand_path(
@@ -36,6 +36,7 @@ describe Appsignal::Hooks::DelayedJobHook do
36
36
  let(:time) { Time.parse("01-01-2001 10:01:00UTC") }
37
37
  let(:created_at) { time - 3600 }
38
38
  let(:run_at) { time - 3600 }
39
+ let(:payload_object) { double(:args => args) }
39
40
  let(:job_data) do
40
41
  {
41
42
  :id => 123,
@@ -45,38 +46,40 @@ describe Appsignal::Hooks::DelayedJobHook do
45
46
  :queue => "default",
46
47
  :created_at => created_at,
47
48
  :run_at => run_at,
48
- :payload_object => double(:args => args)
49
+ :payload_object => payload_object
49
50
  }
50
51
  end
51
52
  let(:args) { ["argument"] }
52
53
  let(:job) { double(job_data) }
53
54
  let(:invoked_block) { proc {} }
54
55
 
55
- context "with a normal call" do
56
- let(:default_params) do
57
- {
58
- :class => "TestClass",
59
- :method => "perform",
60
- :metadata => {
61
- :priority => 1,
62
- :attempts => 1,
63
- :queue => "default",
64
- :id => "123"
65
- },
66
- :params => args,
67
- :queue_start => run_at
68
- }
69
- end
70
- after do
71
- Timecop.freeze(time) do
56
+ def perform
57
+ Timecop.freeze(time) do
58
+ keep_transactions do
72
59
  plugin.invoke_with_instrumentation(job, invoked_block)
73
60
  end
74
61
  end
62
+ end
75
63
 
76
- it "wraps it in a transaction with the correct params" do
77
- expect(Appsignal).to receive(:monitor_transaction).with(
78
- "perform_job.delayed_job",
79
- default_params.merge(:params => ["argument"])
64
+ context "with a normal call" do
65
+ it "wraps it in a transaction" do
66
+ perform
67
+ transaction_data = last_transaction.to_h
68
+ expect(transaction_data).to include(
69
+ "action" => "TestClass#perform",
70
+ "namespace" => "background_job",
71
+ "error" => nil
72
+ )
73
+ expect(transaction_data["events"].map { |e| e["name"] })
74
+ .to eql(["perform_job.delayed_job"])
75
+ expect(transaction_data["sample_data"]).to include(
76
+ "metadata" => {
77
+ "priority" => 1,
78
+ "attempts" => 1,
79
+ "queue" => "default",
80
+ "id" => "123"
81
+ },
82
+ "params" => ["argument"]
80
83
  )
81
84
  end
82
85
 
@@ -89,14 +92,13 @@ describe Appsignal::Hooks::DelayedJobHook do
89
92
  end
90
93
 
91
94
  it "adds the more complex arguments" do
92
- expect(Appsignal).to receive(:monitor_transaction).with(
93
- "perform_job.delayed_job",
94
- default_params.merge(
95
- :params => {
96
- :foo => "Foo",
97
- :bar => "Bar"
98
- }
99
- )
95
+ perform
96
+ transaction_data = last_transaction.to_h
97
+ expect(transaction_data["sample_data"]).to include(
98
+ "params" => {
99
+ "foo" => "Foo",
100
+ "bar" => "Bar"
101
+ }
100
102
  )
101
103
  end
102
104
 
@@ -107,14 +109,13 @@ describe Appsignal::Hooks::DelayedJobHook do
107
109
  end
108
110
 
109
111
  it "filters selected arguments" do
110
- expect(Appsignal).to receive(:monitor_transaction).with(
111
- "perform_job.delayed_job",
112
- default_params.merge(
113
- :params => {
114
- :foo => "[FILTERED]",
115
- :bar => "Bar"
116
- }
117
- )
112
+ perform
113
+ transaction_data = last_transaction.to_h
114
+ expect(transaction_data["sample_data"]).to include(
115
+ "params" => {
116
+ "foo" => "[FILTERED]",
117
+ "bar" => "Bar"
118
+ }
118
119
  )
119
120
  end
120
121
  end
@@ -124,98 +125,135 @@ describe Appsignal::Hooks::DelayedJobHook do
124
125
  let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
125
126
 
126
127
  it "reports queue_start with run_at time" do
128
+ # TODO: Not available in transaction.to_h yet.
129
+ # https://github.com/appsignal/appsignal-agent/issues/293
127
130
  expect(Appsignal).to receive(:monitor_transaction).with(
128
131
  "perform_job.delayed_job",
129
- default_params.merge(:queue_start => run_at)
130
- )
132
+ a_hash_including(:queue_start => run_at)
133
+ ).and_call_original
134
+ perform
131
135
  end
132
136
  end
133
137
 
134
- context "with custom name call" do
138
+ context "with class method job" do
135
139
  let(:job_data) do
136
- {
137
- :payload_object => double(
138
- :appsignal_name => "CustomClass#perform",
139
- :args => args
140
- ),
141
- :id => "123",
142
- :name => "TestClass#perform",
143
- :priority => 1,
144
- :attempts => 1,
145
- :queue => "default",
146
- :created_at => created_at,
147
- :run_at => run_at
148
- }
149
- end
150
- let(:default_params) do
151
- {
152
- :class => "CustomClass",
153
- :method => "perform",
154
- :metadata => {
155
- :priority => 1,
156
- :attempts => 1,
157
- :queue => "default",
158
- :id => "123"
159
- },
160
- :queue_start => run_at
161
- }
140
+ { :name => "CustomClassMethod.perform", :payload_object => payload_object }
162
141
  end
163
142
 
164
- it "wraps it in a transaction with the correct params" do
165
- expect(Appsignal).to receive(:monitor_transaction).with(
166
- "perform_job.delayed_job",
167
- default_params.merge(
168
- :params => ["argument"]
169
- )
170
- )
143
+ it "wraps it in a transaction using the class method job name" do
144
+ perform
145
+ expect(last_transaction.to_h["action"]).to eql("CustomClassMethod.perform")
171
146
  end
147
+ end
172
148
 
173
- context "with more complex params" do
174
- let(:args) do
175
- {
176
- :foo => "Foo",
177
- :bar => "Bar"
178
- }
179
- end
149
+ context "with custom name call" do
150
+ before { perform }
180
151
 
181
- it "adds the more complex arguments" do
182
- expect(Appsignal).to receive(:monitor_transaction).with(
183
- "perform_job.delayed_job",
184
- default_params.merge(
185
- :params => {
186
- :foo => "Foo",
187
- :bar => "Bar"
188
- }
189
- )
190
- )
152
+ context "with appsignal_name defined" do
153
+ context "with payload_object being an object" do
154
+ context "with value" do
155
+ let(:payload_object) { double(:appsignal_name => "CustomClass#perform") }
156
+
157
+ it "wraps it in a transaction using the custom name" do
158
+ expect(last_transaction.to_h["action"]).to eql("CustomClass#perform")
159
+ end
160
+ end
161
+
162
+ context "with non-String value" do
163
+ let(:payload_object) { double(:appsignal_name => Object.new) }
164
+
165
+ it "wraps it in a transaction using the original job name" do
166
+ expect(last_transaction.to_h["action"]).to eql("TestClass#perform")
167
+ end
168
+ end
169
+
170
+ context "with class method name as job" do
171
+ let(:payload_object) { double(:appsignal_name => "CustomClassMethod.perform") }
172
+
173
+ it "wraps it in a transaction using the custom name" do
174
+ perform
175
+ expect(last_transaction.to_h["action"]).to eql("CustomClassMethod.perform")
176
+ end
177
+ end
191
178
  end
192
179
 
193
- context "with parameter filtering" do
194
- before do
195
- Appsignal.config = project_fixture_config("production")
196
- Appsignal.config[:filter_parameters] = ["foo"]
180
+ context "with payload_object being a Hash" do
181
+ context "with value" do
182
+ let(:payload_object) { double(:appsignal_name => "CustomClassHash#perform") }
183
+
184
+ it "wraps it in a transaction using the custom name" do
185
+ expect(last_transaction.to_h["action"]).to eql("CustomClassHash#perform")
186
+ end
197
187
  end
198
188
 
199
- it "filters selected arguments" do
200
- expect(Appsignal).to receive(:monitor_transaction).with(
201
- "perform_job.delayed_job",
202
- default_params.merge(
203
- :params => {
204
- :foo => "[FILTERED]",
205
- :bar => "Bar"
206
- }
207
- )
208
- )
189
+ context "with non-String value" do
190
+ let(:payload_object) { double(:appsignal_name => Object.new) }
191
+
192
+ it "wraps it in a transaction using the original job name" do
193
+ expect(last_transaction.to_h["action"]).to eql("TestClass#perform")
194
+ end
195
+ end
196
+
197
+ context "with class method name as job" do
198
+ let(:payload_object) { { :appsignal_name => "CustomClassMethod.perform" } }
199
+
200
+ it "wraps it in a transaction using the custom name" do
201
+ perform
202
+ expect(last_transaction.to_h["action"]).to eql("CustomClassMethod.perform")
203
+ end
204
+ end
205
+ end
206
+
207
+ context "with payload_object being acting like a Hash and returning a non-String value" do
208
+ class ClassActingAsHash
209
+ def self.[](_key)
210
+ Object.new
211
+ end
212
+
213
+ def self.appsignal_name
214
+ "ClassActingAsHash#perform"
215
+ end
216
+ end
217
+ let(:payload_object) { ClassActingAsHash }
218
+
219
+ # We check for hash values before object values
220
+ # this means ClassActingAsHash returns `Object.new` instead
221
+ # of `self.appsignal_name`. Since this isn't a valid `String`
222
+ # we return the default job name as action name.
223
+ it "wraps it in a transaction using the original job name" do
224
+ expect(last_transaction.to_h["action"]).to eql("TestClass#perform")
209
225
  end
210
226
  end
211
227
  end
212
228
  end
213
229
 
230
+ context "without job name" do
231
+ let(:job_data) do
232
+ { :name => "", :payload_object => payload_object }
233
+ end
234
+
235
+ it "wraps it in a transaction using the class method job name" do
236
+ perform
237
+ expect(last_transaction.to_h["action"]).to eql("unknown")
238
+ end
239
+ end
240
+
241
+ context "with invalid job name" do
242
+ let(:job_data) do
243
+ { :name => "Banana", :payload_object => payload_object }
244
+ end
245
+
246
+ it "wraps it in a transaction using the class method job name" do
247
+ perform
248
+ expect(last_transaction.to_h["action"]).to eql("unknown")
249
+ end
250
+ end
251
+
214
252
  if active_job_present?
215
253
  require "active_job"
216
254
 
217
255
  context "when wrapped by ActiveJob" do
218
- let(:wrapped_job) do
256
+ let(:payload_object) do
219
257
  ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper.new(
220
258
  "arguments" => args,
221
259
  "job_class" => "TestClass",
@@ -233,32 +271,30 @@ describe Appsignal::Hooks::DelayedJobHook do
233
271
  :queue => "default",
234
272
  :created_at => created_at,
235
273
  :run_at => run_at,
236
- :payload_object => wrapped_job
274
+ :payload_object => payload_object
237
275
  )
238
276
  end
239
- let(:default_params) do
240
- {
241
- :class => "TestClass",
242
- :method => "perform",
243
- :metadata => {
244
- :priority => 1,
245
- :attempts => 1,
246
- :queue => "default",
247
- :id => "123"
248
- },
249
- :queue_start => run_at,
250
- :params => args
251
- }
252
- end
253
277
  let(:args) { ["activejob_argument"] }
254
278
 
255
- context "with simple params" do
256
- it "wraps it in a transaction with the correct params" do
257
- expect(Appsignal).to receive(:monitor_transaction).with(
258
- "perform_job.delayed_job",
259
- default_params.merge(:params => ["activejob_argument"])
260
- )
261
- end
279
+ it "wraps it in a transaction with the correct params" do
280
+ perform
281
+ transaction_data = last_transaction.to_h
282
+ expect(transaction_data).to include(
283
+ "action" => "TestClass#perform",
284
+ "namespace" => "background_job",
285
+ "error" => nil
286
+ )
287
+ expect(transaction_data["events"].map { |e| e["name"] })
288
+ .to eql(["perform_job.delayed_job"])
289
+ expect(transaction_data["sample_data"]).to include(
290
+ "metadata" => {
291
+ "priority" => 1,
292
+ "attempts" => 1,
293
+ "queue" => "default",
294
+ "id" => "123"
295
+ },
296
+ "params" => ["activejob_argument"]
297
+ )
262
298
  end
263
299
 
264
300
  context "with more complex params" do
@@ -270,14 +306,14 @@ describe Appsignal::Hooks::DelayedJobHook do
270
306
  end
271
307
 
272
308
  it "adds the more complex arguments" do
273
- expect(Appsignal).to receive(:monitor_transaction).with(
274
- "perform_job.delayed_job",
275
- default_params.merge(
276
- :params => {
277
- :foo => "Foo",
278
- :bar => "Bar"
279
- }
280
- )
309
+ perform
310
+ transaction_data = last_transaction.to_h
311
+ expect(transaction_data).to include("action" => "TestClass#perform")
312
+ expect(transaction_data["sample_data"]).to include(
313
+ "params" => {
314
+ "foo" => "Foo",
315
+ "bar" => "Bar"
316
+ }
281
317
  )
282
318
  end
283
319
 
@@ -288,14 +324,14 @@ describe Appsignal::Hooks::DelayedJobHook do
288
324
  end
289
325
 
290
326
  it "filters selected arguments" do
291
- expect(Appsignal).to receive(:monitor_transaction).with(
292
- "perform_job.delayed_job",
293
- default_params.merge(
294
- :params => {
295
- :foo => "[FILTERED]",
296
- :bar => "Bar"
297
- }
298
- )
327
+ perform
328
+ transaction_data = last_transaction.to_h
329
+ expect(transaction_data).to include("action" => "TestClass#perform")
330
+ expect(transaction_data["sample_data"]).to include(
331
+ "params" => {
332
+ "foo" => "[FILTERED]",
333
+ "bar" => "Bar"
334
+ }
299
335
  )
300
336
  end
301
337
  end
@@ -307,8 +343,9 @@ describe Appsignal::Hooks::DelayedJobHook do
307
343
  it "reports queue_start with run_at time" do
308
344
  expect(Appsignal).to receive(:monitor_transaction).with(
309
345
  "perform_job.delayed_job",
310
- default_params.merge(:queue_start => run_at)
311
- )
346
+ a_hash_including(:queue_start => run_at)
347
+ ).and_call_original
348
+ perform
312
349
  end
313
350
  end
314
351
  end
@@ -316,33 +353,28 @@ describe Appsignal::Hooks::DelayedJobHook do
316
353
  end
317
354
 
318
355
  context "with an erroring call" do
319
- let(:error) { ExampleException }
320
- let(:transaction) do
321
- Appsignal::Transaction.new(
322
- SecureRandom.uuid,
323
- Appsignal::Transaction::BACKGROUND_JOB,
324
- Appsignal::Transaction::GenericRequest.new({})
325
- )
326
- end
356
+ let(:error) { ExampleException.new("uh oh") }
327
357
  before do
328
358
  expect(invoked_block).to receive(:call).and_raise(error)
329
-
330
- allow(Appsignal::Transaction).to receive(:current).and_return(transaction)
331
- expect(Appsignal::Transaction).to receive(:create)
332
- .with(
333
- kind_of(String),
334
- Appsignal::Transaction::BACKGROUND_JOB,
335
- kind_of(Appsignal::Transaction::GenericRequest)
336
- ).and_return(transaction)
337
359
  end
338
360
 
339
361
  it "adds the error to the transaction" do
340
- expect(transaction).to receive(:set_error).with(error)
341
- expect(transaction).to receive(:complete)
342
-
343
362
  expect do
344
- plugin.invoke_with_instrumentation(job, invoked_block)
363
+ perform
345
364
  end.to raise_error(error)
365
+
366
+ transaction_data = last_transaction.to_h
367
+ expect(transaction_data).to include(
368
+ "action" => "TestClass#perform",
369
+ "namespace" => "background_job",
370
+ "error" => {
371
+ "name" => "ExampleException",
372
+ "message" => "uh oh",
373
+ # TODO: backtrace should be an Array of Strings
374
+ # https://github.com/appsignal/appsignal-agent/issues/294
375
+ "backtrace" => kind_of(String)
376
+ }
377
+ )
346
378
  end
347
379
  end
348
380
  end
@@ -1,21 +1,18 @@
1
- if DependencyHelper.resque_present? && DependencyHelper.active_job_present?
1
+ if DependencyHelper.active_job_present?
2
2
  require "active_job"
3
+ require File.expand_path("lib/appsignal/integrations/resque_active_job.rb")
4
+
5
+ class TestActiveJob < ActiveJob::Base
6
+ include Appsignal::Integrations::ResqueActiveJobPlugin
7
+
8
+ def perform(_)
9
+ end
10
+ end
3
11
 
4
12
  describe Appsignal::Integrations::ResqueActiveJobPlugin do
5
- let(:file) { File.expand_path("lib/appsignal/integrations/resque_active_job.rb") }
6
13
  let(:args) { "argument" }
7
14
  let(:job) { TestActiveJob.new(args) }
8
- before do
9
- load file
10
- start_agent
11
-
12
- class TestActiveJob < ActiveJob::Base
13
- include Appsignal::Integrations::ResqueActiveJobPlugin
14
-
15
- def perform(_)
16
- end
17
- end
18
- end
15
+ before { start_agent }
19
16
 
20
17
  def perform
21
18
  keep_transactions do
@@ -141,5 +138,50 @@ if DependencyHelper.resque_present? && DependencyHelper.active_job_present?
141
138
  end
142
139
  end
143
140
  end
141
+
142
+ context "without queue time" do
143
+ it "does not add queue time to transaction" do
144
+ # TODO: Not available in transaction.to_h yet.
145
+ # https://github.com/appsignal/appsignal-agent/issues/293
146
+ expect(Appsignal).to receive(:monitor_single_transaction).with(
147
+ "perform_job.resque",
148
+ a_hash_including(:queue_start => nil)
149
+ ).and_call_original
150
+
151
+ perform
152
+ expect(last_transaction.to_h).to include(
153
+ "namespace" => Appsignal::Transaction::BACKGROUND_JOB,
154
+ "action" => "TestActiveJob#perform",
155
+ "events" => [
156
+ hash_including("name" => "perform_job.resque")
157
+ ]
158
+ )
159
+ end
160
+ end
161
+
162
+ if DependencyHelper.rails6_present?
163
+ context "with queue time" do
164
+ it "adds queue time to transction" do
165
+ queue_start = "2017-01-01 10:01:00UTC"
166
+ queue_start_time = Time.parse(queue_start)
167
+ # TODO: Not available in transaction.to_h yet.
168
+ # https://github.com/appsignal/appsignal-agent/issues/293
169
+ expect(Appsignal).to receive(:monitor_single_transaction).with(
170
+ "perform_job.resque",
171
+ a_hash_including(:queue_start => queue_start_time)
172
+ ).and_call_original
173
+ job.enqueued_at = queue_start
174
+
175
+ perform
176
+ expect(last_transaction.to_h).to include(
177
+ "namespace" => Appsignal::Transaction::BACKGROUND_JOB,
178
+ "action" => "TestActiveJob#perform",
179
+ "events" => [
180
+ hash_including("name" => "perform_job.resque")
181
+ ]
182
+ )
183
+ end
184
+ end
185
+ end
144
186
  end
145
187
  end
@@ -4,7 +4,7 @@ describe Appsignal::Marker do
4
4
  described_class.new(
5
5
  {
6
6
  :revision => "503ce0923ed177a3ce000005",
7
- :repository => "master",
7
+ :repository => "main",
8
8
  :user => "batman",
9
9
  :rails_env => "production"
10
10
  },
@@ -4,9 +4,12 @@ describe Appsignal::Rack::JSExceptionCatcher do
4
4
  let(:config_options) { { :enable_frontend_error_catching => true } }
5
5
  let(:config) { project_fixture_config("production", config_options) }
6
6
  let(:deprecation_message) do
7
- "The Appsignal::Rack::JSExceptionCatcher is deprecated. " \
8
- "Please use the official AppSignal JavaScript integration instead. " \
9
- "https://docs.appsignal.com/front-end/"
7
+ "The Appsignal::Rack::JSExceptionCatcher is " \
8
+ "deprecated and will be removed in a future version. Please use " \
9
+ "the official AppSignal JavaScript integration by disabling " \
10
+ "`enable_frontend_error_catching` in your configuration and " \
11
+ "installing AppSignal for JavaScript instead. " \
12
+ "(https://docs.appsignal.com/front-end/)"
10
13
  end
11
14
  before { Appsignal.config = config }
12
15
 
@@ -32,7 +35,9 @@ describe Appsignal::Rack::JSExceptionCatcher do
32
35
 
33
36
  describe "#call" do
34
37
  let(:catcher) do
35
- silence { Appsignal::Rack::JSExceptionCatcher.new(app, options) }
38
+ silence :allowed => ["enable_frontend_error_catching"] do
39
+ Appsignal::Rack::JSExceptionCatcher.new(app, options)
40
+ end
36
41
  end
37
42
  after { catcher.call(env) }
38
43
 
@@ -5,12 +5,13 @@ module ConfigHelpers
5
5
  )
6
6
  end
7
7
 
8
- def project_fixture_config(env = "production", initial_config = {}, logger = Appsignal.logger)
8
+ def project_fixture_config(env = "production", initial_config = {}, logger = Appsignal.logger, config_file = nil)
9
9
  Appsignal::Config.new(
10
10
  project_fixture_path,
11
11
  env,
12
12
  initial_config,
13
- logger
13
+ logger,
14
+ config_file
14
15
  )
15
16
  end
16
17
 
@@ -9,6 +9,11 @@ module DependencyHelper
9
9
  dependency_present? "rails"
10
10
  end
11
11
 
12
+ def rails6_present?
13
+ rails_present? &&
14
+ Gem.loaded_specs["rails"].version >= Gem::Version.new("6.0.0")
15
+ end
16
+
12
17
  def sequel_present?
13
18
  dependency_present? "sequel"
14
19
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.7
4
+ version: 2.10.11
5
5
  platform: java
6
6
  authors:
7
7
  - Robert Beekman
8
8
  - Thijs Cadier
9
9
  - Tom de Bruijn
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-05-05 00:00:00.000000000 Z
13
+ date: 2020-07-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -389,11 +389,11 @@ licenses:
389
389
  - MIT
390
390
  metadata:
391
391
  bug_tracker_uri: https://github.com/appsignal/appsignal-ruby/issues
392
- changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/master/CHANGELOG.md
392
+ changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md
393
393
  documentation_uri: https://docs.appsignal.com/ruby/
394
394
  homepage_uri: https://docs.appsignal.com/ruby/
395
395
  source_code_uri: https://github.com/appsignal/appsignal-ruby
396
- post_install_message:
396
+ post_install_message:
397
397
  rdoc_options: []
398
398
  require_paths:
399
399
  - lib
@@ -409,8 +409,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
409
409
  - !ruby/object:Gem::Version
410
410
  version: '0'
411
411
  requirements: []
412
- rubygems_version: 3.1.2
413
- signing_key:
412
+ rubygems_version: 3.1.4
413
+ signing_key:
414
414
  specification_version: 4
415
415
  summary: Logs performance and exception data from your app to appsignal.com
416
416
  test_files: