appsignal 3.7.0 → 3.7.1

Sign up to get free protection for your applications and to get access to all the features.
data/ext/base.rb CHANGED
@@ -190,6 +190,9 @@ def store_download_version_on_report
190
190
  end
191
191
 
192
192
  def http_proxy
193
+ proxy = try_http_proxy_value(ENV.fetch("APPSIGNAL_HTTP_PROXY", nil))
194
+ return [proxy, nil] if proxy
195
+
193
196
  proxy, error =
194
197
  begin
195
198
  [try_http_proxy_value(Gem.configuration[:http_proxy]), nil]
@@ -8,7 +8,7 @@ require "tmpdir"
8
8
 
9
9
  module Appsignal
10
10
  class Config
11
- include Appsignal::Utils::DeprecationMessage
11
+ include Appsignal::Utils::StdoutAndLoggerMessage
12
12
 
13
13
  DEFAULT_CONFIG = {
14
14
  :activejob_report_errors => "all",
@@ -320,20 +320,29 @@ module Appsignal
320
320
  end
321
321
 
322
322
  def log_file_path
323
+ return @log_file_path if defined? @log_file_path
324
+
323
325
  path = config_hash[:log_path] || (root_path && File.join(root_path, "log"))
324
- return File.join(File.realpath(path), "appsignal.log") if path && File.writable?(path)
326
+ if path && File.writable?(path)
327
+ @log_file_path = File.join(File.realpath(path), "appsignal.log")
328
+ return @log_file_path
329
+ end
325
330
 
326
331
  system_tmp_dir = self.class.system_tmp_dir
327
332
  if File.writable? system_tmp_dir
328
333
  $stdout.puts "appsignal: Unable to log to '#{path}'. Logging to " \
329
- "'#{system_tmp_dir}' instead. Please check the " \
330
- "permissions for the application's (log) directory."
331
- File.join(system_tmp_dir, "appsignal.log")
334
+ "'#{system_tmp_dir}' instead. " \
335
+ "Please check the permissions for the application's (log) " \
336
+ "directory."
337
+ @log_file_path = File.join(system_tmp_dir, "appsignal.log")
332
338
  else
333
339
  $stdout.puts "appsignal: Unable to log to '#{path}' or the " \
334
340
  "'#{system_tmp_dir}' fallback. Please check the permissions " \
335
341
  "for the application's (log) directory."
342
+ @log_file_path = nil
336
343
  end
344
+
345
+ @log_file_path
337
346
  end
338
347
 
339
348
  def valid?
@@ -476,7 +485,7 @@ module Appsignal
476
485
  def maintain_backwards_compatibility
477
486
  return unless config_hash.key?(:working_dir_path)
478
487
 
479
- deprecation_message \
488
+ stdout_and_logger_warning \
480
489
  "The `working_dir_path` option is deprecated, please use " \
481
490
  "`working_directory_path` instead and specify the " \
482
491
  "full path to the working directory",
@@ -542,7 +551,7 @@ module Appsignal
542
551
  config[:send_session_data] = true # Set default value
543
552
  end
544
553
  else
545
- deprecation_message "The `skip_session_data` config option is " \
554
+ stdout_and_logger_warning "The `skip_session_data` config option is " \
546
555
  "deprecated. Please use `send_session_data` instead.",
547
556
  logger
548
557
  # Not configured by user
@@ -14,8 +14,6 @@ module Appsignal
14
14
  # @api private
15
15
  class EventFormatter
16
16
  class << self
17
- include Appsignal::Utils::DeprecationMessage
18
-
19
17
  def formatters
20
18
  @formatters ||= {}
21
19
  end
@@ -3,7 +3,7 @@
3
3
  module Appsignal
4
4
  module Helpers
5
5
  module Instrumentation # rubocop:disable Metrics/ModuleLength
6
- include Appsignal::Utils::DeprecationMessage
6
+ include Appsignal::Utils::StdoutAndLoggerMessage
7
7
 
8
8
  # Creates an AppSignal transaction for the given block.
9
9
  #
@@ -207,7 +207,7 @@ module Appsignal
207
207
  )
208
208
  if tags
209
209
  call_location = caller(1..1).first
210
- deprecation_message \
210
+ stdout_and_logger_warning \
211
211
  "The tags argument for `Appsignal.send_error` is deprecated. " \
212
212
  "Please use the block method to set tags instead.\n\n" \
