appsignal 1.1.0.beta.12 → 1.1.0.beta.13

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -2
  3. data/Rakefile +0 -2
  4. data/gemfiles/grape.gemfile +0 -2
  5. data/gemfiles/padrino.gemfile +0 -2
  6. data/gemfiles/rails-3.2.gemfile +0 -2
  7. data/gemfiles/rails-4.0.gemfile +1 -1
  8. data/gemfiles/rails-4.1.gemfile +1 -1
  9. data/gemfiles/rails-4.2.gemfile +1 -1
  10. data/gemfiles/rails-5.0.gemfile +0 -2
  11. data/lib/appsignal/auth_check.rb +1 -1
  12. data/lib/appsignal/cli.rb +13 -42
  13. data/lib/appsignal/cli/diagnose.rb +72 -0
  14. data/lib/appsignal/cli/install.rb +296 -0
  15. data/lib/appsignal/cli/notify_of_deploy.rb +41 -0
  16. data/lib/appsignal/config.rb +6 -1
  17. data/lib/appsignal/event_formatter/active_record/sql_formatter.rb +1 -5
  18. data/lib/appsignal/integrations/capistrano/careful_logger.rb +1 -0
  19. data/lib/appsignal/integrations/railtie.rb +0 -4
  20. data/lib/appsignal/version.rb +1 -1
  21. data/{lib/generators/appsignal/templates/appsignal.yml → resources/appsignal.yml.erb} +4 -4
  22. data/spec/lib/appsignal/cli/diagnose_spec.rb +27 -0
  23. data/spec/lib/appsignal/cli/install_spec.rb +438 -0
  24. data/spec/lib/appsignal/cli/notify_of_deploy_spec.rb +128 -0
  25. data/spec/lib/appsignal/cli_spec.rb +23 -126
  26. data/spec/lib/appsignal/config_spec.rb +7 -2
  27. data/spec/lib/appsignal/integrations/sinatra_spec.rb +1 -12
  28. data/spec/lib/appsignal_spec.rb +14 -7
  29. data/spec/spec_helper.rb +16 -4
  30. data/spec/support/project_fixture/config/application.rb +0 -0
  31. data/spec/support/project_fixture/config/environments/development.rb +0 -0
  32. data/spec/support/project_fixture/config/environments/production.rb +0 -0
  33. data/spec/support/project_fixture/config/environments/test.rb +0 -0
  34. metadata +19 -6
  35. data/lib/generators/appsignal/USAGE +0 -8
  36. data/lib/generators/appsignal/appsignal_generator.rb +0 -64
  37. data/spec/lib/generators/appsignal/appsignal_generator_spec.rb +0 -156
