appsignal 0.5.1 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|