213
213
  " Appsignal.send_error(error) do |transaction|\n" \
@@ -217,7 +217,7 @@ module Appsignal
217
217
  end
218
218
  if namespace
219
219
  call_location = caller(1..1).first
220
- deprecation_message \
220
+ stdout_and_logger_warning \
221
221
  "The namespace argument for `Appsignal.send_error` is deprecated. " \
222
222
  "Please use the block method to set the namespace instead.\n\n" \
223
223
  " Appsignal.send_error(error) do |transaction|\n" \
@@ -300,7 +300,7 @@ module Appsignal
300
300
  def set_error(exception, tags = nil, namespace = nil)
301
301
  if tags
302
302
  call_location = caller(1..1).first
303
- deprecation_message \
303
+ stdout_and_logger_warning \
304
304
  "The tags argument for `Appsignal.set_error` is deprecated. " \
305
305
  "Please use the block method to set tags instead.\n\n" \
306
306
  " Appsignal.set_error(error) do |transaction|\n" \
@@ -310,7 +310,7 @@ module Appsignal
310
310
  end
311
311
  if namespace
312
312
  call_location = caller(1..1).first
313
- deprecation_message \
313
+ stdout_and_logger_warning \
314
314
  "The namespace argument for `Appsignal.set_error` is deprecated. " \
315
315
  "Please use the block method to set the namespace instead.\n\n" \
316
316
  " Appsignal.set_error(error) do |transaction|\n" \
@@ -15,7 +15,7 @@ module Appsignal
15
15
  end
16
16
 
17
17
  def set_host_gauge(_key, _value)
18
- Appsignal::Utils::DeprecationMessage.message \
18
+ Appsignal::Utils::StdoutAndLoggerMessage.warning \
19
19
  "The `set_host_gauge` method has been deprecated. " \
20
20
  "Calling this method has no effect. " \
21
21
  "Please remove method call in the following file to remove " \
@@ -23,7 +23,7 @@ module Appsignal
23
23
  end
24
24
 
25
25
  def set_process_gauge(_key, _value)
26
- Appsignal::Utils::DeprecationMessage.message \
26
+ Appsignal::Utils::StdoutAndLoggerMessage.warning \
27
27
  "The `set_process_gauge` method has been deprecated. " \
28
28
  "Calling this method has no effect. " \
29
29
  "Please remove method call in the following file to remove " \
@@ -16,7 +16,7 @@ module Appsignal
16
16
  end
17
17
 
18
18
  def install
19
- Appsignal::Minutely.probes.register :gvl, Appsignal::Probes::GvlProbe
19
+ Appsignal::Probes.probes.register :gvl, Appsignal::Probes::GvlProbe
20
20
  ::GVLTools::GlobalTimer.enable if Appsignal.config[:enable_gvl_global_timer]
21
21
  ::GVLTools::WaitingThreads.enable if Appsignal.config[:enable_gvl_waiting_threads]
22
22
  end
@@ -11,7 +11,7 @@ module Appsignal
11
11
  end
12
12
 
13
13
  def install
14
- Appsignal::Minutely.probes.register :mri, Appsignal::Probes::MriProbe
14
+ Appsignal::Probes.probes.register :mri, Appsignal::Probes::MriProbe
15
15
  end
16
16
  end
17
17
  end
@@ -11,7 +11,7 @@ module Appsignal
11
11
 
12
12
  def install
13
13
  require "appsignal/integrations/sidekiq"
14
- Appsignal::Minutely.probes.register :sidekiq, Appsignal::Probes::SidekiqProbe
14
+ Appsignal::Probes.probes.register :sidekiq, Appsignal::Probes::SidekiqProbe
15
15
 
16
16
  ::Sidekiq.configure_server do |config|
17
17
  config.error_handlers <<
@@ -76,7 +76,7 @@ module Appsignal
76
76
  when :SidekiqPlugin
77
77
  require "appsignal/integrations/sidekiq"
78
78
  callers = caller
79
- Appsignal::Utils::DeprecationMessage.message \
79
+ Appsignal::Utils::StdoutAndLoggerMessage.warning \
80
80
  "The constant Appsignal::Hooks::SidekiqPlugin has been deprecated. " \
81
81
  "Please update the constant name to Appsignal::Integrations::SidekiqMiddleware " \
82
82
  "in the following file to remove this message.\n#{callers.first}"