@@ -0,0 +1,128 @@
1
+ require 'spec_helper'
2
+ require 'appsignal/cli'
3
+
4
+ describe Appsignal::CLI::NotifyOfDeploy do
5
+ let(:out_stream) { StringIO.new }
6
+ let(:cli) { Appsignal::CLI::NotifyOfDeploy }
7
+ let(:config) { Appsignal::Config.new(project_fixture_path, {}) }
8
+ let(:marker_data) { {:revision => 'aaaaa', :user => 'thijs', :environment => 'production'} }
9
+ before do
10
+ @original_stdout = $stdout
11
+ $stdout = out_stream
12
+ config.stub(:active? => true)
13
+ end
14
+ after do
15
+ $stdout = @original_stdout
16
+ end
17
+
18
+ describe ".run" do
19
+ it "should validate that the config has been loaded and all options have been supplied" do
20
+ cli.should_receive(:validate_active_config)
21
+ cli.should_receive(:validate_required_options).with(
22
+ {},
23
+ [:revision, :user, :environment]
24
+ )
25
+ Appsignal::Marker.should_receive(:new).and_return(double(:transmit => true))
26
+
27
+ cli.run({}, config)
28
+ end
29
+
30
+ it "should notify of a deploy" do
31
+ marker = double
32
+ Appsignal::Marker.should_receive(:new).with(
33
+ {
34
+ :revision => 'aaaaa',
35
+ :user => 'thijs'
36
+ },
37
+ kind_of(Appsignal::Config),
38
+ nil
39
+ ).and_return(marker)
40
+ marker.should_receive(:transmit)
41
+
42
+ cli.run(marker_data, config)
43
+ end
44
+
45
+ it "should notify of a deploy with no config file and a name specified" do
46
+ ENV['PWD'] = '/nonsense'
47
+ ENV['APPSIGNAL_PUSH_API_KEY'] = 'key'
48
+
49
+ marker = double
50
+ Appsignal::Marker.should_receive(:new).with(
51
+ {
52
+ :revision => 'aaaaa',
53
+ :user => 'thijs'
54
+ },
55
+ kind_of(Appsignal::Config),
56
+ nil
57
+ ).and_return(marker)
58
+ marker.should_receive(:transmit)
59
+
60
+ cli.run(marker_data, config)
61
+ end
62
+ end
63
+
64
+ describe "#validate_required_options" do
65
+ let(:required_options) { [:option_1, :option_2, :option_3] }
66
+
67
+ it "should do nothing with all options supplied" do
68
+ cli.send(
69
+ :validate_required_options,
70
+ {
71
+ :option_1 => 1,
72
+ :option_2 => 2,
73
+ :option_3 => 3
74
+ },
75
+ required_options
76
+ )
77
+ out_stream.string.should be_empty
78
+ end
79
+
80
+ it "should print a message with one option missing and exit" do
81
+ lambda {
82
+ cli.send(
83
+ :validate_required_options,
84
+ {
85
+ :option_1 => 1,
86
+ :option_2 => 2
87
+ },
88
+ required_options
89
+ )
90
+ }.should raise_error(SystemExit)
91
+ out_stream.string.should include('Missing options: option_3')
92
+ end
93
+
94
+ it "should print a message with multiple options missing and exit" do
95
+ lambda {
96
+ cli.send(
97
+ :validate_required_options,
98
+ {
99
+ :option_1 => 1,
100
+ :option_2 => ''
101
+ },
102
+ required_options
103
+ )
104
+ }.should raise_error(SystemExit)
105
+ out_stream.string.should include("Missing options: option_2, option_3")
106
+ end
107
+ end
108
+
109
+ describe "#validate_active_config" do
110
+ context "when config is present" do
111
+ it "should do nothing" do
112
+ cli.send(:validate_active_config, config)
113
+ out_stream.string.should be_empty
114
+ end
115
+ end
116
+
117
+ context "when config is not active" do
118
+ before { config.stub(:active? => false) }
119
+
120
+ it "should print a message and exit" do
121
+ lambda {
122
+ cli.send(:validate_active_config, config)
123
+ }.should raise_error(SystemExit)
124
+ out_stream.string.should include('Exiting: No config file or push api key env var found')
125
+ end
126
+ end
127
+ end
128
+ end
@@ -8,20 +8,12 @@ describe Appsignal::CLI do
8
8
  @original_stdout = $stdout
9
9
  $stdout = out_stream
10
10
  ENV['PWD'] = project_fixture_path
11
- cli.config = nil
12
- cli.initial_config = {}
13
11
  cli.options = {:environment => 'production'}
14
12
  end
15
13
  after do
16
14
  $stdout = @original_stdout
17
15
  end
18
16
 
19
- describe "#logger" do
20
- it "should be a logger" do
21
- cli.logger.should be_instance_of(Logger)
22
- end
23
- end
24
-
25
17
  describe "#config" do
26
18
  subject { cli.config }
27
19
 
@@ -36,7 +28,7 @@ describe Appsignal::CLI do
36
28
  }.should raise_error(SystemExit)
37
29
 
38
30
  out_stream.string.should include 'appsignal <command> [options]'
39
- out_stream.string.should include 'Available commands: notify_of_deploy'
31
+ out_stream.string.should include 'Available commands: diagnose, install, notify_of_deploy'
40
32
  end
41
33
  end
42
34
 
@@ -60,51 +52,36 @@ describe Appsignal::CLI do
60
52
  "appsignal -h to see the help"
61
53
  end
62
54
 
63
- describe "#notify_of_deploy" do
64
- it "should validate that the config has been loaded and all options have been supplied" do
65
- cli.should_receive(:validate_active_config)
66
- cli.should_receive(:validate_required_options).with(
67
- [:revision, :user, :environment]
68
- )
69
- Appsignal::Marker.should_receive(:new).and_return(double(:transmit => true))
55
+ describe "diagnose" do
56
+ it "should call Appsignal::Diagnose.install" do
57
+ Appsignal::CLI::Diagnose.should_receive(:run)
70
58
 
71
- cli.notify_of_deploy
59
+ cli.run([
60
+ 'diagnose'
61
+ ])
72
62
  end
63
+ end
73
64
 
