appsignal 0.10.2 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.10.3
2
+ * Shut down all operations when agent is not active
3
+ * Separately rescue OpenSSL::SSL::SSLError
4
+
1
5
  # 0.10.2
2
6
  * Bugfix in event payload sanitization
3
7
 
data/lib/appsignal.rb CHANGED
@@ -146,7 +146,7 @@ module Appsignal
146
146
  @logger = Logger.new($stdout)
147
147
  @logger.formatter = lambda do |severity, datetime, progname, msg|
148
148
  "appsignal: #{msg}\n"
149
- end
149
+ end
150
150
  end
151
151
  @logger.level = Logger::INFO
152
152
  @logger << @in_memory_log.string if @in_memory_log
@@ -159,7 +159,8 @@ module Appsignal
159
159
  end
160
160
 
161
161
  def active?
162
- config && config.active?
162
+ config && config.active? &&
163
+ agent && agent.active?
163
164
  end
164
165
 
165
166
  def is_ignored_exception?(exception)
@@ -6,7 +6,7 @@ module Appsignal
6
6
  :transmitter, :subscriber, :paused
7
7
 
8
8
  def initialize
9
- return unless Appsignal.active?
9
+ return unless Appsignal.config.active?
10
10
  if Appsignal.config.env == 'development'
11
11
  @sleep_time = 10.0
12
12
  else
@@ -18,9 +18,14 @@ module Appsignal
18
18
  @transmitter = Transmitter.new(ACTION)
19
19
  subscribe
20
20
  start_thread
21
+ @active = true
21
22
  Appsignal.logger.info('Started Appsignal agent')
22
23
  end
23
24
 
25
+ def active?
26
+ !! @active
27
+ end
28
+
24
29
  def start_thread
25
30
  Appsignal.logger.debug('Starting agent thread')
26
31
  @thread = Thread.new do
@@ -102,6 +107,8 @@ module Appsignal
102
107
  handle_result(
103
108
  transmitter.transmit(aggregator_to_be_sent.post_processed_queue!)
104
109
  )
110
+ rescue OpenSSL::SSL::SSLError => ex
111
+ Appsignal.logger.error "OpenSSL::SSL::SSLError: #{ex.message}"
105
112
  rescue Exception => ex
106
113
  Appsignal.logger.error "#{ex.class} while sending queue: #{ex.message}"
107
114
  Appsignal.logger.error ex.backtrace.join('\n')
@@ -119,6 +126,7 @@ module Appsignal
119
126
 
120
127
  def forked!
121
128
  Appsignal.logger.info('Forked worker process')
129
+ @active = true
122
130
  @pid = Process.pid
123
131
  Thread.exclusive do
124
132
  @aggregator = Aggregator.new
@@ -129,6 +137,7 @@ module Appsignal
129
137
 
130
138
  def shutdown(send_current_queue=false, reason=nil)
131
139
  Appsignal.logger.info("Shutting down agent (#{reason})")
140
+ @active = false
132
141
  unsubscribe
133
142
  stop_thread
134
143
  send_queue if send_current_queue && @aggregator.has_transactions?
@@ -1,3 +1,3 @@
1
1
  module Appsignal
2
- VERSION = '0.10.2'
2
+ VERSION = '0.10.3'
3
3
  end
@@ -10,6 +10,8 @@ describe Appsignal::Agent do
10
10
 
11
11
  let(:transaction) { regular_transaction }
12
12
 
13
+ its(:active?) { should be_true }
14
+
13
15
  context "pid" do
14
16
  its(:master_pid) { should == Process.pid }
15
17
  its(:pid) { should == Process.pid }
@@ -284,6 +286,15 @@ describe Appsignal::Agent do
284
286
  once
285
287
  end
286
288
 
289
+ it "handles an OpenSSL error in transmit" do
290
+ subject.transmitter.stub(:transmit).and_raise(
291
+ OpenSSL::SSL::SSLError.new('Message')
292
+ )
293
+
294
+ Appsignal.logger.should_receive(:error).
295
+ with('OpenSSL::SSL::SSLError: Message').once
296
+ end
297
+
287
298
  after { subject.send_queue }
288
299
  end
289
300
 
@@ -298,17 +309,20 @@ describe Appsignal::Agent do
298
309
  describe "#forked!" do
299
310
  subject { Appsignal.agent }
300
311
 
301
- it "should create a new aggregator, set the new pid and restart the thread" do
312
+ it "should set active to true, create a new aggregator, set the new pid and restart the thread" do
302
313
  master_pid = subject.master_pid
303
314
  subject.pid.should == master_pid
304
315
 
305
316
  Process.stub(:pid => 9000000001)
317
+ subject.active = false
306
318
  subject.should_receive(:resubscribe)
307
319
  subject.should_receive(:restart_thread)
308
320
  previous_aggregator = subject.aggregator
309
321
 