@@ -14,7 +14,7 @@ module Appsignal
14
14
  end
15
15
 
16
16
  console do
17
- Appsignal::Minutely.stop
17
+ Appsignal::Probes.stop
18
18
  end
19
19
 
20
20
  def self.initialize_appsignal(app)
@@ -2,6 +2,274 @@
2
2
 
3
3
  module Appsignal
4
4
  module Probes
5
+ class ProbeCollection
6
+ def initialize
7
+ @probes = {}
8
+ end
9
+
10
+ # @return [Integer] Number of probes that are registered.
11
+ def count
12
+ probes.count
13
+ end
14
+
15
+ # Clears all probes from the list.
16
+ # @return [void]
17
+ def clear
18
+ probes.clear
19
+ end
20
+
21
+ # Fetch a probe using its name.
22
+ # @param key [Symbol/String] The name of the probe to fetch.
23
+ # @return [Object] Returns the registered probe.
24
+ def [](key)
25
+ probes[key]
26
+ end
27
+
28
+ # @deprecated Use {Appsignal::Probes.register} instead.
29
+ def register(name, probe)
30
+ Appsignal::Utils::StdoutAndLoggerMessage.warning(
31
+ "The method 'Appsignal::Probes.probes.register' is deprecated. " \
32
+ "Use 'Appsignal::Probes.register' instead."
33
+ )
34
+ Appsignal::Probes.register(name, probe)
35
+ end
36
+
37
+ # @api private
38
+ def internal_register(name, probe)
39
+ if probes.key?(name)
40
+ logger.debug "A probe with the name `#{name}` is already " \
41
+ "registered. Overwriting the entry with the new probe."
42
+ end
43
+ probes[name] = probe
44
+ end
45
+
46
+ # @api private
47
+ def unregister(name)
48
+ probes.delete(name)
49
+ end
50
+
51
+ # @api private
52
+ def each(&block)
53
+ probes.each(&block)
54
+ end
55
+
56
+ private
57
+
58
+ attr_reader :probes
59
+
60
+ def logger
61
+ Appsignal.internal_logger
62
+ end
63
+ end
64
+
65
+ class << self
66
+ # @api private
67
+ def mutex
68
+ @mutex ||= Thread::Mutex.new
69
+ end
70
+
71
+ # @see ProbeCollection
72
+ # @return [ProbeCollection] Returns list of probes.
73
+ def probes
74
+ @probes ||= ProbeCollection.new
75
+ end
76
+
77
+ # Register a new minutely probe.
78
+ #
79
+ # Supported probe types are:
80
+ #
81
+ # - Lambda - A lambda is an object that listens to a `call` method call.
82
+ # This `call` method is called every minute.
83
+ # - Class - A class object is an object that listens to a `new` and
84
+ # `call` method call. The `new` method is called when the minutely
85
+ # probe thread is started to initialize all probes. This allows probes
86
+ # to load dependencies once beforehand. Their `call` method is called
87
+ # every minute.
88
+ # - Class instance - A class instance object is an object that listens to
89
+ # a `call` method call. The `call` method is called every minute.
90
+ #
91
+ # @example Register a new probe
92
+ # Appsignal::Probes.register :my_probe, lambda {}
93
+ #
94
+ # @example Overwrite an existing registered probe
95
+ # Appsignal::Probes.register :my_probe, lambda {}
96
+ # Appsignal::Probes.register :my_probe, lambda { puts "hello" }
97
+ #
98
+ # @example Add a lambda as a probe
99
+ # Appsignal::Probes.register :my_probe, lambda { puts "hello" }
100
+ # # "hello" # printed every minute
101
+ #
102
+ # @example Add a probe instance
103
+ # class MyProbe
104
+ # def initialize
105
+ # puts "started"
106
+ # end
107
+ #
108
+ # def call
109
+ # puts "called"
110
+ # end
111
+ # end
112
+ #
113
+ # Appsignal::Probes.register :my_probe, MyProbe.new
114
+ # # "started" # printed immediately
115
+ # # "called" # printed every minute
116
+ #
117
+ # @example Add a probe class
118
+ # class MyProbe
119
+ # def initialize
120
+ # # Add things that only need to be done on start up for this probe
121
+ # require "some/library/dependency"
122
+ # @cache = {} # initialize a local cache variable
123
+ # puts "started"
124
+ # end
125
+ #
126
+ # def call
127
+ # puts "called"
128
+ # end
129
+ # end
130
+ #
131
+ # Appsignal::Probes.register :my_probe, MyProbe
132
+ # Appsignal::Probes.start # This is called for you
133
+ # # "started" # Printed on Appsignal::Probes.start
134
+ # # "called" # Repeated every minute
135
+ #
136
+ # @param name [Symbol/String] Name of the probe. Can be used with
137
+ # {ProbeCollection#[]}. This name will be used in errors in the log and
138
+ # allows overwriting of probes by registering new ones with the same
139
+ # name.
140
+ # @param probe [Object] Any object that listens to the `call` method will
141
+ # be used as a probe.
142
+ # @return [void]
143
+ def register(name, probe)
144
+ probes.internal_register(name, probe)
145
+
146
+ initialize_probe(name, probe) if started?
147
+ end
148
+
149
+ # Unregister a probe that's registered with {register}.
150
+ # Can also be used to unregister automatically registered probes by the
151
+ # gem.
152
+ #
153
+ # @example Unregister probes
154
+ # # First register a probe
155
+ # Appsignal::Probes.register :my_probe, lambda {}
156
+ #
157
+ # # Then unregister a probe if needed
158
+ # Appsignal::Probes.unregister :my_probe
159
+ #
160
+ # @param name [Symbol/String] Name of the probe used to {register} the
161
+ # probe.
162
+ # @return [void]
163
+ def unregister(name)
164
+ probes.unregister(name)
165
+
166
+ uninitialize_probe(name)
167
+ end
168
+
169
+ # @api private
170
+ def start
171
+ stop
172
+ @started = true
173
+ @thread = Thread.new do
174
+ # Advise multi-threaded app servers to ignore this thread
175
+ # for the purposes of fork safety warnings
176
+ if Thread.current.respond_to?(:thread_variable_set)
177
+ Thread.current.thread_variable_set(:fork_safe, true)
178
+ end
179
+
180
+ sleep initial_wait_time
181
+ initialize_probes
182
+ loop do
183
+ logger = Appsignal.internal_logger
184
+ mutex.synchronize do
185
+ logger.debug("Gathering minutely metrics with #{probe_instances.count} probes")
186
+ probe_instances.each do |name, probe|
187
+ logger.debug("Gathering minutely metrics with '#{name}' probe")
188
+ probe.call
189
+ rescue => ex
190
+ logger.error "Error in minutely probe '#{name}': #{ex}"
191
+ logger.debug ex.backtrace.join("\n")
192
+ end
193
+ end
194
+ sleep wait_time
195
+ end
196
+ end
197
+ end
198
+
199
+ # Returns if the probes thread has been started. If the value is false or
200
+ # nil, it has not been started yet.
201
+ #
202
+ # @return [Boolean, nil]
203
+ def started?
204
+ @started
205
+ end
206
+
207
+ # Stop the minutely probes mechanism. Stop the thread and clear all probe
208
+ # instances.
209
+ def stop
210
+ defined?(@thread) && @thread.kill
211
+ @started = false
212
+ probe_instances.clear
213
+ end
214
+
215
+ # @api private
216
+ def wait_time
217
+ 60 - Time.now.sec
218
+ end
219
+
220
+ private
221
+
222
+ def initial_wait_time
223
+ remaining_seconds = 60 - Time.now.sec
224
+ return remaining_seconds if remaining_seconds > 30
225
+
226
+ remaining_seconds + 60
227
+ end
228
+
229
+ def initialize_probes
230
+ probes.each do |name, probe|
231
+ initialize_probe(name, probe)
232
+ end
233
+ end
234
+
235
+ def initialize_probe(name, probe)
236
+ if probe.respond_to? :new
237
+ instance = probe.new
238
+ klass = probe
239
+ else
240
+ instance = probe
241
+ klass = instance.class
242
+ end
243
+ unless dependencies_present?(klass)
244
+ Appsignal.internal_logger.debug "Skipping '#{name}' probe, " \
245
+ "#{klass}.dependency_present? returned falsy"
246
+ return
247
+ end
248
+ mutex.synchronize do
249
+ probe_instances[name] = instance
250
+ end
251
+ rescue => error
252
+ logger = Appsignal.internal_logger
253
+ logger.error "Error while initializing minutely probe '#{name}': #{error}"
254
+ logger.debug error.backtrace.join("\n")
255
+ end
256
+
257
+ def uninitialize_probe(name)
258
+ mutex.synchronize do
259
+ probe_instances.delete(name)
260
+ end
261
+ end
262
+
263
+ def dependencies_present?(probe)
264
+ return true unless probe.respond_to? :dependencies_present?
265
+
266
+ probe.dependencies_present?
267
+ end
268
+
269
+ def probe_instances
270
+ @probe_instances ||= {}
271
+ end
272
+ end
5
273
  end