74
- it "should notify of a deploy" do
75
- marker = double
76
- Appsignal::Marker.should_receive(:new).with(
77
- {
78
- :revision => 'aaaaa',
79
- :user => 'thijs'
80
- },
81
- kind_of(Appsignal::Config),
82
- kind_of(Logger)
83
- ).and_return(marker)
84
- marker.should_receive(:transmit)
65
+ describe "install" do
66
+ it "should call Appsignal::Install.install" do
67
+ Appsignal::CLI::Install.should_receive(:run).with(
68
+ 'api-key',
69
+ instance_of(Appsignal::Config)
70
+ )
85
71
 
86
72
  cli.run([
87
- 'notify_of_deploy',
88
- '--revision=aaaaa',
89
- '--user=thijs',
90
- '--environment=production'
73
+ 'install',
74
+ 'api-key'
91
75
  ])
92
76
  end
77
+ end
93
78
 
94
- it "should notify of a deploy with no config file and a name specified" do
95
- ENV['PWD'] = '/nonsense'
96
- ENV['APPSIGNAL_PUSH_API_KEY'] = 'key'
97
-
98
- marker = double
99
- Appsignal::Marker.should_receive(:new).with(
100
- {
101
- :revision => 'aaaaa',
102
- :user => 'thijs'
103
- },
104
- kind_of(Appsignal::Config),
105
- kind_of(Logger)
106
- ).and_return(marker)
107
- marker.should_receive(:transmit)
79
+ describe "notify_of_deploy" do
80
+ it "should call Appsignal::Install.install" do
81
+ Appsignal::CLI::NotifyOfDeploy.should_receive(:run).with(
82
+ {:revision=>"aaaaa", :user=>"thijs", :environment=>"production"},
83
+ instance_of(Appsignal::Config)
84
+ )
108
85
 
109
86
  cli.run([
110
87
  'notify_of_deploy',
@@ -113,86 +90,6 @@ describe Appsignal::CLI do
113
90
  '--user=thijs',
114
91
  '--environment=production'
115
92
  ])
116
-
117
- cli.config[:name].should == 'project-production'
118
- end
119
- end
120
-
121
- # protected
122
-
123
- describe "#validate_required_options" do
124
- let(:required_options) { [:option_1, :option_2, :option_3] }
125
-
126
- it "should do nothing with all options supplied" do
127
- cli.options = {
128
- :option_1 => 1,
129
- :option_2 => 2,
130
- :option_3 => 3
131
- }
132
- cli.send(
133
- :validate_required_options,
134
- required_options
135
- )
136
- out_stream.string.should be_empty
137
- end
138
-
139
- it "should print a message with one option missing and exit" do
140
- cli.options = {
141
- :option_1 => 1,
142
- :option_2 => 2
143
- }
144
- lambda {
145
- cli.send(
146
- :validate_required_options,
147
- required_options
148
- )
149
- }.should raise_error(SystemExit)
150
- out_stream.string.should include('Missing options: option_3')
151
- end
152
-
153
- it "should print a message with multiple options missing and exit" do
154
- cli.options = {
155
- :option_1 => 1,
156
- :option_2 => ''
157
- }
158
- lambda {
159
- cli.send(
160
- :validate_required_options,
161
- required_options
162
- )
163
- }.should raise_error(SystemExit)
164
- out_stream.string.should include("Missing options: option_2, option_3")
165
- end
166
- end
167
-
168
- describe "#validate_active_config" do
169
- context "when config is present" do
170
- it "should do nothing" do
171
- cli.send(:validate_active_config)
172
- out_stream.string.should be_empty
173
- end
174
- end
175
-
176
- context "when config is not present" do
177
- before { cli.options = {:environment => 'nonsense'} }
178
-
179
- it "should print a message and exit" do
180
- lambda {
181
- cli.send(:validate_active_config)
182
- }.should raise_error(SystemExit)
183
- out_stream.string.should include('Exiting: No config file or push api key env var found')
184
- end
185
- end
186
-
187
- context "when config is not active" do
188
- before { ENV['PWD'] = '/nonsense' }
189
-
190
- it "should print a message and exit" do
191
- lambda {
192
- cli.send(:validate_active_config)
193
- }.should raise_error(SystemExit)
194
- out_stream.string.should include('Exiting: No config file or push api key env var found')
195
- end
196
93
  end
197
94
  end
198
95
  end
@@ -32,7 +32,7 @@ describe Appsignal::Config do
32
32
  :enable_frontend_error_catching => false,
33
33
  :frontend_error_catching_path => '/appsignal_error_catcher',
34
34
  :enable_allocation_tracking => true,
35
- :enable_gc_instrumentation => true,
35
+ :enable_gc_instrumentation => false,
36
36
  :running_in_container => false