310
322
  subject.forked!
311
323
 
324
+ subject.active?.should be_true
325
+
312
326
  subject.aggregator.should_not == previous_aggregator
313
327
  subject.aggregator.should be_a Appsignal::Aggregator
314
328
 
@@ -323,10 +337,15 @@ describe Appsignal::Agent do
323
337
  Thread.should_receive(:kill).with(subject.thread)
324
338
  end
325
339
 
340
+ it "should not be active anymore" do
341
+ subject.shutdown
342
+ subject.active?.should be_false
343
+ end
344
+
326
345
  context "when not sending the current queue" do
327
346
  it "should log the reason for shutting down" do
328
- Appsignal.logger.should_receive(:info).with('Shutting down agent (shutting down)')
329
- subject.shutdown(false, 'shutting down')
347
+ Appsignal.logger.should_receive(:info).with('Shutting down agent (shutting down)')
348
+ subject.shutdown(false, 'shutting down')
330
349
  end
331
350
 
332
351
  context "with an empty queue" do
@@ -445,7 +464,7 @@ describe Appsignal::Agent do
445
464
  end
446
465
 
447
466
  context "when inactive" do
448
- before { Appsignal.stub(:active? => false) }
467
+ before { Appsignal.config.stub(:active? => false) }
449
468
 
450
469
  it "should not start a thread" do
451
470
  Thread.should_not_receive(:new)
@@ -124,20 +124,29 @@ describe Appsignal do
124
124
  describe '.active?' do
125
125
  subject { Appsignal.active? }
126
126
 
127
- context "without config" do
128
- before { Appsignal.config = nil }
127
+ context "without config and agent" do
128
+ before do
129
+ Appsignal.config = nil
130
+ Appsignal.agent = nil
131
+ end
129
132
 
130
133
  it { should be_false }
131
134
  end
132
135
 
133
- context "with config but inactive" do
134
- before { Appsignal.config = project_fixture_config('nonsense') }
136
+ context "with agent and inactive config" do
137
+ before do
138
+ Appsignal.config = project_fixture_config('nonsense')
139
+ Appsignal.agent = Appsignal::Agent.new
140
+ end
135
141
 
136
142
  it { should be_false }
137
143
  end
138
144
 
139
- context "with active config" do
140
- before { Appsignal.config = project_fixture_config }
145
+ context "with active agent and config" do
146
+ before do
147
+ Appsignal.config = project_fixture_config
148
+ Appsignal.agent = Appsignal::Agent.new
149
+ end
141
150
 
142
151
  it { should be_true }
143
152
  end
@@ -398,7 +407,7 @@ describe Appsignal do
398
407
  let(:tags) { nil }
399
408
 
400
409
  it "should send the exception to AppSignal" do
401
- agent = double(:shutdown => true)
410
+ agent = double(:shutdown => true, :active? => true)
402
411
  Appsignal.stub(:agent).and_return(agent)
403
412
  agent.should_receive(:send_queue)
404
413
  agent.should_receive(:enqueue).with(kind_of(Appsignal::Transaction))
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.10.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Robert Beekman
@@ -12,104 +13,118 @@ authors:
12
13
  autorequire:
13
14
  bindir: bin
14
15
  cert_chain: []
15
- date: 2014-08-15 00:00:00.000000000 Z
16
+ date: 2014-08-21 00:00:00.000000000 Z
16
17
  dependencies:
17
18
  - !ruby/object:Gem::Dependency
18
19
  name: rack
19
20
  requirement: !ruby/object:Gem::Requirement
21
+ none: false
20
22
  requirements:
21
- - - ">="
23
+ - - ! '>='
22
24
  - !ruby/object:Gem::Version
23
25
  version: '0'
24
26
  type: :runtime
25
27
  prerelease: false
26
28
  version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
27
30
  requirements:
28
- - - ">="
31
+ - - ! '>='
29
32
  - !ruby/object:Gem::Version
30
33
  version: '0'
31
34
  - !ruby/object:Gem::Dependency
32
35
  name: thread_safe
33
36
  requirement: !ruby/object:Gem::Requirement
37
+ none: false
34
38
  requirements:
35
- - - ">="
39
+ - - ! '>='
36
40
  - !ruby/object:Gem::Version
37
41
  version: '0'
38
42
  type: :runtime
39
43
  prerelease: false
40
44
  version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
41
46
  requirements:
42
- - - ">="
47
+ - - ! '>='
43
48
  - !ruby/object:Gem::Version
44
49
  version: '0'
45
50
  - !ruby/object:Gem::Dependency
46
51
  name: rake
47
52
  requirement: !ruby/object:Gem::Requirement
53
+ none: false
48
54
  requirements:
49
- - - ">="
55
+ - - ! '>='
50
56
  - !ruby/object:Gem::Version
51
57
  version: '0'
52
58
  type: :development
53
59
  prerelease: false