6
274
  end
7
275
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Appsignal
4
+ module Utils
5
+ # @api private
6
+ module StdoutAndLoggerMessage
7
+ def self.warning(message, logger = Appsignal.internal_logger)
8
+ Kernel.warn "appsignal WARNING: #{message}"
9
+ logger.warn message
10
+ end
11
+
12
+ def stdout_and_logger_warning(message, logger = Appsignal.internal_logger)
13
+ Appsignal::Utils::StdoutAndLoggerMessage.warning(message, logger)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "appsignal/utils/deprecation_message"
3
+ require "appsignal/utils/stdout_and_logger_message"
4
4
  require "appsignal/utils/data"
5
5
  require "appsignal/utils/hash_sanitizer"
6
6
  require "appsignal/utils/integration_logger"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Appsignal
4
- VERSION = "3.7.0"
4
+ VERSION = "3.7.1"
5
5
  end
data/lib/appsignal.rb CHANGED
@@ -5,7 +5,7 @@ require "securerandom"
5
5
  require "stringio"
6
6
 
7
7
  require "appsignal/logger"
8
- require "appsignal/utils/deprecation_message"
8
+ require "appsignal/utils/stdout_and_logger_message"
9
9
  require "appsignal/helpers/instrumentation"
10
10
  require "appsignal/helpers/metrics"