37
37
  }
38
38
  end
@@ -65,11 +65,16 @@ describe Appsignal::Config do
65
65
  end
66
66
  end
67
67
 
68
- describe "#[]" do
68
+ describe "#[]= and #[]" do
69
69
  it "should get the value for an existing key" do
70
70
  subject[:push_api_key].should == 'abc'
71
71
  end
72
72
 
73
+ it "should change and get the value for an existing key" do
74
+ subject[:push_api_key] = 'abcde'
75
+ subject[:push_api_key].should == 'abcde'
76
+ end
77
+
73
78
  it "should return nil for a non-existing key" do
74
79
  subject[:nonsense].should be_nil
75
80
  end
@@ -1,11 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- begin
4
- require 'sinatra'
5
- rescue LoadError
6
- end
7
-
8
- if defined?(::Sinatra)
3
+ if sinatra_present? && !padrino_present?
9
4
  ENV['APPSIGNAL_PUSH_API_KEY'] = 'key'
10
5
  require 'appsignal/integrations/sinatra'
11
6
 
@@ -16,12 +11,6 @@ if defined?(::Sinatra)
16
11
  it { should be_a Logger }
17
12
  end
18
13
 
19
- context "config" do
20
- subject { Appsignal.config }
21
-
22
- it { should be_a(Appsignal::Config) }
23
- end
24
-
25
14
  it "should have added the instrumentation middleware" do
26
15
  Sinatra::Application.middleware.to_a.should include(
27
16
  [Appsignal::Rack::SinatraInstrumentation, [], nil]
@@ -72,12 +72,6 @@ describe Appsignal do
72
72
  Appsignal.subscriber.should be_a(Appsignal::Subscriber)
73
73
  end
74
74
 
75
- it "should install event hooks" do
76
- Appsignal::Extension.should_receive(:install_allocation_event_hook)
77
- Appsignal::Extension.should_receive(:install_gc_event_hooks)
78
- Appsignal.start
79
- end
80
-
81
75
  context "when not active for this environment" do
82
76
  before { Appsignal.config = project_fixture_config('staging') }
83
77
 
@@ -96,7 +90,20 @@ describe Appsignal do
96
90
  end
97
91
  end
98
92
 
99
- context "when allocation tracking and gc instrumentation has been disabled" do
93
+ context "when allocation tracking and gc instrumentation have been enabled" do
94
+ before do
95
+ Appsignal.config.config_hash[:enable_allocation_tracking] = true
96
+ Appsignal.config.config_hash[:enable_gc_instrumentation] = true
97
+ end
98
+
99
+ it "should install event hooks" do
100
+ Appsignal::Extension.should_receive(:install_allocation_event_hook)
101
+ Appsignal::Extension.should_receive(:install_gc_event_hooks)
102
+ Appsignal.start
103
+ end
104
+ end
105
+
106
+ context "when allocation tracking and gc instrumentation have been disabled" do
100
107
  before do
101
108
  Appsignal.config.config_hash[:enable_allocation_tracking] = false
102
109
  Appsignal.config.config_hash[:enable_gc_instrumentation] = false
@@ -69,6 +69,15 @@ rescue LoadError
69
69
  false
70
70
  end
71
71
 
72
+ def sinatra_present?
73
+ begin
74
+ require 'sinatra'
75
+ true
76
+ rescue LoadError
77
+ false
78
+ end
79
+ end
80
+
72
81
  def padrino_present?
73
82
  require 'padrino'
74
83
  true
@@ -114,6 +123,11 @@ RSpec.configure do |config|
114
123
  config.include TimeHelpers
115
124
  config.include TransactionHelpers
116
125
 
126
+ config.before :all do
127
+ FileUtils.rm_rf(tmp_dir)
128
+ FileUtils.mkdir_p(tmp_dir)
129
+ end
130
+
117
131
  config.before do
118
132
  ENV['PWD'] = File.expand_path(File.join(File.dirname(__FILE__), '../'))
119
133
  ENV['RAILS_ENV'] = 'test'
@@ -124,13 +138,11 @@ RSpec.configure do |config|
124
138
  end
125
139
  end
126
140
 
127
- config.after do
128
- Appsignal.logger = nil
129
- end
130
-
131
141
  config.after :all do
132
142
  ActiveSupport::Notifications.notifier.clear_subscribers
133
143
  FileUtils.rm_f(File.join(project_fixture_path, 'log/appsignal.log'))
144
+ Appsignal.config = nil
145
+ Appsignal.logger = nil
134
146
  end
135
147
  end
136
148