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