11
11
 
@@ -120,7 +120,7 @@ module Appsignal
120
120
  Appsignal::Environment.report_enabled("allocation_tracking")
121
121
  end
122
122
 
123
- Appsignal::Minutely.start if config[:enable_minutely_probes]
123
+ Appsignal::Probes.start if config[:enable_minutely_probes]
124
124
 
125
125
  collect_environment_metadata
126
126
  else
@@ -152,6 +152,7 @@ module Appsignal
152
152
  internal_logger.debug("Stopping appsignal")
153
153
  end
154
154
  Appsignal::Extension.stop
155
+ Appsignal::Probes.stop
155
156
  end
156
157
 
157
158
  def forked
@@ -218,7 +219,10 @@ module Appsignal
218
219
  else
219
220
  Appsignal::Config::DEFAULT_LOG_LEVEL
220
221
  end
221
- internal_logger << @in_memory_log.string if @in_memory_log
222
+ return unless @in_memory_log
223
+
224
+ internal_logger << @in_memory_log.string
225
+ @in_memory_log = nil
222
226
  end
223
227
 
224
228
  # Returns if the C-extension was loaded properly.
@@ -287,6 +291,22 @@ module Appsignal
287
291
  end
288
292
  Appsignal::Environment.report_supported_gems
289
293
  end
294
+
295
+ # Alias constants that have moved with a warning message that points to the
296
+ # place to update the reference.
297
+ def const_missing(name)
298
+ case name
299
+ when :Minutely
300
+ callers = caller
301
+ Appsignal::Utils::StdoutAndLoggerMessage.warning \
302
+ "The constant Appsignal::Minutely has been deprecated. " \
303
+ "Please update the constant name to Appsignal::Probes " \
304
+ "in the following file to remove this message.\n#{callers.first}"
305
+ Appsignal::Probes
306
+ else
307
+ super
308
+ end
309
+ end
290
310
  end
291
311
  end
292
312
 
@@ -300,7 +320,6 @@ require "appsignal/event_formatter"
300
320
  require "appsignal/hooks"
301
321
  require "appsignal/probes"
302
322
  require "appsignal/marker"
303
- require "appsignal/minutely"
304
323
  require "appsignal/garbage_collection"
305
324
  require "appsignal/integrations/railtie" if defined?(::Rails)
306
325
  require "appsignal/transaction"
@@ -757,7 +757,10 @@ describe Appsignal::Config do
757
757
  let(:out_stream) { std_stream }
758
758
  let(:output) { out_stream.read }