54
60
  version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
55
62
  requirements:
56
- - - ">="
63
+ - - ! '>='
57
64
  - !ruby/object:Gem::Version
58
65
  version: '0'
59
66
  - !ruby/object:Gem::Dependency
60
67
  name: rspec
61
68
  requirement: !ruby/object:Gem::Requirement
69
+ none: false
62
70
  requirements:
63
- - - "~>"
71
+ - - ~>
64
72
  - !ruby/object:Gem::Version
65
73
  version: 2.14.1
66
74
  type: :development
67
75
  prerelease: false
68
76
  version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
69
78
  requirements:
70
- - - "~>"
79
+ - - ~>
71
80
  - !ruby/object:Gem::Version
72
81
  version: 2.14.1
73
82
  - !ruby/object:Gem::Dependency
74
83
  name: pry
75
84
  requirement: !ruby/object:Gem::Requirement
85
+ none: false
76
86
  requirements:
77
- - - ">="
87
+ - - ! '>='
78
88
  - !ruby/object:Gem::Version
79
89
  version: '0'
80
90
  type: :development
81
91
  prerelease: false
82
92
  version_requirements: !ruby/object:Gem::Requirement
93
+ none: false
83
94
  requirements:
84
- - - ">="
95
+ - - ! '>='
85
96
  - !ruby/object:Gem::Version
86
97
  version: '0'
87
98
  - !ruby/object:Gem::Dependency
88
99
  name: timecop
89
100
  requirement: !ruby/object:Gem::Requirement
101
+ none: false
90
102
  requirements:
91
- - - ">="
103
+ - - ! '>='
92
104
  - !ruby/object:Gem::Version
93
105
  version: '0'
94
106
  type: :development
95
107
  prerelease: false
96
108
  version_requirements: !ruby/object:Gem::Requirement
109
+ none: false
97
110
  requirements:
98
- - - ">="
111
+ - - ! '>='
99
112
  - !ruby/object:Gem::Version
100
113
  version: '0'
101
114
  - !ruby/object:Gem::Dependency
102
115
  name: webmock
103
116
  requirement: !ruby/object:Gem::Requirement
117
+ none: false
104
118
  requirements:
105
- - - ">="
119
+ - - ! '>='
106
120
  - !ruby/object:Gem::Version
107
121
  version: '0'
108
122
  type: :development
109
123
  prerelease: false
110
124
  version_requirements: !ruby/object:Gem::Requirement
125
+ none: false
111
126
  requirements:
112
- - - ">="
127
+ - - ! '>='
113
128
  - !ruby/object:Gem::Version
114
129
  version: '0'
115
130
  description: The official appsignal.com gem
@@ -120,8 +135,8 @@ executables:
120
135
  extensions: []
121
136
  extra_rdoc_files: []
122
137
  files:
123
- - ".gitignore"
124
- - ".travis.yml"
138
+ - .gitignore
139
+ - .travis.yml
125
140
  - CHANGELOG.md
126
141
  - Gemfile
127
142
  - LICENSE
@@ -224,26 +239,27 @@ files:
224
239
  homepage: https://github.com/appsignal/appsignal
225
240
  licenses:
226
241
  - MIT
227
- metadata: {}
228
242
  post_install_message:
229
243
  rdoc_options: []
230
244
  require_paths:
231
245
  - lib
232
246
  required_ruby_version: !ruby/object:Gem::Requirement
247
+ none: false
233
248
  requirements:
234
- - - ">="
249
+ - - ! '>='
235
250
  - !ruby/object:Gem::Version
236
251
  version: 1.9.3
237
252
  required_rubygems_version: !ruby/object:Gem::Requirement
253
+ none: false
238
254
  requirements:
239
- - - ">="
255
+ - - ! '>='
240
256
  - !ruby/object:Gem::Version
241
257
  version: '0'
242
258
  requirements: []
243
259
  rubyforge_project:
244
- rubygems_version: 2.2.2
260
+ rubygems_version: 1.8.23
245
261
  signing_key:
246
- specification_version: 4
262
+ specification_version: 3
247
263
  summary: Logs performance and exception data from your app to appsignal.com
248
264
  test_files:
249
265
  - spec/lib/appsignal/agent_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 859c45e8e3c4c18607db69172155bcba95894ff6
4
- data.tar.gz: 2ce273fbee2435ff234f84caec78b8ff9f980940
5
- SHA512:
6
- metadata.gz: 4fb5d774dfbd2dc99f8a2ac4a380dc22641eb7747797c3855311b88e40ea3ce60536456966a1da46f48453d6c33bc2ed21f24c960dda3d51f96779b9e57eb7b4
7
- data.tar.gz: 01c652ae81255dca073ca584d3702fcfbc0642c8431d6efe6e3835a8217530020f35ebe55535a0f42881d73f886e75931f76b5184f0ba29054d65f616050b213