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 +4 -0
- data/lib/appsignal.rb +3 -2
- data/lib/appsignal/agent.rb +10 -1
- data/lib/appsignal/version.rb +1 -1
- data/spec/lib/appsignal/agent_spec.rb +23 -4
- data/spec/lib/appsignal_spec.rb +16 -7
- metadata +39 -23
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
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
|
-
|
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)
|
data/lib/appsignal/agent.rb
CHANGED
@@ -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?
|
data/lib/appsignal/version.rb
CHANGED
@@ -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
|
-
|
329
|
-
|
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)
|
data/spec/lib/appsignal_spec.rb
CHANGED
@@ -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
|
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
|
134
|
-
before
|
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
|
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.
|
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-
|
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
|
-
-
|
124
|
-
-
|
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:
|
260
|
+
rubygems_version: 1.8.23
|
245
261
|
signing_key:
|
246
|
-
specification_version:
|
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
|