759
759
  let(:config) { project_fixture_config("production", :log_path => log_path) }
760
- subject { capture_stdout(out_stream) { config.log_file_path } }
760
+
761
+ def log_file_path
762
+ capture_stdout(out_stream) { config.log_file_path }
763
+ end
761
764
 
762
765
  context "when path is writable" do
763
766
  let(:log_path) { File.join(tmp_dir, "writable-path") }
@@ -765,11 +768,11 @@ describe Appsignal::Config do
765
768
  after { FileUtils.rm_rf(log_path) }
766
769
 
767
770
  it "returns log file path" do
768
- expect(subject).to eq File.join(log_path, "appsignal.log")
771
+ expect(log_file_path).to eq File.join(log_path, "appsignal.log")
769
772
  end
770
773
 
771
774
  it "prints no warning" do
772
- subject
775
+ log_file_path
773
776
  expect(output).to be_empty
774
777
  end
775
778
  end
@@ -783,28 +786,47 @@ describe Appsignal::Config do
783
786
  before { FileUtils.chmod(0o777, system_tmp_dir) }
784
787
 
785
788
  it "returns returns the tmp location" do
786
- expect(subject).to eq(File.join(system_tmp_dir, "appsignal.log"))
789
+ expect(log_file_path).to eq(File.join(system_tmp_dir, "appsignal.log"))
787
790
  end
788
791
 
789
792
  it "prints a warning" do
790
- subject
793
+ log_file_path
791
794
  expect(output).to include "appsignal: Unable to log to '#{log_path}'. " \
792
795
  "Logging to '#{system_tmp_dir}' instead."
793
796
  end
797
+
798
+ it "prints a warning once" do
799
+ capture_stdout(out_stream) do
800
+ log_file_path
801
+ log_file_path
802
+ end
803
+ message = "appsignal: Unable to log to '#{log_path}'. " \
804
+ "Logging to '#{system_tmp_dir}' instead."
805
+ expect(output.scan(message).count).to eq(1)
806
+ end
794
807
  end
795
808
 
796
809
  context "when the /tmp fallback path is not writable" do
797
810
  before { FileUtils.chmod(0o555, system_tmp_dir) }
798
811
 
799
812
  it "returns nil" do
800
- expect(subject).to be_nil
813
+ expect(log_file_path).to be_nil
801
814
  end
802
815
 
803
816
  it "prints a warning" do
804
- subject
817
+ log_file_path
805
818
  expect(output).to include "appsignal: Unable to log to '#{log_path}' " \
806
819
  "or the '#{system_tmp_dir}' fallback."
807
820
  end
821
+
822
+ it "prints a warning once" do
823
+ capture_stdout(out_stream) do
824
+ log_file_path
825
+ log_file_path
826
+ end
827
+ message = "appsignal: Unable to log to '#{log_path}' or the '#{system_tmp_dir}' fallback."
828
+ expect(output.scan(message).count).to eq(1)
829
+ end
808
830
  end
809
831
  end
810
832
 
@@ -819,11 +841,11 @@ describe Appsignal::Config do
819
841
 
820
842
  context "when root_path is set" do
821
843
  it "returns returns the project log location" do
822
- expect(subject).to eq File.join(config.root_path, "log/appsignal.log")
844
+ expect(log_file_path).to eq File.join(config.root_path, "log/appsignal.log")
823
845
  end
824
846
 
825
847
  it "prints no warning" do
826
- subject
848
+ log_file_path
827
849
  expect(output).to be_empty
828
850
  end
829
851
  end
@@ -883,7 +905,7 @@ describe Appsignal::Config do
883
905
  end
884
906
 
885
907
  it "returns real path of log path" do
886
- expect(subject).to eq(File.join(real_path, "appsignal.log"))
908
+ expect(log_file_path).to eq(File.join(real_path, "appsignal.log"))
887
909
  end
888
910
  end
889
911
  end
@@ -93,7 +93,7 @@ describe Appsignal::Hooks::GvlHook do
93
93
  it "is added to minutely probes" do
94
94
  Appsignal::Hooks.load_hooks
95
95
 
96
- expect(Appsignal::Minutely.probes[:gvl]).to be Appsignal::Probes::GvlProbe
96
+ expect(Appsignal::Probes.probes[:gvl]).to be Appsignal::Probes::GvlProbe
97
97
  end
98
98
  end
99
99
  end