appsignal 0.8.15 → 0.9.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -2
- data/README.md +4 -0
- data/Rakefile +8 -0
- data/appsignal.gemspec +0 -1
- data/gemfiles/capistrano2.gemfile +5 -0
- data/gemfiles/capistrano3.gemfile +5 -0
- data/lib/appsignal.rb +10 -4
- data/lib/appsignal/agent.rb +5 -10
- data/lib/appsignal/capistrano.rb +8 -1
- data/lib/appsignal/config.rb +2 -1
- data/lib/appsignal/instrumentations/net_http.rb +15 -0
- data/lib/appsignal/integrations/capistrano/appsignal.cap +27 -0
- data/lib/appsignal/integrations/{capistrano.rb → capistrano/capistrano_2_tasks.rb} +2 -4
- data/lib/appsignal/integrations/capistrano/careful_logger.rb +1 -1
- data/lib/appsignal/integrations/delayed_job.rb +2 -4
- data/lib/appsignal/integrations/resque.rb +2 -4
- data/lib/appsignal/integrations/sidekiq.rb +2 -4
- data/lib/appsignal/marker.rb +1 -1
- data/lib/appsignal/rack/instrumentation.rb +1 -0
- data/lib/appsignal/rack/listener.rb +3 -4
- data/lib/appsignal/transaction.rb +16 -4
- data/lib/appsignal/version.rb +1 -1
- data/spec/lib/appsignal/agent_spec.rb +1 -23
- data/spec/lib/appsignal/config_spec.rb +2 -0
- data/spec/lib/appsignal/instrumentations/net_http_spec.rb +26 -0
- data/spec/lib/appsignal/integrations/capistrano2_spec.rb +178 -0
- data/spec/lib/appsignal/integrations/capistrano3_spec.rb +169 -0
- data/spec/lib/appsignal/integrations/resque_spec.rb +1 -1
- data/spec/lib/appsignal/marker_spec.rb +13 -10
- data/spec/lib/appsignal/transaction_spec.rb +34 -13
- data/spec/lib/appsignal_spec.rb +35 -0
- data/spec/lib/generators/appsignal/appsignal_generator_spec.rb +13 -14
- data/spec/spec_helper.rb +14 -0
- metadata +15 -21
- data/spec/lib/appsignal/integrations/capistrano_spec.rb +0 -151
data/spec/lib/appsignal_spec.rb
CHANGED
@@ -54,6 +54,11 @@ describe Appsignal do
|
|
54
54
|
Appsignal.start
|
55
55
|
end
|
56
56
|
|
57
|
+
it "should load instrumentations" do
|
58
|
+
Appsignal.should_receive(:load_instrumentations)
|
59
|
+
Appsignal.start
|
60
|
+
end
|
61
|
+
|
57
62
|
context "with an extension" do
|
58
63
|
before { Appsignal.extensions << Appsignal::MockExtension }
|
59
64
|
|
@@ -64,6 +69,36 @@ describe Appsignal do
|
|
64
69
|
end
|
65
70
|
end
|
66
71
|
|
72
|
+
describe ".load_integrations" do
|
73
|
+
it "should require the integrations" do
|
74
|
+
Appsignal.should_receive(:require).at_least(:once)
|
75
|
+
end
|
76
|
+
|
77
|
+
after { Appsignal.load_integrations }
|
78
|
+
end
|
79
|
+
|
80
|
+
describe ".load_instrumentations" do
|
81
|
+
before { Appsignal.config = project_fixture_config }
|
82
|
+
|
83
|
+
context "Net::HTTP" do
|
84
|
+
context "if on in the config" do
|
85
|
+
it "should require net_http" do
|
86
|
+
Appsignal.should_receive(:require).with('appsignal/instrumentations/net_http')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "if off in the config" do
|
91
|
+
before { Appsignal.config.config_hash[:instrument_net_http] = false }
|
92
|
+
|
93
|
+
it "should not require net_http" do
|
94
|
+
Appsignal.should_not_receive(:require).with('appsignal/instrumentations/net_http')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
after { Appsignal.load_instrumentations }
|
100
|
+
end
|
101
|
+
|
67
102
|
context "with debug logging" do
|
68
103
|
before { Appsignal.config = project_fixture_config('test') }
|
69
104
|
|
@@ -20,9 +20,11 @@ if rails_present?
|
|
20
20
|
include GeneratorSpec::TestCase
|
21
21
|
destination tmp_dir
|
22
22
|
|
23
|
+
let(:authcheck) { Appsignal::AuthCheck.new(nil, nil) }
|
23
24
|
let(:err_stream) { StringIO.new }
|
24
25
|
|
25
26
|
before do
|
27
|
+
Appsignal::AuthCheck.stub(:new => authcheck)
|
26
28
|
FileUtils.rm_rf(tmp_dir)
|
27
29
|
@original_stderr = $stderr
|
28
30
|
$stderr = err_stream
|
@@ -34,9 +36,7 @@ if rails_present?
|
|
34
36
|
context "with key" do
|
35
37
|
context "known key" do
|
36
38
|
before do
|
37
|
-
authcheck
|
38
|
-
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
39
|
-
authcheck.should_receive(:perform_with_result).and_return(['200', 'everything ok'])
|
39
|
+
authcheck.should_receive(:perform).and_return('200')
|
40
40
|
|
41
41
|
prepare_destination
|
42
42
|
run_generator_in_tmp %w(my_app_key)
|
@@ -50,45 +50,42 @@ if rails_present?
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should mention successful auth check" do
|
53
|
-
@output.should include('success
|
53
|
+
@output.should include('success')
|
54
|
+
@output.should include('AppSignal has confirmed authorization!')
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
58
|
context "invalid key" do
|
58
59
|
before do
|
59
|
-
authcheck
|
60
|
-
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
61
|
-
authcheck.should_receive(:perform_with_result).and_return(['401', 'unauthorized'])
|
60
|
+
authcheck.should_receive(:perform).and_return('401')
|
62
61
|
|
63
62
|
prepare_destination
|
64
63
|
run_generator_in_tmp %w(my_app_key)
|
65
64
|
end
|
66
65
|
|
67
66
|
it "should mention invalid key" do
|
68
|
-
@output.should include('error
|
67
|
+
@output.should include('error')
|
68
|
+
@output.should include('API key not valid with AppSignal...')
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
context "failed check" do
|
73
73
|
before do
|
74
|
-
authcheck
|
75
|
-
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
76
|
-
authcheck.should_receive(:perform_with_result).and_return(['500', 'error!'])
|
74
|
+
authcheck.should_receive(:perform).and_return('500')
|
77
75
|
|
78
76
|
prepare_destination
|
79
77
|
run_generator_in_tmp %w(my_app_key)
|
80
78
|
end
|
81
79
|
|
82
80
|
it "should mention failed check" do
|
83
|
-
@output.should include('error
|
81
|
+
@output.should include('error')
|
82
|
+
@output.should include('Could not confirm authorization')
|
84
83
|
end
|
85
84
|
end
|
86
85
|
|
87
86
|
context "internal failure" do
|
88
87
|
before do
|
89
|
-
authcheck = Appsignal::AuthCheck.new(nil, nil)
|
90
88
|
authcheck.stub(:perform).and_throw(:error)
|
91
|
-
Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
|
92
89
|
|
93
90
|
prepare_destination
|
94
91
|
run_generator_in_tmp %w(my_app_key)
|
@@ -123,6 +120,7 @@ if rails_present?
|
|
123
120
|
context "without capistrano" do
|
124
121
|
before do
|
125
122
|
prepare_destination
|
123
|
+
authcheck.stub(:perform).and_return(['200', 'everything ok'])
|
126
124
|
run_generator_in_tmp %w(my_app_key)
|
127
125
|
end
|
128
126
|
|
@@ -150,6 +148,7 @@ if rails_present?
|
|
150
148
|
File.open(cap_file, 'w') {}
|
151
149
|
FileUtils.mkdir(File.join(destination_root, 'config'))
|
152
150
|
File.open(deploy_file, 'w') {}
|
151
|
+
authcheck.stub(:perform).and_return(['200', 'everything ok'])
|
153
152
|
run_generator_in_tmp %w(my_app_key)
|
154
153
|
end
|
155
154
|
|
data/spec/spec_helper.rb
CHANGED
@@ -18,6 +18,20 @@ def rails_present?
|
|
18
18
|
RAILS_PRESENT
|
19
19
|
end
|
20
20
|
|
21
|
+
def capistrano_present?
|
22
|
+
!! Gem.loaded_specs['capistrano']
|
23
|
+
end
|
24
|
+
|
25
|
+
def capistrano2_present?
|
26
|
+
capistrano_present? &&
|
27
|
+
Gem.loaded_specs['capistrano'].version < Gem::Version.new('3.0')
|
28
|
+
end
|
29
|
+
|
30
|
+
def capistrano3_present?
|
31
|
+
capistrano_present? &&
|
32
|
+
Gem.loaded_specs['capistrano'].version >= Gem::Version.new('3.0')
|
33
|
+
end
|
34
|
+
|
21
35
|
require 'appsignal'
|
22
36
|
|
23
37
|
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'support/helpers','*.rb'))].each {|f| require f}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0.alpha.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Beekman
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-06-
|
15
|
+
date: 2014-06-06 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: activesupport
|
@@ -84,20 +84,6 @@ dependencies:
|
|
84
84
|
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '0'
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: capistrano
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - "<"
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '3.0'
|
94
|
-
type: :development
|
95
|
-
prerelease: false
|
96
|
-
version_requirements: !ruby/object:Gem::Requirement
|
97
|
-
requirements:
|
98
|
-
- - "<"
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: '3.0'
|
101
87
|
- !ruby/object:Gem::Dependency
|
102
88
|
name: pry
|
103
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,6 +129,8 @@ files:
|
|
143
129
|
- Rakefile
|
144
130
|
- appsignal.gemspec
|
145
131
|
- bin/appsignal
|
132
|
+
- gemfiles/capistrano2.gemfile
|
133
|
+
- gemfiles/capistrano3.gemfile
|
146
134
|
- gemfiles/no_dependencies.gemfile
|
147
135
|
- gemfiles/rails-3.0.gemfile
|
148
136
|
- gemfiles/rails-3.1.gemfile
|
@@ -163,7 +151,9 @@ files:
|
|
163
151
|
- lib/appsignal/capistrano.rb
|
164
152
|
- lib/appsignal/cli.rb
|
165
153
|
- lib/appsignal/config.rb
|
166
|
-
- lib/appsignal/
|
154
|
+
- lib/appsignal/instrumentations/net_http.rb
|
155
|
+
- lib/appsignal/integrations/capistrano/appsignal.cap
|
156
|
+
- lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb
|
167
157
|
- lib/appsignal/integrations/capistrano/careful_logger.rb
|
168
158
|
- lib/appsignal/integrations/delayed_job.rb
|
169
159
|
- lib/appsignal/integrations/passenger.rb
|
@@ -195,7 +185,9 @@ files:
|
|
195
185
|
- spec/lib/appsignal/auth_check_spec.rb
|
196
186
|
- spec/lib/appsignal/cli_spec.rb
|
197
187
|
- spec/lib/appsignal/config_spec.rb
|
198
|
-
- spec/lib/appsignal/
|
188
|
+
- spec/lib/appsignal/instrumentations/net_http_spec.rb
|
189
|
+
- spec/lib/appsignal/integrations/capistrano2_spec.rb
|
190
|
+
- spec/lib/appsignal/integrations/capistrano3_spec.rb
|
199
191
|
- spec/lib/appsignal/integrations/delayed_job_spec.rb
|
200
192
|
- spec/lib/appsignal/integrations/passenger_spec.rb
|
201
193
|
- spec/lib/appsignal/integrations/rails_spec.rb
|
@@ -240,9 +232,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
240
232
|
version: 1.9.3
|
241
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
234
|
requirements:
|
243
|
-
- - "
|
235
|
+
- - ">"
|
244
236
|
- !ruby/object:Gem::Version
|
245
|
-
version:
|
237
|
+
version: 1.3.1
|
246
238
|
requirements: []
|
247
239
|
rubyforge_project:
|
248
240
|
rubygems_version: 2.2.2
|
@@ -260,7 +252,9 @@ test_files:
|
|
260
252
|
- spec/lib/appsignal/auth_check_spec.rb
|
261
253
|
- spec/lib/appsignal/cli_spec.rb
|
262
254
|
- spec/lib/appsignal/config_spec.rb
|
263
|
-
- spec/lib/appsignal/
|
255
|
+
- spec/lib/appsignal/instrumentations/net_http_spec.rb
|
256
|
+
- spec/lib/appsignal/integrations/capistrano2_spec.rb
|
257
|
+
- spec/lib/appsignal/integrations/capistrano3_spec.rb
|
264
258
|
- spec/lib/appsignal/integrations/delayed_job_spec.rb
|
265
259
|
- spec/lib/appsignal/integrations/passenger_spec.rb
|
266
260
|
- spec/lib/appsignal/integrations/rails_spec.rb
|
@@ -1,151 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'appsignal/capistrano'
|
3
|
-
require 'capistrano/configuration'
|
4
|
-
|
5
|
-
describe Appsignal::Integrations::Capistrano do
|
6
|
-
let(:config) { project_fixture_config }
|
7
|
-
|
8
|
-
before :all do
|
9
|
-
@capistrano_config = Capistrano::Configuration.new
|
10
|
-
Appsignal::Integrations::Capistrano.tasks(@capistrano_config)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should have a deploy task" do
|
14
|
-
@capistrano_config.find_task('appsignal:deploy').should_not be_nil
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "appsignal:deploy task" do
|
18
|
-
before do
|
19
|
-
@capistrano_config.set(:rails_env, 'production')
|
20
|
-
@capistrano_config.set(:repository, 'master')
|
21
|
-
@capistrano_config.set(:deploy_to, '/home/username/app')
|
22
|
-
@capistrano_config.set(:current_release, '')
|
23
|
-
@capistrano_config.set(:current_revision, '503ce0923ed177a3ce000005')
|
24
|
-
@capistrano_config.dry_run = false
|
25
|
-
ENV['USER'] = 'batman'
|
26
|
-
ENV['PWD'] = project_fixture_path
|
27
|
-
end
|
28
|
-
|
29
|
-
context "config" do
|
30
|
-
before do
|
31
|
-
@capistrano_config.dry_run = true
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should be instantiated with the right params" do
|
35
|
-
Appsignal::Config.should_receive(:new).with(
|
36
|
-
project_fixture_path,
|
37
|
-
'production',
|
38
|
-
{},
|
39
|
-
kind_of(Capistrano::Logger)
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
context "when appsignal_config is available" do
|
44
|
-
before do
|
45
|
-
@capistrano_config.set(:appsignal_config, :name => 'AppName')
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should be instantiated with the right params" do
|
49
|
-
Appsignal::Config.should_receive(:new).with(
|
50
|
-
project_fixture_path,
|
51
|
-
'production',
|
52
|
-
{:name => 'AppName'},
|
53
|
-
kind_of(Capistrano::Logger)
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
|
-
context "when rack_env is used instead of rails_env" do
|
58
|
-
before do
|
59
|
-
@capistrano_config.unset(:rails_env)
|
60
|
-
@capistrano_config.set(:rack_env, 'rack_production')
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should be instantiated with the right params" do
|
64
|
-
Appsignal::Config.should_receive(:new).with(
|
65
|
-
project_fixture_path,
|
66
|
-
'rack_production',
|
67
|
-
{:name => 'AppName'},
|
68
|
-
kind_of(Capistrano::Logger)
|
69
|
-
)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
after { @capistrano_config.find_and_execute_task('appsignal:deploy') }
|
75
|
-
end
|
76
|
-
|
77
|
-
context "send marker" do
|
78
|
-
before :all do
|
79
|
-
@io = StringIO.new
|
80
|
-
@logger = Capistrano::Logger.new(:output => @io)
|
81
|
-
@logger.level = Capistrano::Logger::MAX_LEVEL
|
82
|
-
@capistrano_config.logger = @logger
|
83
|
-
end
|
84
|
-
|
85
|
-
let(:marker_data) do
|
86
|
-
{
|
87
|
-
:revision => '503ce0923ed177a3ce000005',
|
88
|
-
:repository => 'master',
|
89
|
-
:user => 'batman'
|
90
|
-
}
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when active for this environment" do
|
94
|
-
before do
|
95
|
-
@marker = Appsignal::Marker.new(
|
96
|
-
marker_data,
|
97
|
-
config,
|
98
|
-
@logger
|
99
|
-
)
|
100
|
-
Appsignal::Marker.should_receive(:new).with(
|
101
|
-
marker_data,
|
102
|
-
kind_of(Appsignal::Config),
|
103
|
-
kind_of(Capistrano::Logger)
|
104
|
-
).and_return(@marker)
|
105
|
-
end
|
106
|
-
|
107
|
-
context "proper setup" do
|
108
|
-
before do
|
109
|
-
@transmitter = double
|
110
|
-
Appsignal::Transmitter.should_receive(:new).and_return(@transmitter)
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should transmit data" do
|
114
|
-
@transmitter.should_receive(:transmit).and_return('200')
|
115
|
-
@capistrano_config.find_and_execute_task('appsignal:deploy')
|
116
|
-
@io.string.should include('** Notifying Appsignal of deploy...')
|
117
|
-
@io.string.should include('** Appsignal has been notified of this deploy!')
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
it "should not transmit data" do
|
122
|
-
@capistrano_config.find_and_execute_task('appsignal:deploy')
|
123
|
-
@io.string.should include('** Notifying Appsignal of deploy...')
|
124
|
-
@io.string.should include('** Something went wrong while trying to notify Appsignal:')
|
125
|
-
end
|
126
|
-
|
127
|
-
context "dry run" do
|
128
|
-
before { @capistrano_config.dry_run = true }
|
129
|
-
|
130
|
-
it "should not send deploy marker" do
|
131
|
-
@marker.should_not_receive(:transmit)
|
132
|
-
@capistrano_config.find_and_execute_task('appsignal:deploy')
|
133
|
-
@io.string.should include('** Dry run: Deploy marker not actually sent.')
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
context "when not active for this environment" do
|
139
|
-
before do
|
140
|
-
@capistrano_config.set(:rails_env, 'nonsense')
|
141
|
-
end
|
142
|
-
|
143
|
-
it "should not send deploy marker" do
|
144
|
-
Appsignal::Marker.should_not_receive(:new)
|
145
|
-
@capistrano_config.find_and_execute_task('appsignal:deploy')
|
146
|
-
@io.string.should include('Not loading:')
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|