appsignal 0.5.1 → 0.5.3
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 +15 -0
- data/CHANGELOG.md +6 -0
- data/Rakefile +1 -0
- data/lib/appsignal.rb +1 -1
- data/lib/appsignal/agent.rb +34 -22
- data/lib/appsignal/aggregator.rb +0 -1
- data/lib/appsignal/aggregator/post_processor.rb +4 -2
- data/lib/appsignal/auth_check.rb +14 -6
- data/lib/appsignal/cli.rb +49 -7
- data/lib/appsignal/config.rb +14 -3
- data/lib/appsignal/integrations/passenger.rb +11 -0
- data/lib/appsignal/middleware.rb +0 -1
- data/lib/appsignal/middleware/active_record_sanitizer.rb +0 -2
- data/lib/appsignal/railtie.rb +9 -1
- data/lib/appsignal/to_appsignal_hash.rb +0 -2
- data/lib/appsignal/transaction.rb +0 -1
- data/lib/appsignal/transaction/transaction_formatter.rb +1 -3
- data/lib/appsignal/version.rb +1 -1
- data/lib/generators/appsignal/appsignal_generator.rb +25 -11
- data/lib/generators/appsignal/templates/appsignal.yml +23 -2
- data/spec/appsignal/agent_spec.rb +59 -8
- data/spec/appsignal/cli_spec.rb +10 -4
- data/spec/appsignal/integrations/passenger_spec.rb +20 -0
- data/spec/appsignal/middleware/active_record_sanitizer_spec.rb +2 -0
- data/spec/generators/appsignal/appsignal_generator_spec.rb +13 -61
- metadata +29 -47
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OGM1YThiMDUxODYwMmYxNzc3NGFhM2FkMzliNmM2NTAxY2FhMDA1Mw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZjljZWQ2YzBiMWUzNTc1ZThkYjAxYzIwZTA3YzBkZDliNDY5ZjhiZg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MmE4YWQ3MzNhYmQ4NGNlZTJlZDM5MDVkNGZlN2RjOWE5ODk3OTg5NDg3NzIw
|
10
|
+
ZjUwYTAxYWI4OTkzMWUwNzMwYzMyMmFjZTVkYjRhMWUzZGU1OTY4Y2ExZjY1
|
11
|
+
ZGFkYmQ1Zjg2ZWI2YmQ0OTgxZTk4YzBmYjcxZDcwNzE1Y2NmNjM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OWFjYjM1MWM3NDgyNmFlZjk2MTE2NWNlZGZjNzkxOGY5ZGNiOTBkMzZhZGJj
|
14
|
+
MDY0NmMwYTQ4ZmU2YjY3N2RhZDBkZDg4MzllZjczNTA4YzUyM2VkN2FkODMw
|
15
|
+
NjZhYTA3ZTk3ZjY1NzUyOGY4NTEyOTcxMTI2ZDVkODg5Nzk2Mzc=
|
data/CHANGELOG.md
ADDED
data/Rakefile
CHANGED
data/lib/appsignal.rb
CHANGED
@@ -51,7 +51,6 @@ module Appsignal
|
|
51
51
|
def active?
|
52
52
|
config && config[:active] == true
|
53
53
|
end
|
54
|
-
|
55
54
|
end
|
56
55
|
end
|
57
56
|
|
@@ -61,6 +60,7 @@ require 'appsignal/auth_check'
|
|
61
60
|
require 'appsignal/cli'
|
62
61
|
require 'appsignal/config'
|
63
62
|
require 'appsignal/exception_notification'
|
63
|
+
require 'appsignal/integrations/passenger'
|
64
64
|
require 'appsignal/listener'
|
65
65
|
require 'appsignal/marker'
|
66
66
|
require 'appsignal/middleware'
|
data/lib/appsignal/agent.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Appsignal
|
2
2
|
class Agent
|
3
|
-
ACTION = 'log_entries'
|
3
|
+
ACTION = 'log_entries'.freeze
|
4
4
|
|
5
|
-
attr_reader :aggregator, :active, :sleep_time, :transmitter
|
5
|
+
attr_reader :aggregator, :thread, :active, :sleep_time, :transmitter
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
return unless Appsignal.active?
|
@@ -12,6 +12,7 @@ module Appsignal
|
|
12
12
|
@thread = Thread.new do
|
13
13
|
while true do
|
14
14
|
send_queue if aggregator.has_transactions?
|
15
|
+
Appsignal.logger.debug("[#{$$}] Sleeping #{sleep_time}")
|
15
16
|
sleep(sleep_time)
|
16
17
|
end
|
17
18
|
end
|
@@ -20,7 +21,7 @@ module Appsignal
|
|
20
21
|
ACTION,
|
21
22
|
Appsignal.config.fetch(:api_key)
|
22
23
|
)
|
23
|
-
Appsignal.logger.info
|
24
|
+
Appsignal.logger.info("[#{$$}] Started the Appsignal agent")
|
24
25
|
end
|
25
26
|
|
26
27
|
def enqueue(transaction)
|
@@ -28,7 +29,7 @@ module Appsignal
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def send_queue
|
31
|
-
Appsignal.logger.debug
|
32
|
+
Appsignal.logger.debug("[#{$$}] Sending queue")
|
32
33
|
current_aggregator = aggregator
|
33
34
|
@aggregator = Aggregator.new
|
34
35
|
begin
|
@@ -36,14 +37,30 @@ module Appsignal
|
|
36
37
|
rescue Exception => ex
|
37
38
|
Appsignal.logger.error "#{ex.class} while sending queue: #{ex.message}"
|
38
39
|
Appsignal.logger.error ex.backtrace.join('\n')
|
39
|
-
stop_logging
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def forked!
|
44
|
+
@forked = true
|
45
|
+
@aggregator = Aggregator.new
|
46
|
+
Appsignal.logger.info("[#{$$}] Forked the Appsignal agent")
|
47
|
+
end
|
48
|
+
|
49
|
+
def forked?
|
50
|
+
@forked ||= false
|
51
|
+
end
|
52
|
+
|
53
|
+
def shutdown(send_current_queue=false)
|
54
|
+
Appsignal.logger.info("[#{$$}] Shutting down the agent")
|
55
|
+
ActiveSupport::Notifications.unsubscribe(Appsignal.subscriber)
|
56
|
+
Thread.kill(thread) if thread
|
57
|
+
send_queue if send_current_queue && @aggregator.has_transactions?
|
58
|
+
end
|
59
|
+
|
43
60
|
protected
|
44
61
|
|
45
62
|
def handle_result(code)
|
46
|
-
Appsignal.logger.debug "Queue sent, response code: #{code}"
|
63
|
+
Appsignal.logger.debug "[#{$$}] Queue sent, response code: #{code}"
|
47
64
|
case code.to_i
|
48
65
|
when 200 # ok
|
49
66
|
when 420 # Enhance Your Calm
|
@@ -51,28 +68,23 @@ module Appsignal
|
|
51
68
|
when 413 # Request Entity Too Large
|
52
69
|
@sleep_time = sleep_time / 1.5
|
53
70
|
when 429
|
54
|
-
Appsignal.logger.error "Too many requests sent"
|
55
|
-
|
71
|
+
Appsignal.logger.error "[#{$$}] Too many requests sent"
|
72
|
+
shutdown
|
56
73
|
when 406
|
57
|
-
Appsignal.logger.error "Your appsignal gem cannot
|
58
|
-
"the API anymore, please upgrade."
|
59
|
-
|
74
|
+
Appsignal.logger.error "[#{$$}] Your appsignal gem cannot "\
|
75
|
+
"communicate with the API anymore, please upgrade."
|
76
|
+
shutdown
|
60
77
|
when 402
|
61
|
-
Appsignal.logger.error "Payment required"
|
62
|
-
|
78
|
+
Appsignal.logger.error "[#{$$}] Payment required"
|
79
|
+
shutdown
|
63
80
|
when 401
|
64
|
-
Appsignal.logger.error "API token cannot be authorized"
|
65
|
-
|
81
|
+
Appsignal.logger.error "[#{$$}] API token cannot be authorized"
|
82
|
+
shutdown
|
66
83
|
else
|
67
|
-
Appsignal.logger.error "Unknown Appsignal response code:
|
84
|
+
Appsignal.logger.error "[#{$$}] Unknown Appsignal response code: "\
|
85
|
+
"'#{code}'"
|
68
86
|
end
|
69
87
|
end
|
70
88
|
|
71
|
-
def stop_logging
|
72
|
-
Appsignal.logger.info("Disengaging the agent")
|
73
|
-
ActiveSupport::Notifications.unsubscribe(Appsignal.subscriber)
|
74
|
-
Thread.kill(@thread)
|
75
|
-
end
|
76
|
-
|
77
89
|
end
|
78
90
|
end
|
data/lib/appsignal/aggregator.rb
CHANGED
@@ -19,9 +19,11 @@ module Appsignal
|
|
19
19
|
Middleware::Chain.new do |chain|
|
20
20
|
chain.add Appsignal::Middleware::DeleteBlanks
|
21
21
|
chain.add Appsignal::Middleware::ActionViewSanitizer
|
22
|
-
|
22
|
+
if defined?(ActiveRecord)
|
23
|
+
require 'appsignal/middleware/active_record_sanitizer'
|
24
|
+
chain.add Appsignal::Middleware::ActiveRecordSanitizer
|
25
|
+
end
|
23
26
|
end
|
24
27
|
end
|
25
|
-
|
26
28
|
end
|
27
29
|
end
|
data/lib/appsignal/auth_check.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
module Appsignal
|
2
2
|
class AuthCheck
|
3
|
-
|
4
|
-
|
3
|
+
ACTION = 'auth'.freeze
|
4
|
+
|
5
|
+
attr_reader :environment, :logger
|
5
6
|
attr_accessor :transmitter
|
6
|
-
|
7
|
+
delegate :uri, :to => :transmitter
|
8
|
+
|
9
|
+
def initialize(*args)
|
10
|
+
@environment = args.shift
|
11
|
+
options = args.empty? ? {} : args.last
|
12
|
+
@config = options[:config]
|
13
|
+
@logger = options[:logger]
|
14
|
+
end
|
7
15
|
|
8
|
-
def
|
9
|
-
@config
|
16
|
+
def config
|
17
|
+
@config ||= Appsignal::Config.new(Rails.root, environment, logger).load
|
10
18
|
end
|
11
19
|
|
12
20
|
def perform
|
13
21
|
self.transmitter = Appsignal::Transmitter.new(
|
14
|
-
|
22
|
+
config[:endpoint], ACTION, config[:api_key]
|
15
23
|
)
|
16
24
|
transmitter.transmit({})
|
17
25
|
end
|
data/lib/appsignal/cli.rb
CHANGED
@@ -4,12 +4,14 @@ require 'yaml'
|
|
4
4
|
require 'rails'
|
5
5
|
require 'appsignal/version'
|
6
6
|
require 'appsignal/config'
|
7
|
+
require 'appsignal/auth_check'
|
7
8
|
require 'appsignal/marker'
|
8
9
|
require 'appsignal/transmitter'
|
9
10
|
|
10
11
|
module Appsignal
|
11
12
|
class CLI
|
12
|
-
AVAILABLE_COMMANDS = %w(
|
13
|
+
AVAILABLE_COMMANDS = %w(notify_of_deploy api_check).freeze
|
14
|
+
PROJECT_ROOT = File.join(File.dirname(__FILE__), '..', '..').freeze
|
13
15
|
|
14
16
|
class << self
|
15
17
|
def run(argv=ARGV)
|
@@ -24,12 +26,14 @@ module Appsignal
|
|
24
26
|
|
25
27
|
global.order!(argv)
|
26
28
|
command = argv.shift
|
27
|
-
if command
|
28
|
-
if AVAILABLE_COMMANDS.include?(command)
|
29
|
+
if command
|
30
|
+
if AVAILABLE_COMMANDS.include?(command)
|
29
31
|
commands[command].parse!(argv)
|
30
|
-
case
|
32
|
+
case command.to_sym
|
31
33
|
when :notify_of_deploy
|
32
34
|
notify_of_deploy(options)
|
35
|
+
when :api_check
|
36
|
+
api_check
|
33
37
|
end
|
34
38
|
else
|
35
39
|
puts "Command '#{command}' does not exist, run appsignal -h to see the help"
|
@@ -48,7 +52,7 @@ module Appsignal
|
|
48
52
|
|
49
53
|
def global_option_parser(options)
|
50
54
|
OptionParser.new do |o|
|
51
|
-
o.banner =
|
55
|
+
o.banner = 'Usage: appsignal <command> [options]'
|
52
56
|
|
53
57
|
o.on '-v', '--version', "Print version and exit" do |arg|
|
54
58
|
puts "Appsignal #{Appsignal::VERSION}"
|
@@ -68,8 +72,7 @@ module Appsignal
|
|
68
72
|
def command_option_parser(options)
|
69
73
|
{
|
70
74
|
'notify_of_deploy' => OptionParser.new do |o|
|
71
|
-
o.banner =
|
72
|
-
options[:command] = :notify_of_deploy
|
75
|
+
o.banner = 'Usage: appsignal notify_of_deploy [options]'
|
73
76
|
|
74
77
|
o.on '--revision=<revision>', "The revision you're deploying" do |arg|
|
75
78
|
options[:revision] = arg
|
@@ -86,6 +89,13 @@ module Appsignal
|
|
86
89
|
o.on '--environment=<rails_env>', "The environment you're deploying to" do |arg|
|
87
90
|
options[:environment] = arg
|
88
91
|
end
|
92
|
+
end,
|
93
|
+
'api_check' => OptionParser.new do |o|
|
94
|
+
o.banner = %q(Usage: appsignal api_check
|
95
|
+
|
96
|
+
This command checks the config file in config/appsignal.yml
|
97
|
+
and tries to use the api_keys available in each environment to
|
98
|
+
see if they work.)
|
89
99
|
end
|
90
100
|
}
|
91
101
|
end
|
@@ -104,6 +114,38 @@ module Appsignal
|
|
104
114
|
).transmit
|
105
115
|
end
|
106
116
|
|
117
|
+
def api_check
|
118
|
+
puts "\nReading config/appsignal.yml and attempting to use the config "\
|
119
|
+
"in order to check if it is set up the way it should be.\n\n"
|
120
|
+
Appsignal::Config.new(
|
121
|
+
PROJECT_ROOT, '', logger
|
122
|
+
).load_all.each do |env, config|
|
123
|
+
auth_check = ::Appsignal::AuthCheck.new(
|
124
|
+
env,
|
125
|
+
{:config => config, :logger => logger}
|
126
|
+
)
|
127
|
+
puts "[#{env}]"
|
128
|
+
puts ' * Configured not to monitor this environment' unless config[:active]
|
129
|
+
begin
|
130
|
+
result = auth_check.perform
|
131
|
+
case result
|
132
|
+
when '200'
|
133
|
+
puts ' * AppSignal has confirmed authorisation!'
|
134
|
+
when '401'
|
135
|
+
puts ' * API key not valid with AppSignal...'
|
136
|
+
else
|
137
|
+
puts ' * Could not confirm authorisation: '\
|
138
|
+
"#{result.nil? ? 'nil' : result}"
|
139
|
+
end
|
140
|
+
rescue Exception => e
|
141
|
+
puts "Something went wrong while trying to "\
|
142
|
+
"authenticate with AppSignal: #{e}"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
protected
|
148
|
+
|
107
149
|
def validate_required_options(required_options, options)
|
108
150
|
missing = required_options.select do |required_option|
|
109
151
|
options[required_option].blank?
|
data/lib/appsignal/config.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'yaml'
|
1
3
|
require 'appsignal/careful_logger'
|
4
|
+
require 'erb'
|
2
5
|
|
3
6
|
module Appsignal
|
4
|
-
|
5
7
|
class Config
|
6
8
|
include Appsignal::CarefulLogger
|
7
9
|
|
@@ -28,6 +30,17 @@ module Appsignal
|
|
28
30
|
DEFAULT_CONFIG.merge(configurations[env])
|
29
31
|
end
|
30
32
|
|
33
|
+
def load_all
|
34
|
+
return unless load_configurations_from_disk
|
35
|
+
return unless used_unique_api_keys
|
36
|
+
|
37
|
+
{}.tap do |result|
|
38
|
+
configurations.each do |env, config|
|
39
|
+
result[env] = DEFAULT_CONFIG.merge(config)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
31
44
|
protected
|
32
45
|
|
33
46
|
def load_configurations_from_disk
|
@@ -57,7 +70,5 @@ module Appsignal
|
|
57
70
|
carefully_log_error "config for '#{env}' not found"
|
58
71
|
false
|
59
72
|
end
|
60
|
-
|
61
73
|
end
|
62
|
-
|
63
74
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
if defined?(PhusionPassenger)
|
2
|
+
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
3
|
+
Appsignal.logger.debug("[#{$$}] starting worker process")
|
4
|
+
Appsignal.agent.forked!
|
5
|
+
end
|
6
|
+
|
7
|
+
PhusionPassenger.on_event(:stopping_worker_process) do
|
8
|
+
Appsignal.logger.debug("[#{$$}] stopping worker process")
|
9
|
+
Appsignal.agent.shutdown(true)
|
10
|
+
end
|
11
|
+
end
|
data/lib/appsignal/middleware.rb
CHANGED
data/lib/appsignal/railtie.rb
CHANGED
@@ -1,16 +1,24 @@
|
|
1
1
|
module Appsignal
|
2
2
|
class Railtie < Rails::Railtie
|
3
|
+
|
3
4
|
initializer "appsignal.configure_rails_initialization" do |app|
|
4
5
|
# Some apps when run from the console do not have Rails.root set, there's
|
5
6
|
# currently no way to spec this.
|
6
7
|
if Rails.root
|
7
|
-
|
8
|
+
if File.writable?('log')
|
9
|
+
output = Rails.root.join('log/appsignal.log')
|
10
|
+
else
|
11
|
+
output = STDOUT
|
12
|
+
end
|
13
|
+
Appsignal.logger = Logger.new(output).tap do |l|
|
8
14
|
l.level = Logger::INFO
|
9
15
|
end
|
10
16
|
Appsignal.flush_in_memory_log
|
11
17
|
end
|
12
18
|
|
13
19
|
if Appsignal.active?
|
20
|
+
Appsignal.logger.info("Activating appsignal-#{Appsignal::VERSION}")
|
21
|
+
at_exit { Appsignal.agent.shutdown(true) }
|
14
22
|
app.middleware.
|
15
23
|
insert_before(ActionDispatch::RemoteIp, Appsignal::Listener)
|
16
24
|
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'delegate'
|
2
2
|
|
3
3
|
module Appsignal
|
4
4
|
class TransactionFormatter < SimpleDelegator
|
5
|
-
|
6
5
|
def initialize(transaction)
|
7
6
|
super(transaction)
|
8
7
|
end
|
@@ -54,6 +53,5 @@ module Appsignal
|
|
54
53
|
def add_events_to_hash!
|
55
54
|
hash[:events] = events.map(&:to_appsignal_hash)
|
56
55
|
end
|
57
|
-
|
58
56
|
end
|
59
57
|
end
|
data/lib/appsignal/version.rb
CHANGED
@@ -1,26 +1,32 @@
|
|
1
1
|
require 'appsignal'
|
2
2
|
|
3
3
|
class AppsignalGenerator < Rails::Generators::Base
|
4
|
+
EXCLUDED_ENVIRONMENTS = [:test].freeze
|
5
|
+
|
4
6
|
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
argument :environment, :type => :string
|
5
8
|
argument :push_key, :type => :string
|
6
|
-
class_option :environment, :type => :string, :default => 'production',
|
7
|
-
:desc => 'Install AppSignal for a different environment'
|
8
|
-
|
9
9
|
desc "Install the config file for AppSignal with your PUSH_KEY."
|
10
|
+
|
10
11
|
def copy_config_file
|
11
12
|
template_file = 'appsignal.yml'
|
12
13
|
appsignal_file = File.join('config', template_file)
|
13
14
|
if File.exists?(appsignal_file)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
say_status(:error, "Looks like you already have a config file.", :red)
|
16
|
+
say_status(:error, "Add the following to config/appsignal.yml:\n\n", :red)
|
17
|
+
say_status(:error, "#{environment}:", :red)
|
18
|
+
say_status(:error, " api_key: #{push_key}\n\n", :red)
|
19
|
+
say_status(:info, "Then run:\n\n", :red)
|
20
|
+
say_status(:info, " rake appsignal:check", :red)
|
19
21
|
else
|
20
22
|
template template_file, appsignal_file
|
23
|
+
capyistrano_install
|
24
|
+
check_key
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
28
|
+
protected
|
29
|
+
|
24
30
|
def capyistrano_install
|
25
31
|
deploy_file = File.expand_path(File.join('config', 'deploy.rb'))
|
26
32
|
cap_file = File.expand_path('Capfile')
|
@@ -39,7 +45,7 @@ class AppsignalGenerator < Rails::Generators::Base
|
|
39
45
|
|
40
46
|
def check_key
|
41
47
|
begin
|
42
|
-
auth_check = ::Appsignal::AuthCheck.new(
|
48
|
+
auth_check = ::Appsignal::AuthCheck.new(environment)
|
43
49
|
result = auth_check.perform
|
44
50
|
if result == '200'
|
45
51
|
say_status :success, "AppSignal has confirmed authorisation!"
|
@@ -47,7 +53,7 @@ class AppsignalGenerator < Rails::Generators::Base
|
|
47
53
|
say_status :error, "Push key not valid with AppSignal...", :red
|
48
54
|
else
|
49
55
|
say_status :error, "Could not confirm authorisation: "\
|
50
|
-
"#{result.nil? ? 'nil' : result}
|
56
|
+
"#{result.nil? ? 'nil' : result}", :red
|
51
57
|
end
|
52
58
|
rescue Exception => e
|
53
59
|
say_status :error, "Something went wrong while trying to authenticate "\
|
@@ -57,9 +63,17 @@ class AppsignalGenerator < Rails::Generators::Base
|
|
57
63
|
|
58
64
|
private
|
59
65
|
|
66
|
+
alias :selected_environment :environment
|
67
|
+
|
68
|
+
def environments
|
69
|
+
@environments ||= Dir.glob(
|
70
|
+
File.join(%w(. config environments *.rb))
|
71
|
+
).map { |o| File.basename(o, ".rb").to_sym } - EXCLUDED_ENVIRONMENTS
|
72
|
+
end
|
73
|
+
|
60
74
|
def environment_setup?(config_file)
|
61
75
|
file_contents = File.read(config_file)
|
62
|
-
file_contents =~ Regexp.new("#{
|
76
|
+
file_contents =~ Regexp.new("#{environment}:")
|
63
77
|
end
|
64
78
|
|
65
79
|
# As based on Thor's template method
|
@@ -1,4 +1,25 @@
|
|
1
|
-
|
1
|
+
---
|
2
|
+
# Unlisted environments will not be visible on the AppSignal site,
|
3
|
+
# Active environments count towards the account plan limit.
|
4
|
+
<%- environments.each do |environment| -%>
|
5
|
+
<%= environment %>:
|
6
|
+
<%- if selected_environment.to_sym == environment -%>
|
7
|
+
# The API key used by the AppSignal gem to push this specific environment to
|
8
|
+
# AppSignal. (required)
|
9
|
+
#
|
10
|
+
# It is possible to use ERB.
|
11
|
+
# api_key: "<%%= ENV['APPSIGNAL_API_KEY'] %>"
|
2
12
|
api_key: "<%= push_key %>"
|
13
|
+
|
14
|
+
# The cuttoff point above which a request is considered slow. (default: 200)
|
15
|
+
# slow_request_threshold: 200
|
16
|
+
|
17
|
+
# Change whether this environment should be monitored. (default: false)
|
3
18
|
active: true
|
4
|
-
|
19
|
+
<%- else -%>
|
20
|
+
# Go to https://appsignal.com if you want to monitor your <%= environment %>
|
21
|
+
# environment to obtain an api key.
|
22
|
+
# api_key: <<%= environment.upcase %>-API-KEY>
|
23
|
+
active: false
|
24
|
+
<%- end -%>
|
25
|
+
<%- end -%>
|
@@ -31,7 +31,6 @@ describe Appsignal::Agent do
|
|
31
31
|
PostProcessingException.new('Message')
|
32
32
|
)
|
33
33
|
|
34
|
-
subject.should_receive(:stop_logging)
|
35
34
|
Appsignal.logger.should_receive(:error).
|
36
35
|
with('PostProcessingException while sending queue: Message').
|
37
36
|
once
|
@@ -44,7 +43,7 @@ describe Appsignal::Agent do
|
|
44
43
|
subject.transmitter.stub(:transmit).and_raise(
|
45
44
|
Exception.new('Message')
|
46
45
|
)
|
47
|
-
|
46
|
+
|
48
47
|
Appsignal.logger.should_receive(:error).
|
49
48
|
with('Exception while sending queue: Message').
|
50
49
|
once
|
@@ -56,6 +55,58 @@ describe Appsignal::Agent do
|
|
56
55
|
after { subject.send_queue }
|
57
56
|
end
|
58
57
|
|
58
|
+
describe "#shutdown" do
|
59
|
+
before do
|
60
|
+
ActiveSupport::Notifications.should_receive(:unsubscribe).with(Appsignal.subscriber)
|
61
|
+
Thread.should_receive(:kill).with(subject.thread)
|
62
|
+
end
|
63
|
+
|
64
|
+
context "when not sending the current queue" do
|
65
|
+
context "with an empty queue" do
|
66
|
+
it "should shutdown" do
|
67
|
+
subject.shutdown
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with a queue with transactions" do
|
72
|
+
it "should shutdown" do
|
73
|
+
subject.enqueue(slow_transaction)
|
74
|
+
subject.should_not_receive(:send_queue)
|
75
|
+
|
76
|
+
subject.shutdown
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "when the queue is to be sent" do
|
82
|
+
context "with an empty queue" do
|
83
|
+
it "should shutdown" do
|
84
|
+
subject.should_not_receive(:send_queue)
|
85
|
+
|
86
|
+
subject.shutdown(true)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "with a queue with transactions" do
|
91
|
+
it "should send the queue and shutdown" do
|
92
|
+
subject.enqueue(slow_transaction)
|
93
|
+
subject.should_receive(:send_queue)
|
94
|
+
|
95
|
+
subject.shutdown(true)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "when we're a child process" do
|
100
|
+
it "should shutdown" do
|
101
|
+
subject.stub(:forked? => true)
|
102
|
+
subject.should_not_receive(:send_queue)
|
103
|
+
|
104
|
+
subject.shutdown(true)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
59
110
|
describe '#handle_result' do
|
60
111
|
before { subject.aggregator.add(transaction) }
|
61
112
|
before { subject.instance_variable_set(:@sleep_time, 3.0) }
|
@@ -91,7 +142,7 @@ describe Appsignal::Agent do
|
|
91
142
|
let(:code) { '429' }
|
92
143
|
|
93
144
|
it "calls a stop to logging" do
|
94
|
-
subject.should_receive
|
145
|
+
subject.should_receive(:shutdown)
|
95
146
|
end
|
96
147
|
end
|
97
148
|
|
@@ -99,7 +150,7 @@ describe Appsignal::Agent do
|
|
99
150
|
let(:code) { '406' }
|
100
151
|
|
101
152
|
it "calls a stop to logging" do
|
102
|
-
subject.should_receive
|
153
|
+
subject.should_receive(:shutdown)
|
103
154
|
end
|
104
155
|
end
|
105
156
|
|
@@ -107,7 +158,7 @@ describe Appsignal::Agent do
|
|
107
158
|
let(:code) { '402' }
|
108
159
|
|
109
160
|
it "calls a stop to logging" do
|
110
|
-
subject.should_receive
|
161
|
+
subject.should_receive(:shutdown)
|
111
162
|
end
|
112
163
|
end
|
113
164
|
|
@@ -115,7 +166,7 @@ describe Appsignal::Agent do
|
|
115
166
|
let(:code) { '401' }
|
116
167
|
|
117
168
|
it "calls a stop to logging" do
|
118
|
-
subject.should_receive
|
169
|
+
subject.should_receive(:shutdown)
|
119
170
|
end
|
120
171
|
end
|
121
172
|
|
@@ -131,9 +182,9 @@ describe Appsignal::Agent do
|
|
131
182
|
end
|
132
183
|
end
|
133
184
|
|
134
|
-
describe "#
|
185
|
+
describe "#shutdown" do
|
135
186
|
it "does not raise exceptions" do
|
136
|
-
expect { subject.send
|
187
|
+
expect { subject.send(:shutdown) }.not_to raise_error
|
137
188
|
end
|
138
189
|
end
|
139
190
|
|
data/spec/appsignal/cli_spec.rb
CHANGED
@@ -50,14 +50,18 @@ describe Appsignal::CLI do
|
|
50
50
|
cli.run(['nonsense'])
|
51
51
|
}.should raise_error(SystemExit)
|
52
52
|
|
53
|
-
|
53
|
+
out_stream.string.should include "Command 'nonsense' does not exist, run "\
|
54
|
+
"appsignal -h to see the help"
|
54
55
|
end
|
55
56
|
|
57
|
+
# protected
|
58
|
+
|
56
59
|
describe "#validate_required_options" do
|
57
60
|
let(:required_options) { [:option_1, :option_2, :option_3] }
|
58
61
|
|
59
62
|
it "should do nothing with all options supplied" do
|
60
|
-
cli.
|
63
|
+
cli.send(
|
64
|
+
:validate_required_options,
|
61
65
|
required_options,
|
62
66
|
:option_1 => 1,
|
63
67
|
:option_2 => 2,
|
@@ -68,7 +72,8 @@ describe Appsignal::CLI do
|
|
68
72
|
|
69
73
|
it "should print a message with one option missing" do
|
70
74
|
lambda {
|
71
|
-
cli.
|
75
|
+
cli.send(
|
76
|
+
:validate_required_options,
|
72
77
|
required_options,
|
73
78
|
:option_1 => 1,
|
74
79
|
:option_2 => 2
|
@@ -79,7 +84,8 @@ describe Appsignal::CLI do
|
|
79
84
|
|
80
85
|
it "should print a message with multiple options missing" do
|
81
86
|
lambda {
|
82
|
-
cli.
|
87
|
+
cli.send(
|
88
|
+
:validate_required_options,
|
83
89
|
required_options,
|
84
90
|
:option_1 => 1,
|
85
91
|
:option_2 => ''
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe "Passenger integration" do
|
5
|
+
let(:file) { File.expand_path('lib/appsignal/integrations/passenger.rb') }
|
6
|
+
before(:all) { module PhusionPassenger ; end }
|
7
|
+
|
8
|
+
it "adds behavior to stopping_worker_process and starting_worker_process" do
|
9
|
+
PhusionPassenger.should_receive(:on_event).with(:starting_worker_process)
|
10
|
+
PhusionPassenger.should_receive(:on_event).with(:stopping_worker_process)
|
11
|
+
load file
|
12
|
+
end
|
13
|
+
|
14
|
+
context "without passenger" do
|
15
|
+
before(:all) { Object.send(:remove_const, :PhusionPassenger) }
|
16
|
+
|
17
|
+
specify { expect { PhusionPassenger }.to raise_error(NameError) }
|
18
|
+
specify { expect { load file }.to_not raise_error }
|
19
|
+
end
|
20
|
+
end
|
@@ -22,7 +22,7 @@ describe AppsignalGenerator do
|
|
22
22
|
authcheck = mock()
|
23
23
|
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
24
24
|
authcheck.should_receive(:perform).and_return('200')
|
25
|
-
run_generator_in_tmp %w(my_app_key)
|
25
|
+
run_generator_in_tmp %w(production my_app_key)
|
26
26
|
end
|
27
27
|
|
28
28
|
specify "should mention successful auth check" do
|
@@ -36,7 +36,7 @@ describe AppsignalGenerator do
|
|
36
36
|
authcheck = mock()
|
37
37
|
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
38
38
|
authcheck.should_receive(:perform).and_return('401')
|
39
|
-
run_generator_in_tmp %w(my_app_key)
|
39
|
+
run_generator_in_tmp %w(production my_app_key)
|
40
40
|
end
|
41
41
|
|
42
42
|
specify "should mention invalid key" do
|
@@ -50,12 +50,11 @@ describe AppsignalGenerator do
|
|
50
50
|
authcheck = mock()
|
51
51
|
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
52
52
|
authcheck.should_receive(:perform).and_return('500')
|
53
|
-
|
54
|
-
run_generator_in_tmp %w(my_app_key)
|
53
|
+
run_generator_in_tmp %w(production my_app_key)
|
55
54
|
end
|
56
55
|
|
57
56
|
specify "should mention failed check" do
|
58
|
-
@output.should include('Could not confirm authorisation: 500
|
57
|
+
@output.should include('error Could not confirm authorisation: 500')
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
@@ -63,7 +62,7 @@ describe AppsignalGenerator do
|
|
63
62
|
before do
|
64
63
|
prepare_destination
|
65
64
|
Appsignal::AuthCheck.should_receive(:new) { raise }
|
66
|
-
run_generator_in_tmp %w(my_app_key)
|
65
|
+
run_generator_in_tmp %w(production my_app_key)
|
67
66
|
end
|
68
67
|
|
69
68
|
specify "should mention internal failure" do
|
@@ -92,16 +91,13 @@ describe AppsignalGenerator do
|
|
92
91
|
context "without capistrano" do
|
93
92
|
before :all do
|
94
93
|
prepare_destination
|
95
|
-
run_generator_in_tmp %w(my_app_key)
|
94
|
+
run_generator_in_tmp %w(production my_app_key)
|
96
95
|
end
|
97
96
|
|
98
97
|
specify "config file is created" do
|
99
98
|
destination_root.should have_structure {
|
100
99
|
directory 'config' do
|
101
|
-
file 'appsignal.yml'
|
102
|
-
contains 'production:'
|
103
|
-
contains 'api_key: "my_app_key"'
|
104
|
-
end
|
100
|
+
file 'appsignal.yml'
|
105
101
|
no_file 'deploy.rb'
|
106
102
|
end
|
107
103
|
}
|
@@ -122,7 +118,7 @@ describe AppsignalGenerator do
|
|
122
118
|
deploy_file = File.expand_path(File.join('config', 'deploy.rb'),
|
123
119
|
destination_root)
|
124
120
|
File.open(deploy_file, 'w') {}
|
125
|
-
run_generator_in_tmp %w(my_app_key)
|
121
|
+
run_generator_in_tmp %w(production my_app_key)
|
126
122
|
end
|
127
123
|
|
128
124
|
specify "config file is created and capistrano deploy file modified" do
|
@@ -146,16 +142,13 @@ describe AppsignalGenerator do
|
|
146
142
|
context "with custom environment" do
|
147
143
|
before do
|
148
144
|
prepare_destination
|
149
|
-
run_generator_in_tmp %w(my_app_key
|
145
|
+
run_generator_in_tmp %w(development my_app_key)
|
150
146
|
end
|
151
147
|
|
152
148
|
specify "config file is created" do
|
153
149
|
destination_root.should have_structure {
|
154
150
|
directory 'config' do
|
155
|
-
file 'appsignal.yml'
|
156
|
-
contains 'development:'
|
157
|
-
contains 'api_key: "my_app_key"'
|
158
|
-
end
|
151
|
+
file 'appsignal.yml'
|
159
152
|
no_file 'deploy.rb'
|
160
153
|
end
|
161
154
|
}
|
@@ -171,52 +164,11 @@ describe AppsignalGenerator do
|
|
171
164
|
File.open(File.expand_path(config_file, destination_root), 'w') do |f|
|
172
165
|
f.write("production:\n api_key: 111")
|
173
166
|
end
|
174
|
-
run_generator_in_tmp %w(my_app_key
|
175
|
-
end
|
176
|
-
|
177
|
-
specify "config file is created" do
|
178
|
-
destination_root.should have_structure {
|
179
|
-
directory 'config' do
|
180
|
-
file 'appsignal.yml' do
|
181
|
-
contains 'production:'
|
182
|
-
contains "\ndevelopment:"
|
183
|
-
contains 'api_key: "my_app_key"'
|
184
|
-
end
|
185
|
-
no_file 'deploy.rb'
|
186
|
-
end
|
187
|
-
}
|
188
|
-
end
|
189
|
-
|
190
|
-
specify "should not give error about conflicting environment" do
|
191
|
-
@output.should_not include('error Environment already setup')
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
context "with existing environment" do
|
196
|
-
before :all do
|
197
|
-
prepare_destination
|
198
|
-
FileUtils.mkdir(File.expand_path('config', destination_root))
|
199
|
-
config_file = File.join('config', 'appsignal.yml')
|
200
|
-
File.open(File.expand_path(config_file, destination_root), 'w') do |f|
|
201
|
-
f.write("development:\n api_key: \"111\"")
|
202
|
-
end
|
203
|
-
run_generator_in_tmp %w(my_app_key --environment=development)
|
204
|
-
end
|
205
|
-
|
206
|
-
specify "config file is created" do
|
207
|
-
destination_root.should have_structure {
|
208
|
-
directory 'config' do
|
209
|
-
file 'appsignal.yml' do
|
210
|
-
contains "development:"
|
211
|
-
contains 'api_key: "111"'
|
212
|
-
end
|
213
|
-
no_file 'deploy.rb'
|
214
|
-
end
|
215
|
-
}
|
167
|
+
run_generator_in_tmp %w(development my_app_key)
|
216
168
|
end
|
217
169
|
|
218
|
-
|
219
|
-
@output.should include('error
|
170
|
+
it "exits and tells to manually edit config/appsignal.yml" do
|
171
|
+
@output.should include('error Looks like you already have a config file')
|
220
172
|
end
|
221
173
|
end
|
222
174
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.5.1
|
4
|
+
version: 0.5.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Robert Beekman
|
@@ -13,120 +12,106 @@ authors:
|
|
13
12
|
autorequire:
|
14
13
|
bindir: bin
|
15
14
|
cert_chain: []
|
16
|
-
date: 2013-
|
15
|
+
date: 2013-05-16 00:00:00.000000000 Z
|
17
16
|
dependencies:
|
18
17
|
- !ruby/object:Gem::Dependency
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: '3.0'
|
24
|
-
none: false
|
25
|
-
prerelease: false
|
26
18
|
name: rails
|
27
19
|
requirement: !ruby/object:Gem::Requirement
|
28
20
|
requirements:
|
29
21
|
- - ~>
|
30
22
|
- !ruby/object:Gem::Version
|
31
23
|
version: '3.0'
|
32
|
-
none: false
|
33
24
|
type: :runtime
|
34
|
-
|
25
|
+
prerelease: false
|
35
26
|
version_requirements: !ruby/object:Gem::Requirement
|
36
27
|
requirements:
|
37
|
-
- -
|
28
|
+
- - ~>
|
38
29
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0'
|
40
|
-
|
41
|
-
prerelease: false
|
30
|
+
version: '3.0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
42
32
|
name: rake
|
43
33
|
requirement: !ruby/object:Gem::Requirement
|
44
34
|
requirements:
|
45
35
|
- - ! '>='
|
46
36
|
- !ruby/object:Gem::Version
|
47
37
|
version: '0'
|
48
|
-
none: false
|
49
38
|
type: :runtime
|
50
|
-
|
39
|
+
prerelease: false
|
51
40
|
version_requirements: !ruby/object:Gem::Requirement
|
52
41
|
requirements:
|
53
42
|
- - ! '>='
|
54
43
|
- !ruby/object:Gem::Version
|
55
44
|
version: '0'
|
56
|
-
|
57
|
-
prerelease: false
|
45
|
+
- !ruby/object:Gem::Dependency
|
58
46
|
name: json
|
59
47
|
requirement: !ruby/object:Gem::Requirement
|
60
48
|
requirements:
|
61
49
|
- - ! '>='
|
62
50
|
- !ruby/object:Gem::Version
|
63
51
|
version: '0'
|
64
|
-
none: false
|
65
52
|
type: :runtime
|
66
|
-
|
53
|
+
prerelease: false
|
67
54
|
version_requirements: !ruby/object:Gem::Requirement
|
68
55
|
requirements:
|
69
56
|
- - ! '>='
|
70
57
|
- !ruby/object:Gem::Version
|
71
58
|
version: '0'
|
72
|
-
|
73
|
-
prerelease: false
|
59
|
+
- !ruby/object:Gem::Dependency
|
74
60
|
name: rspec
|
75
61
|
requirement: !ruby/object:Gem::Requirement
|
76
62
|
requirements:
|
77
63
|
- - ! '>='
|
78
64
|
- !ruby/object:Gem::Version
|
79
65
|
version: '0'
|
80
|
-
none: false
|
81
66
|
type: :development
|
82
|
-
|
67
|
+
prerelease: false
|
83
68
|
version_requirements: !ruby/object:Gem::Requirement
|
84
69
|
requirements:
|
85
70
|
- - ! '>='
|
86
71
|
- !ruby/object:Gem::Version
|
87
72
|
version: '0'
|
88
|
-
|
89
|
-
prerelease: false
|
73
|
+
- !ruby/object:Gem::Dependency
|
90
74
|
name: capistrano
|
91
75
|
requirement: !ruby/object:Gem::Requirement
|
92
76
|
requirements:
|
93
77
|
- - ! '>='
|
94
78
|
- !ruby/object:Gem::Version
|
95
79
|
version: '0'
|
96
|
-
none: false
|
97
80
|
type: :development
|
98
|
-
|
81
|
+
prerelease: false
|
99
82
|
version_requirements: !ruby/object:Gem::Requirement
|
100
83
|
requirements:
|
101
84
|
- - ! '>='
|
102
85
|
- !ruby/object:Gem::Version
|
103
86
|
version: '0'
|
104
|
-
|
105
|
-
prerelease: false
|
87
|
+
- !ruby/object:Gem::Dependency
|
106
88
|
name: generator_spec
|
107
89
|
requirement: !ruby/object:Gem::Requirement
|
108
90
|
requirements:
|
109
91
|
- - ! '>='
|
110
92
|
- !ruby/object:Gem::Version
|
111
93
|
version: '0'
|
112
|
-
none: false
|
113
94
|
type: :development
|
114
|
-
|
95
|
+
prerelease: false
|
115
96
|
version_requirements: !ruby/object:Gem::Requirement
|
116
97
|
requirements:
|
117
98
|
- - ! '>='
|
118
99
|
- !ruby/object:Gem::Version
|
119
100
|
version: '0'
|
120
|
-
|
121
|
-
prerelease: false
|
101
|
+
- !ruby/object:Gem::Dependency
|
122
102
|
name: pry
|
123
103
|
requirement: !ruby/object:Gem::Requirement
|
124
104
|
requirements:
|
125
105
|
- - ! '>='
|
126
106
|
- !ruby/object:Gem::Version
|
127
107
|
version: '0'
|
128
|
-
none: false
|
129
108
|
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
130
115
|
description: The official appsignal.com gem
|
131
116
|
email:
|
132
117
|
- contact@appsignal.com
|
@@ -138,6 +123,7 @@ files:
|
|
138
123
|
- .gitignore
|
139
124
|
- .ruby-version
|
140
125
|
- .travis.yml
|
126
|
+
- CHANGELOG.md
|
141
127
|
- Gemfile
|
142
128
|
- LICENCE
|
143
129
|
- README.md
|
@@ -159,6 +145,7 @@ files:
|
|
159
145
|
- lib/appsignal/cli.rb
|
160
146
|
- lib/appsignal/config.rb
|
161
147
|
- lib/appsignal/exception_notification.rb
|
148
|
+
- lib/appsignal/integrations/passenger.rb
|
162
149
|
- lib/appsignal/listener.rb
|
163
150
|
- lib/appsignal/marker.rb
|
164
151
|
- lib/appsignal/middleware.rb
|
@@ -187,6 +174,7 @@ files:
|
|
187
174
|
- spec/appsignal/config_spec.rb
|
188
175
|
- spec/appsignal/exception_notification_spec.rb
|
189
176
|
- spec/appsignal/inactive_railtie_spec.rb
|
177
|
+
- spec/appsignal/integrations/passenger_spec.rb
|
190
178
|
- spec/appsignal/listener_spec.rb
|
191
179
|
- spec/appsignal/marker_spec.rb
|
192
180
|
- spec/appsignal/middleware/action_view_sanitizer_spec.rb
|
@@ -207,6 +195,7 @@ files:
|
|
207
195
|
- spec/support/helpers/transaction_helpers.rb
|
208
196
|
homepage: http://github.com/80beans/appsignal
|
209
197
|
licenses: []
|
198
|
+
metadata: {}
|
210
199
|
post_install_message:
|
211
200
|
rdoc_options: []
|
212
201
|
require_paths:
|
@@ -216,24 +205,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
205
|
- - ! '>='
|
217
206
|
- !ruby/object:Gem::Version
|
218
207
|
version: '0'
|
219
|
-
segments:
|
220
|
-
- 0
|
221
|
-
hash: -3609057050199006546
|
222
|
-
none: false
|
223
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
209
|
requirements:
|
225
210
|
- - ! '>='
|
226
211
|
- !ruby/object:Gem::Version
|
227
212
|
version: '0'
|
228
|
-
segments:
|
229
|
-
- 0
|
230
|
-
hash: -3609057050199006546
|
231
|
-
none: false
|
232
213
|
requirements: []
|
233
214
|
rubyforge_project:
|
234
|
-
rubygems_version:
|
215
|
+
rubygems_version: 2.0.3
|
235
216
|
signing_key:
|
236
|
-
specification_version:
|
217
|
+
specification_version: 4
|
237
218
|
summary: Logs performance and exception data from your app toappsignal.com
|
238
219
|
test_files:
|
239
220
|
- spec/appsignal/agent_spec.rb
|
@@ -245,6 +226,7 @@ test_files:
|
|
245
226
|
- spec/appsignal/config_spec.rb
|
246
227
|
- spec/appsignal/exception_notification_spec.rb
|
247
228
|
- spec/appsignal/inactive_railtie_spec.rb
|
229
|
+
- spec/appsignal/integrations/passenger_spec.rb
|
248
230
|
- spec/appsignal/listener_spec.rb
|
249
231
|
- spec/appsignal/marker_spec.rb
|
250
232
|
- spec/appsignal/middleware/action_view_sanitizer_spec.rb
|