appsignal 0.6.7 → 0.7.0.alpha.1
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 +8 -8
- data/.gitignore +3 -2
- data/.travis.yml +11 -11
- data/CHANGELOG.md +6 -0
- data/README.md +26 -0
- data/Rakefile +32 -3
- data/appsignal.gemspec +25 -16
- data/gemfiles/no_dependencies.gemfile +3 -0
- data/gemfiles/{3.0.gemfile → rails-3.0.gemfile} +2 -1
- data/gemfiles/{3.1.gemfile → rails-3.1.gemfile} +2 -1
- data/gemfiles/{3.2.gemfile → rails-3.2.gemfile} +2 -1
- data/gemfiles/{4.0.gemfile → rails-4.0.gemfile} +2 -1
- data/gemfiles/sinatra.gemfile +5 -0
- data/lib/appsignal.rb +30 -25
- data/lib/appsignal/agent.rb +37 -17
- data/lib/appsignal/aggregator.rb +2 -4
- data/lib/appsignal/aggregator/middleware.rb +4 -0
- data/lib/appsignal/aggregator/middleware/action_view_sanitizer.rb +23 -0
- data/lib/appsignal/aggregator/middleware/active_record_sanitizer.rb +64 -0
- data/lib/appsignal/aggregator/middleware/chain.rb +101 -0
- data/lib/appsignal/aggregator/middleware/delete_blanks.rb +16 -0
- data/lib/appsignal/aggregator/post_processor.rb +21 -18
- data/lib/appsignal/auth_check.rb +7 -21
- data/lib/appsignal/capistrano.rb +1 -36
- data/lib/appsignal/cli.rb +30 -46
- data/lib/appsignal/config.rb +46 -61
- data/lib/appsignal/integrations/capistrano.rb +44 -0
- data/lib/appsignal/{careful_logger.rb → integrations/capistrano/careful_logger.rb} +2 -0
- data/lib/appsignal/integrations/passenger.rb +6 -6
- data/lib/appsignal/integrations/rails.rb +33 -0
- data/lib/appsignal/integrations/sinatra.rb +20 -0
- data/lib/appsignal/marker.rb +9 -10
- data/lib/appsignal/rack/instrumentation.rb +28 -0
- data/lib/appsignal/rack/listener.rb +33 -0
- data/lib/appsignal/transaction.rb +18 -12
- data/lib/appsignal/transaction/formatter.rb +96 -0
- data/lib/appsignal/transaction/params_sanitizer.rb +80 -78
- data/lib/appsignal/transmitter.rb +10 -9
- data/lib/appsignal/version.rb +1 -1
- data/lib/generators/appsignal/appsignal_generator.rb +20 -21
- data/lib/generators/appsignal/templates/appsignal.yml +15 -21
- data/spec/{appsignal → lib/appsignal}/agent_spec.rb +69 -1
- data/spec/lib/appsignal/aggregator/middleware/action_view_sanitizer_spec.rb +32 -0
- data/spec/lib/appsignal/aggregator/middleware/active_record_sanitizer_spec.rb +215 -0
- data/spec/{appsignal → lib/appsignal/aggregator}/middleware/chain_spec.rb +5 -5
- data/spec/{appsignal → lib/appsignal/aggregator}/middleware/delete_blanks_spec.rb +2 -2
- data/spec/{appsignal → lib/appsignal}/aggregator/post_processor_spec.rb +15 -6
- data/spec/{appsignal → lib/appsignal}/aggregator_spec.rb +4 -1
- data/spec/{appsignal → lib/appsignal}/auth_check_spec.rb +8 -23
- data/spec/{appsignal → lib/appsignal}/cli_spec.rb +65 -66
- data/spec/lib/appsignal/config_spec.rb +132 -0
- data/spec/lib/appsignal/integrations/capistrano_spec.rb +123 -0
- data/spec/{appsignal → lib/appsignal}/integrations/passenger_spec.rb +0 -1
- data/spec/lib/appsignal/integrations/rails_spec.rb +38 -0
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +43 -0
- data/spec/{appsignal → lib/appsignal}/marker_spec.rb +20 -23
- data/spec/lib/appsignal/rack/instrumentation_spec.rb +49 -0
- data/spec/{appsignal → lib/appsignal/rack}/listener_spec.rb +39 -6
- data/spec/{appsignal/transaction/transaction_formatter_spec.rb → lib/appsignal/transaction/formatter_spec.rb} +29 -6
- data/spec/{appsignal → lib/appsignal}/transaction/params_sanitizer_spec.rb +13 -12
- data/spec/{appsignal → lib/appsignal}/transaction_spec.rb +52 -7
- data/spec/{appsignal → lib/appsignal}/transmitter_spec.rb +27 -20
- data/spec/lib/appsignal_spec.rb +230 -0
- data/spec/lib/generators/appsignal/appsignal_generator_spec.rb +166 -0
- data/spec/lib/tmp/config/appsignal.yml +2 -0
- data/spec/spec_helper.rb +29 -20
- data/spec/support/delegate_matcher.rb +0 -1
- data/spec/support/fixtures/generated_config.yml +20 -0
- data/{log/.gitkeep → spec/support/fixtures/uploaded_file.txt} +0 -0
- data/spec/support/helpers/config_helpers.rb +24 -0
- data/spec/support/helpers/notification_helpers.rb +0 -2
- data/spec/support/helpers/transaction_helpers.rb +17 -2
- data/spec/support/project_fixture/config/appsignal.yml +18 -0
- data/spec/support/project_fixture/log/.gitkeep +0 -0
- data/spec/support/rails/my_app.rb +6 -0
- metadata +99 -83
- data/config/appsignal.yml +0 -10
- data/lib/appsignal/listener.rb +0 -21
- data/lib/appsignal/middleware.rb +0 -3
- data/lib/appsignal/middleware/action_view_sanitizer.rb +0 -21
- data/lib/appsignal/middleware/active_record_sanitizer.rb +0 -62
- data/lib/appsignal/middleware/chain.rb +0 -99
- data/lib/appsignal/middleware/delete_blanks.rb +0 -12
- data/lib/appsignal/railtie.rb +0 -37
- data/lib/appsignal/to_appsignal_hash.rb +0 -21
- data/lib/appsignal/transaction/transaction_formatter.rb +0 -67
- data/spec/appsignal/capistrano_spec.rb +0 -81
- data/spec/appsignal/config_spec.rb +0 -177
- data/spec/appsignal/inactive_railtie_spec.rb +0 -32
- data/spec/appsignal/middleware/action_view_sanitizer_spec.rb +0 -27
- data/spec/appsignal/middleware/active_record_sanitizer_spec.rb +0 -212
- data/spec/appsignal/railtie_spec.rb +0 -74
- data/spec/appsignal/to_appsignal_hash_spec.rb +0 -29
- data/spec/appsignal_spec.rb +0 -195
- data/spec/generators/appsignal/appsignal_generator_spec.rb +0 -181
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
MmJjZmJmYThiYzQxNmNkYmY3OTljN2M4MzE3ZmI2NTJiNWExM2QyZA==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
MDdlY2ZlZDlhN2FlN2Q4MDI0Nzg0NDFiODdmMDAxODRlYjI4NjQwMA==
|
|
7
7
|
!binary "U0hBNTEy":
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
NjQxMWVmNmI4NThmYzdmMDQ3ZDM1YzNkODAwYTZjNWY2NTJlNzNlNzQzNDRk
|
|
10
|
+
NGVkYzQwYWZiOGZmN2ZiN2ExMGJhODRmMmFhNGY3N2M0M2VkNjQxNzRiZmRk
|
|
11
|
+
MmJlMjFmYmRjMmU4NWI0YWNmZDk3NjY0MThkYzVjMDE3MjRjMmE=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ZDUwNTQ3ZGQyZmUwMmQ1OWE1YzcxNTQ4NzNkYWJjNDUwZmQ0OGEyMDY2ODgy
|
|
14
|
+
NDExNWQyMGRlZjc3MTMwMzk1MjFkYTdkMzBkZDNjOTNiNTI2YTEyNzdiMWEz
|
|
15
|
+
NWMzYzY2MTkyMjg2YzY0NDVmNjBmOTM3ZDkwZjU3ZGNjYmY1MTQ=
|
data/.gitignore
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
.sass-cache
|
|
4
4
|
capybara-*.html
|
|
5
5
|
.rspec
|
|
6
|
-
|
|
6
|
+
*.log
|
|
7
7
|
/.bundle
|
|
8
8
|
/vendor/bundle
|
|
9
9
|
/tmp/*
|
|
10
10
|
/db/*.sqlite3
|
|
11
11
|
/public/system/*
|
|
12
12
|
/coverage/
|
|
13
|
-
/spec/tmp
|
|
13
|
+
/spec/tmp
|
|
14
|
+
/spec/support/project_fixture/log/*.log
|
|
14
15
|
**.orig
|
|
15
16
|
rerun.txt
|
|
16
17
|
pickle-email-*.html
|
data/.travis.yml
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
|
|
3
3
|
rvm:
|
|
4
|
-
- 1.
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
4
|
+
- "1.9.3"
|
|
5
|
+
- "2.0.0"
|
|
6
|
+
- "jruby-19mode"
|
|
7
|
+
- "rbx-2.1.1"
|
|
8
8
|
|
|
9
9
|
gemfile:
|
|
10
|
-
- gemfiles/
|
|
11
|
-
- gemfiles/3.
|
|
12
|
-
- gemfiles/3.
|
|
13
|
-
- gemfiles/
|
|
10
|
+
- "gemfiles/rack.gemfile"
|
|
11
|
+
- "gemfiles/rails-3.0.gemfile"
|
|
12
|
+
- "gemfiles/rails-3.1.gemfile"
|
|
13
|
+
- "gemfiles/rails-3.2.gemfile"
|
|
14
|
+
- "gemfiles/rails-4.0.gemfile"
|
|
14
15
|
|
|
15
16
|
matrix:
|
|
16
17
|
allow_failures:
|
|
17
|
-
- rvm:
|
|
18
|
-
- rvm: jruby-19mode
|
|
18
|
+
- rvm: "jruby-19mode"
|
|
19
19
|
|
|
20
|
-
script: RAILS_ENV=test bundle exec rspec spec
|
|
20
|
+
script: "RAILS_ENV=test bundle exec rspec spec"
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -52,3 +52,29 @@ class RemoveBoringPayload
|
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
```
|
|
55
|
+
|
|
56
|
+
## Development
|
|
57
|
+
|
|
58
|
+
Run rake bundle or, or run bundle install for all Gemfiles:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
bundle --gemfile gemfiles/no_dependencies.gemfile
|
|
62
|
+
bundle --gemfile gemfiles/rails-3.0.gemfile
|
|
63
|
+
bundle --gemfile gemfiles/rails-3.1.gemfile
|
|
64
|
+
bundle --gemfile gemfiles/rails-3.2.gemfile
|
|
65
|
+
bundle --gemfile gemfiles/rails-4.0.gemfile
|
|
66
|
+
bundle --gemfile gemfiles/sinatra.gemfile
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
To run the spec suite with a specific Gemfile:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
BUNDLE_GEMFILE=gemfiles/no_dependencies.gemfile bundle exec rspec
|
|
73
|
+
BUNDLE_GEMFILE=gemfiles/rails-3.0.gemfile bundle exec rspec
|
|
74
|
+
BUNDLE_GEMFILE=gemfiles/rails-3.1.gemfile bundle exec rspec
|
|
75
|
+
BUNDLE_GEMFILE=gemfiles/rails-3.2.gemfile bundle exec rspec
|
|
76
|
+
BUNDLE_GEMFILE=gemfiles/rails-4.0.gemfile bundle exec rspec
|
|
77
|
+
BUNDLE_GEMFILE=gemfiles/sinatra.gemfile bundle exec rspec
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Or run `rake spec` to run specs for all Gemfiles. Travis will run specs for these Gemfiles as well.
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require 'appsignal/version'
|
|
2
|
-
|
|
3
1
|
task :publish do
|
|
2
|
+
require 'appsignal/version'
|
|
3
|
+
|
|
4
4
|
NAME = 'appsignal'
|
|
5
5
|
VERSION_FILE = 'lib/appsignal/version.rb'
|
|
6
6
|
CHANGELOG_FILE = 'CHANGELOG.md'
|
|
@@ -29,7 +29,7 @@ task :publish do
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def changes
|
|
32
|
-
git_status_to_array(`git status -s -u
|
|
32
|
+
git_status_to_array(`git status -s -u`)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def gem_version
|
|
@@ -57,3 +57,32 @@ task :publish do
|
|
|
57
57
|
raise "Actually change the version in: #{VERSION_FILE}"
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
|
+
|
|
61
|
+
task :bundle do
|
|
62
|
+
puts `bundle --gemfile gemfiles/no_dependencies.gemfile`
|
|
63
|
+
puts `bundle --gemfile gemfiles/rails-3.0.gemfile`
|
|
64
|
+
puts `bundle --gemfile gemfiles/rails-3.1.gemfile`
|
|
65
|
+
puts `bundle --gemfile gemfiles/rails-3.2.gemfile`
|
|
66
|
+
puts `bundle --gemfile gemfiles/rails-4.0.gemfile`
|
|
67
|
+
puts `bundle --gemfile gemfiles/sinatra.gemfile`
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
task :spec do
|
|
71
|
+
puts 'Running no dependencies'
|
|
72
|
+
puts `env BUNDLE_GEMFILE=gemfiles/no_dependencies.gemfile bundle exec rspec`
|
|
73
|
+
|
|
74
|
+
puts 'Running rails-3.0'
|
|
75
|
+
puts `env BUNDLE_GEMFILE=gemfiles/rails-3.0.gemfile bundle exec rspec`
|
|
76
|
+
|
|
77
|
+
puts 'Running rails-3.1'
|
|
78
|
+
puts `env BUNDLE_GEMFILE=gemfiles/rails-3.1.gemfile bundle exec rspec`
|
|
79
|
+
|
|
80
|
+
puts 'Running rails-3.2'
|
|
81
|
+
puts `env BUNDLE_GEMFILE=gemfiles/rails-3.2.gemfile bundle exec rspec`
|
|
82
|
+
|
|
83
|
+
puts 'Running rails-4.0'
|
|
84
|
+
puts `env BUNDLE_GEMFILE=gemfiles/rails-4.0.gemfile bundle exec rspec`
|
|
85
|
+
|
|
86
|
+
puts 'Running sinatra'
|
|
87
|
+
puts `env BUNDLE_GEMFILE=gemfiles/sinatra.gemfile bundle exec rspec`
|
|
88
|
+
end
|
data/appsignal.gemspec
CHANGED
|
@@ -9,26 +9,35 @@ Gem::Specification.new do |gem|
|
|
|
9
9
|
'Ron Cadier',
|
|
10
10
|
'Jacob Vosmaer'
|
|
11
11
|
]
|
|
12
|
-
gem.email
|
|
13
|
-
gem.description
|
|
14
|
-
gem.summary
|
|
15
|
-
|
|
16
|
-
gem.homepage
|
|
17
|
-
gem.license
|
|
12
|
+
gem.email = ['support@appsignal.com']
|
|
13
|
+
gem.description = 'The official appsignal.com gem'
|
|
14
|
+
gem.summary = 'Logs performance and exception data from your app to'\
|
|
15
|
+
'appsignal.com'
|
|
16
|
+
gem.homepage = 'https://github.com/appsignal/appsignal'
|
|
17
|
+
gem.license = 'MIT'
|
|
18
18
|
|
|
19
|
-
gem.files
|
|
20
|
-
gem.executables
|
|
21
|
-
gem.test_files
|
|
22
|
-
gem.name
|
|
23
|
-
gem.require_paths
|
|
24
|
-
gem.version
|
|
19
|
+
gem.files = `git ls-files`.split($\)
|
|
20
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
21
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
22
|
+
gem.name = 'appsignal'
|
|
23
|
+
gem.require_paths = ['lib']
|
|
24
|
+
gem.version = Appsignal::VERSION
|
|
25
|
+
gem.required_ruby_version = '>= 1.9.3'
|
|
25
26
|
|
|
26
|
-
gem.add_dependency '
|
|
27
|
-
gem.add_dependency '
|
|
28
|
-
gem.add_dependency '
|
|
27
|
+
gem.add_dependency 'activesupport', '>= 3.0'
|
|
28
|
+
gem.add_dependency 'rack'
|
|
29
|
+
gem.add_dependency 'thread_safe'
|
|
29
30
|
|
|
31
|
+
gem.add_development_dependency 'rake'
|
|
30
32
|
gem.add_development_dependency 'rspec'
|
|
31
33
|
gem.add_development_dependency 'capistrano', '< 3.0'
|
|
32
|
-
gem.add_development_dependency 'generator_spec'
|
|
33
34
|
gem.add_development_dependency 'pry'
|
|
35
|
+
|
|
36
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
|
37
|
+
gem.add_development_dependency 'racc'
|
|
38
|
+
gem.add_development_dependency 'rubysl-enumerator'
|
|
39
|
+
gem.add_development_dependency 'rubysl-net-http'
|
|
40
|
+
gem.add_development_dependency 'rubysl-rexml'
|
|
41
|
+
gem.add_development_dependency 'rubysl-test-unit'
|
|
42
|
+
end
|
|
34
43
|
end
|
data/lib/appsignal.rb
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
end
|
|
1
|
+
require 'logger'
|
|
2
|
+
require 'rack'
|
|
3
|
+
require 'thread_safe'
|
|
4
|
+
require 'active_support/json'
|
|
6
5
|
|
|
7
6
|
module Appsignal
|
|
8
7
|
class << self
|
|
9
|
-
attr_accessor :
|
|
8
|
+
attr_accessor :config, :logger, :agent
|
|
10
9
|
attr_reader :in_memory_log
|
|
11
10
|
|
|
11
|
+
def start
|
|
12
|
+
if config
|
|
13
|
+
if config[:debug]
|
|
14
|
+
logger.level = Logger::DEBUG
|
|
15
|
+
else
|
|
16
|
+
logger.level = Logger::INFO
|
|
17
|
+
end
|
|
18
|
+
logger.info("Starting appsignal-#{Appsignal::VERSION}")
|
|
19
|
+
@agent = Appsignal::Agent.new
|
|
20
|
+
else
|
|
21
|
+
logger.error("Can't start, no config loaded")
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
12
25
|
# Convenience method for adding a transaction to the queue. This queue is
|
|
13
26
|
# managed and is periodically pushed to Appsignal.
|
|
14
27
|
#
|
|
@@ -51,10 +64,6 @@ module Appsignal
|
|
|
51
64
|
@transactions ||= {}
|
|
52
65
|
end
|
|
53
66
|
|
|
54
|
-
def agent
|
|
55
|
-
@agent ||= Appsignal::Agent.new
|
|
56
|
-
end
|
|
57
|
-
|
|
58
67
|
def logger
|
|
59
68
|
@in_memory_log = StringIO.new unless @in_memory_log
|
|
60
69
|
@logger ||= Logger.new(@in_memory_log).tap do |l|
|
|
@@ -71,16 +80,8 @@ module Appsignal
|
|
|
71
80
|
ActiveSupport::JSON
|
|
72
81
|
end
|
|
73
82
|
|
|
74
|
-
def logger=(l)
|
|
75
|
-
@logger = l
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def config
|
|
79
|
-
@config ||= Appsignal::Config.new(Rails.root, Rails.env).load
|
|
80
|
-
end
|
|
81
|
-
|
|
82
83
|
def post_processing_middleware
|
|
83
|
-
@post_processing_chain ||= PostProcessor.default_middleware
|
|
84
|
+
@post_processing_chain ||= Appsignal::Aggregator::PostProcessor.default_middleware
|
|
84
85
|
yield @post_processing_chain if block_given?
|
|
85
86
|
@post_processing_chain
|
|
86
87
|
end
|
|
@@ -90,21 +91,25 @@ module Appsignal
|
|
|
90
91
|
end
|
|
91
92
|
|
|
92
93
|
def is_ignored_exception?(exception)
|
|
93
|
-
|
|
94
|
-
include?(exception.class.name)
|
|
94
|
+
Appsignal.config[:ignore_exceptions].include?(exception.class.name)
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
require 'appsignal/agent'
|
|
100
100
|
require 'appsignal/aggregator'
|
|
101
|
+
require 'appsignal/aggregator/post_processor'
|
|
102
|
+
require 'appsignal/aggregator/middleware'
|
|
101
103
|
require 'appsignal/auth_check'
|
|
102
104
|
require 'appsignal/config'
|
|
103
|
-
require 'appsignal/integrations/passenger'
|
|
104
|
-
require 'appsignal/listener'
|
|
105
105
|
require 'appsignal/marker'
|
|
106
|
-
require 'appsignal/
|
|
107
|
-
require 'appsignal/
|
|
106
|
+
require 'appsignal/rack/listener'
|
|
107
|
+
require 'appsignal/rack/instrumentation'
|
|
108
108
|
require 'appsignal/transaction'
|
|
109
|
+
require 'appsignal/transaction/formatter'
|
|
110
|
+
require 'appsignal/transaction/params_sanitizer'
|
|
109
111
|
require 'appsignal/transmitter'
|
|
110
112
|
require 'appsignal/version'
|
|
113
|
+
|
|
114
|
+
require 'appsignal/integrations/passenger'
|
|
115
|
+
require 'appsignal/integrations/rails'
|
data/lib/appsignal/agent.rb
CHANGED
|
@@ -2,44 +2,64 @@ module Appsignal
|
|
|
2
2
|
class Agent
|
|
3
3
|
ACTION = 'log_entries'.freeze
|
|
4
4
|
|
|
5
|
-
attr_reader :aggregator, :thread, :active, :sleep_time, :transmitter, :
|
|
5
|
+
attr_reader :aggregator, :thread, :active, :sleep_time, :transmitter, :subscriber
|
|
6
6
|
|
|
7
7
|
def initialize
|
|
8
8
|
return unless Appsignal.active?
|
|
9
|
-
|
|
9
|
+
if Appsignal.config.env == 'development'
|
|
10
|
+
@sleep_time = 10.0
|
|
11
|
+
else
|
|
12
|
+
@sleep_time = 60.0
|
|
13
|
+
end
|
|
10
14
|
@aggregator = Aggregator.new
|
|
11
|
-
@
|
|
12
|
-
|
|
15
|
+
@transmitter = Transmitter.new(ACTION)
|
|
16
|
+
subscribe
|
|
17
|
+
start_thread
|
|
18
|
+
# Shutdown at exit. This does not work in passenger, see integrations/passenger
|
|
19
|
+
#at_exit { Appsignal.agent.shutdown(true) }
|
|
20
|
+
Appsignal.logger.info('Started Appsignal agent')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def start_thread
|
|
24
|
+
Appsignal.logger.debug('Starting agent thread')
|
|
13
25
|
@thread = Thread.new do
|
|
14
|
-
|
|
15
|
-
while true do
|
|
26
|
+
loop do
|
|
16
27
|
send_queue if aggregator.has_transactions?
|
|
17
28
|
Appsignal.logger.debug("Sleeping #{sleep_time}")
|
|
18
29
|
sleep(sleep_time)
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def subscribe
|
|
35
|
+
Appsignal.logger.debug('Subscribing to notifications')
|
|
36
|
+
# Subscribe to notifications that don't start with a !
|
|
37
|
+
@subscriber = ActiveSupport::Notifications.subscribe(/^[^!]/) do |*args|
|
|
38
|
+
if Appsignal::Transaction.current
|
|
39
|
+
event = ActiveSupport::Notifications::Event.new(*args)
|
|
40
|
+
if event.name.start_with?('process_action')
|
|
41
|
+
Appsignal::Transaction.current.set_process_action_event(event)
|
|
42
|
+
end
|
|
43
|
+
Appsignal::Transaction.current.add_event(event)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
27
46
|
end
|
|
28
47
|
|
|
29
48
|
def enqueue(transaction)
|
|
30
49
|
Appsignal.logger.debug('Enqueueing transaction')
|
|
31
|
-
|
|
32
|
-
aggregator.add(transaction)
|
|
33
|
-
end
|
|
50
|
+
aggregator.add(transaction)
|
|
34
51
|
end
|
|
35
52
|
|
|
36
53
|
def send_queue
|
|
37
54
|
Appsignal.logger.debug('Sending queue')
|
|
55
|
+
# Replace aggregator while making sure no thread
|
|
56
|
+
# is adding to it's queue
|
|
38
57
|
aggregator_to_be_sent = nil
|
|
39
|
-
|
|
58
|
+
Thread.exclusive do
|
|
40
59
|
aggregator_to_be_sent = aggregator
|
|
41
60
|
@aggregator = Aggregator.new
|
|
42
61
|
end
|
|
62
|
+
|
|
43
63
|
begin
|
|
44
64
|
handle_result(
|
|
45
65
|
transmitter.transmit(aggregator_to_be_sent.post_processed_queue!)
|
|
@@ -62,7 +82,7 @@ module Appsignal
|
|
|
62
82
|
|
|
63
83
|
def shutdown(send_current_queue=false)
|
|
64
84
|
Appsignal.logger.info('Shutting down the agent')
|
|
65
|
-
ActiveSupport::Notifications.unsubscribe(
|
|
85
|
+
ActiveSupport::Notifications.unsubscribe(subscriber)
|
|
66
86
|
Thread.kill(thread) if thread
|
|
67
87
|
send_queue if send_current_queue && @aggregator.has_transactions?
|
|
68
88
|
end
|