appsignal 0.10.2 → 0.10.3

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.
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