appsignal 2.0.6 → 2.1.0.alpha.1
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.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +2 -7
- data/Rakefile +3 -9
- data/ext/agent.yml +3 -15
- data/gemfiles/rails-4.2.gemfile +0 -4
- data/gemfiles/resque.gemfile +0 -4
- data/lib/appsignal/cli/demo.rb +1 -1
- data/lib/appsignal/cli/install.rb +1 -1
- data/lib/appsignal/transaction.rb +14 -70
- data/lib/appsignal/version.rb +1 -1
- data/spec/lib/appsignal/capistrano3_spec.rb +3 -2
- data/spec/lib/appsignal/transaction_spec.rb +25 -75
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20f58e406be6333a02b4e9d9c71b27f39012406d
|
4
|
+
data.tar.gz: 66bb80adf03714c807bfdcc8b08718a750d2aedb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8e6951d7689466dbf33dcfba1e17f9bab6d17cfb723079f8a306b57c7508d77f1eb42ec5e00a6c5ac945c38a8edaa253091b14af9abfbe19406a85b9360813f
|
7
|
+
data.tar.gz: 410d73ddc69a17245fa52f8c9298ff21a7fefdd99edbd306cdd8cdb9917834a7b3b7c740e4827f59c233c134c41665b360d907c3c8ed40a0f2575a8049511a83
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,5 @@
|
|
1
|
-
# 2.0
|
2
|
-
*
|
3
|
-
|
4
|
-
# 2.0.5
|
5
|
-
* Improved logging for agent connection issues. Commit
|
6
|
-
cdf9d3286d704e22473eb901c839cab4fab45a6f
|
7
|
-
* Handle nil request/environments in transactions. PR #231
|
1
|
+
# 2.1.0
|
2
|
+
* Add support for musl libc
|
8
3
|
|
9
4
|
# 2.0.4
|
10
5
|
* Use consistent log format for both file and STDOUT logs. PR #203
|
data/Rakefile
CHANGED
@@ -57,7 +57,7 @@ task :publish do
|
|
57
57
|
puts "# Creating tag #{version}"
|
58
58
|
puts `git tag #{version}`
|
59
59
|
puts `git push origin #{version}`
|
60
|
-
puts `git push origin #{
|
60
|
+
puts `git push origin #{current_branch}`
|
61
61
|
rescue
|
62
62
|
raise "Tag: '#{version}' already exists"
|
63
63
|
end
|
@@ -75,14 +75,8 @@ task :publish do
|
|
75
75
|
@version ||= 'v' << gem_version
|
76
76
|
end
|
77
77
|
|
78
|
-
def
|
79
|
-
|
80
|
-
gem_version.include?('beta') ||
|
81
|
-
gem_version.include?('rc')
|
82
|
-
'develop'
|
83
|
-
else
|
84
|
-
'master'
|
85
|
-
end
|
78
|
+
def current_branch
|
79
|
+
`git rev-parse --abbrev-ref HEAD`.chomp
|
86
80
|
end
|
87
81
|
|
88
82
|
def git_status_to_array(changes)
|
data/ext/agent.yml
CHANGED
@@ -1,18 +1,6 @@
|
|
1
1
|
---
|
2
|
-
version:
|
2
|
+
version: 21f0b26
|
3
3
|
triples:
|
4
4
|
x86_64-linux:
|
5
|
-
checksum:
|
6
|
-
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/
|
7
|
-
i686-linux:
|
8
|
-
checksum: 0ae5f06cf9fd516c7a33cbe29a78016b3b419717870d5fba793345fecb696950
|
9
|
-
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/a1cb32f/appsignal-i686-linux-all-static.tar.gz
|
10
|
-
x86-linux:
|
11
|
-
checksum: 0ae5f06cf9fd516c7a33cbe29a78016b3b419717870d5fba793345fecb696950
|
12
|
-
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/a1cb32f/appsignal-i686-linux-all-static.tar.gz
|
13
|
-
x86_64-darwin:
|
14
|
-
checksum: 750e49e56c2024c82adc64471feb855ab7a5caff79cb37978a83e11e31a023ce
|
15
|
-
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/a1cb32f/appsignal-x86_64-darwin-all-static.tar.gz
|
16
|
-
universal-darwin:
|
17
|
-
checksum: 750e49e56c2024c82adc64471feb855ab7a5caff79cb37978a83e11e31a023ce
|
18
|
-
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/a1cb32f/appsignal-x86_64-darwin-all-static.tar.gz
|
5
|
+
checksum: e965ea8d4a01ea2caf9b50a6520c2f2385a00c00bc5d259079f93baddca0b28c
|
6
|
+
download_url: https://appsignal-agent-releases.global.ssl.fastly.net/21f0b26/appsignal-x86_64-linux-all-static.tar.gz
|
data/gemfiles/rails-4.2.gemfile
CHANGED
data/gemfiles/resque.gemfile
CHANGED
data/lib/appsignal/cli/demo.rb
CHANGED
@@ -10,7 +10,7 @@ module Appsignal
|
|
10
10
|
puts "Sending demonstration sample data..."
|
11
11
|
if Appsignal::Demo.transmit
|
12
12
|
puts "Demonstration sample data sent!"
|
13
|
-
puts "It may take about a minute for the data to appear on
|
13
|
+
puts "It may take about a minute for the data to appear on AppSignal.com/accounts"
|
14
14
|
else
|
15
15
|
puts "Error: Unable to start the AppSignal agent and send data to AppSignal.com"
|
16
16
|
puts "Please use `appsignal diagnose` to debug your configuration."
|
@@ -204,7 +204,7 @@ module Appsignal
|
|
204
204
|
puts " Sending example data to AppSignal..."
|
205
205
|
if Appsignal::Demo.transmit
|
206
206
|
puts " Example data sent!"
|
207
|
-
puts " It may take about a minute for the data to appear on
|
207
|
+
puts " It may take about a minute for the data to appear on AppSignal.com/accounts"
|
208
208
|
puts
|
209
209
|
puts " Please return to your browser and follow the instructions."
|
210
210
|
else
|
@@ -213,8 +213,7 @@ module Appsignal
|
|
213
213
|
title || BLANK,
|
214
214
|
body || BLANK,
|
215
215
|
duration,
|
216
|
-
body_format || Appsignal::EventFormatter::DEFAULT
|
217
|
-
self.class.garbage_collection_profiler.total_time
|
216
|
+
body_format || Appsignal::EventFormatter::DEFAULT
|
218
217
|
)
|
219
218
|
end
|
220
219
|
|
@@ -239,40 +238,23 @@ module Appsignal
|
|
239
238
|
|
240
239
|
protected
|
241
240
|
|
242
|
-
# Returns calculated background queue start time in milliseconds, based on
|
243
|
-
# environment values.
|
244
|
-
#
|
245
|
-
# @return [nil] if no {#environment} is present.
|
246
|
-
# @return [nil] if there is no `:queue_start` in the {#environment}.
|
247
|
-
# @return [Integer]
|
248
241
|
def background_queue_start
|
249
|
-
|
250
|
-
return unless env
|
251
|
-
queue_start = env[:queue_start]
|
252
|
-
return unless queue_start
|
253
|
-
|
242
|
+
return unless request.env
|
243
|
+
return unless queue_start = request.env[:queue_start]
|
254
244
|
(queue_start.to_f * 1000.0).to_i
|
255
245
|
end
|
256
246
|
|
257
|
-
# Returns HTTP queue start time in milliseconds.
|
258
|
-
#
|
259
|
-
# @return [nil] if no queue start time is found.
|
260
|
-
# @return [nil] if begin time is too low to be plausible.
|
261
|
-
# @return [Integer] queue start in milliseconds.
|
262
247
|
def http_queue_start
|
263
|
-
|
264
|
-
return unless env
|
265
|
-
|
266
|
-
return unless env_var
|
267
|
-
cleaned_value = env_var.tr("^0-9".freeze, "".freeze)
|
248
|
+
return unless request.env
|
249
|
+
return unless env_var = request.env['HTTP_X_QUEUE_START'.freeze] || request.env['HTTP_X_REQUEST_START'.freeze]
|
250
|
+
cleaned_value = env_var.tr('^0-9'.freeze, ''.freeze)
|
268
251
|
return if cleaned_value.empty?
|
269
|
-
|
270
252
|
value = cleaned_value.to_i
|
271
253
|
if value > 4_102_441_200_000
|
272
|
-
# Value is in microseconds
|
254
|
+
# Value is in microseconds
|
273
255
|
value / 1_000
|
274
256
|
elsif value < 946_681_200_000
|
275
|
-
# Value is
|
257
|
+
# Value is to low to be plausible
|
276
258
|
nil
|
277
259
|
else
|
278
260
|
# Value is in milliseconds
|
@@ -301,62 +283,24 @@ module Appsignal
|
|
301
283
|
Appsignal::Utils::ParamsSanitizer.sanitize params, options
|
302
284
|
end
|
303
285
|
|
304
|
-
# Returns sanitized environment for a transaction.
|
305
|
-
#
|
306
|
-
# The environment of a transaction can contain a lot of information, not
|
307
|
-
# all of it useful for debugging.
|
308
|
-
#
|
309
|
-
# Only the values from the keys specified in `ENV_METHODS` are returned.
|
310
|
-
#
|
311
|
-
# @return [nil] if no environment is present.
|
312
|
-
# @return [Hash<String, Object>]
|
313
286
|
def sanitized_environment
|
314
|
-
|
315
|
-
return if env.empty?
|
316
|
-
|
287
|
+
return unless request.env
|
317
288
|
{}.tap do |out|
|
318
289
|
ENV_METHODS.each do |key|
|
319
|
-
out[key] = env[key] if env[key]
|
290
|
+
out[key] = request.env[key] if request.env[key]
|
320
291
|
end
|
321
292
|
end
|
322
293
|
end
|
323
294
|
|
324
|
-
# Returns sanitized session data.
|
325
|
-
#
|
326
|
-
# The session data is sanitized by the {Appsignal::Utils::ParamsSanitizer}.
|
327
|
-
#
|
328
|
-
# @return [nil] if `:skip_session_data` config is set to `true`.
|
329
|
-
# @return [nil] if the {#request} object doesn't respond to `#session`.
|
330
|
-
# @return [nil] if the {#request} session data is `nil`.
|
331
|
-
# @return [Hash<String, Object>]
|
332
295
|
def sanitized_session_data
|
333
|
-
return if Appsignal.config[:skip_session_data] ||
|
334
|
-
|
335
|
-
session = request.session
|
336
|
-
return unless session
|
337
|
-
|
296
|
+
return if Appsignal.config[:skip_session_data] || !request.respond_to?(:session)
|
297
|
+
return unless session = request.session
|
338
298
|
Appsignal::Utils::ParamsSanitizer.sanitize(session.to_hash)
|
339
299
|
end
|
340
300
|
|
341
|
-
# Returns metadata from the environment.
|
342
|
-
#
|
343
|
-
# @return [nil] if no `:metadata` key is present in the {#environment}.
|
344
|
-
# @return [Hash<String, Object>]
|
345
301
|
def metadata
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
# Returns the environment for a transaction.
|
350
|
-
#
|
351
|
-
# Returns an empty Hash when the {#request} object doesn't listen to the
|
352
|
-
# `#env` method or the `#env` is nil.
|
353
|
-
#
|
354
|
-
# @return [Hash<String, Object>]
|
355
|
-
def environment
|
356
|
-
return {} unless request.respond_to?(:env)
|
357
|
-
return {} unless request.env
|
358
|
-
|
359
|
-
request.env
|
302
|
+
return unless request.env
|
303
|
+
request.env[:metadata]
|
360
304
|
end
|
361
305
|
|
362
306
|
# Only keep tags if they meet the following criteria:
|
data/lib/appsignal/version.rb
CHANGED
@@ -3,8 +3,9 @@ if DependencyHelper.capistrano3_present?
|
|
3
3
|
require 'capistrano/deploy'
|
4
4
|
require 'appsignal/capistrano'
|
5
5
|
|
6
|
+
include Capistrano::DSL
|
7
|
+
|
6
8
|
describe "Capistrano 3 integration" do
|
7
|
-
let(:capistrano) { Class.new.extend(Capistrano::DSL) }
|
8
9
|
let(:config) { project_fixture_config }
|
9
10
|
let(:out_stream) { std_stream }
|
10
11
|
let(:output) { out_stream.read }
|
@@ -25,7 +26,7 @@ if DependencyHelper.capistrano3_present?
|
|
25
26
|
|
26
27
|
def run
|
27
28
|
capture_std_streams(out_stream, out_stream) do
|
28
|
-
|
29
|
+
invoke('appsignal:deploy')
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
@@ -22,7 +22,7 @@ describe Appsignal::Transaction do
|
|
22
22
|
before { Timecop.freeze(time) }
|
23
23
|
after { Timecop.return }
|
24
24
|
|
25
|
-
|
25
|
+
context "class methods" do
|
26
26
|
describe ".create" do
|
27
27
|
it "should add the transaction to thread local" do
|
28
28
|
Appsignal::Extension.should_receive(:start_transaction).with('1', 'http_request', 0)
|
@@ -466,29 +466,21 @@ describe Appsignal::Transaction do
|
|
466
466
|
|
467
467
|
describe "#start_event" do
|
468
468
|
it "should start the event in the extension" do
|
469
|
-
|
469
|
+
transaction.ext.should_receive(:start_event)
|
470
470
|
|
471
471
|
transaction.start_event
|
472
472
|
end
|
473
473
|
end
|
474
474
|
|
475
475
|
describe "#finish_event" do
|
476
|
-
let(:fake_gc_time) { 123 }
|
477
|
-
before do
|
478
|
-
described_class.garbage_collection_profiler
|
479
|
-
.should_receive(:total_time)
|
480
|
-
.at_least(:once)
|
481
|
-
.and_return(fake_gc_time)
|
482
|
-
end
|
483
|
-
|
484
476
|
it "should finish the event in the extension" do
|
485
477
|
transaction.ext.should_receive(:finish_event).with(
|
486
478
|
'name',
|
487
479
|
'title',
|
488
480
|
'body',
|
489
481
|
1,
|
490
|
-
|
491
|
-
)
|
482
|
+
0
|
483
|
+
)
|
492
484
|
|
493
485
|
transaction.finish_event(
|
494
486
|
'name',
|
@@ -504,8 +496,8 @@ describe Appsignal::Transaction do
|
|
504
496
|
'',
|
505
497
|
'',
|
506
498
|
0,
|
507
|
-
|
508
|
-
)
|
499
|
+
0
|
500
|
+
)
|
509
501
|
|
510
502
|
transaction.finish_event(
|
511
503
|
'name',
|
@@ -514,26 +506,25 @@ describe Appsignal::Transaction do
|
|
514
506
|
nil
|
515
507
|
)
|
516
508
|
end
|
517
|
-
end
|
518
509
|
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
.and_return(fake_gc_time)
|
510
|
+
it "should add garbage collection time" do
|
511
|
+
allow_any_instance_of(Appsignal::GarbageCollectionProfiler)
|
512
|
+
.to receive(:internal_profiler)
|
513
|
+
.and_return(FakeGCProfiler.new(0.12345))
|
514
|
+
|
515
|
+
transaction.finish_event('name', nil, nil, nil)
|
526
516
|
end
|
517
|
+
end
|
527
518
|
|
519
|
+
describe "#record_event" do
|
528
520
|
it "should record the event in the extension" do
|
529
521
|
transaction.ext.should_receive(:record_event).with(
|
530
522
|
'name',
|
531
523
|
'title',
|
532
524
|
'body',
|
533
525
|
1000,
|
534
|
-
1
|
535
|
-
|
536
|
-
).and_call_original
|
526
|
+
1
|
527
|
+
)
|
537
528
|
|
538
529
|
transaction.record_event(
|
539
530
|
'name',
|
@@ -550,9 +541,8 @@ describe Appsignal::Transaction do
|
|
550
541
|
'',
|
551
542
|
'',
|
552
543
|
1000,
|
553
|
-
0
|
554
|
-
|
555
|
-
).and_call_original
|
544
|
+
0
|
545
|
+
)
|
556
546
|
|
557
547
|
transaction.record_event(
|
558
548
|
'name',
|
@@ -609,18 +599,6 @@ describe Appsignal::Transaction do
|
|
609
599
|
describe "#background_queue_start" do
|
610
600
|
subject { transaction.send(:background_queue_start) }
|
611
601
|
|
612
|
-
context "when request is nil" do
|
613
|
-
let(:request) { nil }
|
614
|
-
|
615
|
-
it { should eq nil }
|
616
|
-
end
|
617
|
-
|
618
|
-
context "when env is nil" do
|
619
|
-
before { expect(transaction.request).to receive(:env).and_return(nil) }
|
620
|
-
|
621
|
-
it { should eq nil }
|
622
|
-
end
|
623
|
-
|
624
602
|
context "when queue start is nil" do
|
625
603
|
it { should eq nil }
|
626
604
|
end
|
@@ -638,14 +616,8 @@ describe Appsignal::Transaction do
|
|
638
616
|
subject { transaction.send(:http_queue_start) }
|
639
617
|
|
640
618
|
shared_examples "http queue start" do
|
641
|
-
context "when request is nil" do
|
642
|
-
let(:request) { nil }
|
643
|
-
|
644
|
-
it { should be_nil }
|
645
|
-
end
|
646
|
-
|
647
619
|
context "when env is nil" do
|
648
|
-
before {
|
620
|
+
before { transaction.request.stub(:env => nil) }
|
649
621
|
|
650
622
|
it { should be_nil }
|
651
623
|
end
|
@@ -779,16 +751,8 @@ describe Appsignal::Transaction do
|
|
779
751
|
|
780
752
|
subject { transaction.send(:sanitized_environment) }
|
781
753
|
|
782
|
-
context "when request is nil" do
|
783
|
-
let(:request) { nil }
|
784
|
-
|
785
|
-
it "returns nil" do
|
786
|
-
expect(subject).to be_nil
|
787
|
-
end
|
788
|
-
end
|
789
|
-
|
790
754
|
context "when env is nil" do
|
791
|
-
before {
|
755
|
+
before { transaction.request.stub(:env => nil) }
|
792
756
|
|
793
757
|
it { should be_nil }
|
794
758
|
end
|
@@ -809,22 +773,14 @@ describe Appsignal::Transaction do
|
|
809
773
|
describe '#sanitized_session_data' do
|
810
774
|
subject { transaction.send(:sanitized_session_data) }
|
811
775
|
|
812
|
-
context "when
|
813
|
-
|
814
|
-
|
815
|
-
it "returns nil" do
|
816
|
-
expect(subject).to be_nil
|
817
|
-
end
|
818
|
-
end
|
819
|
-
|
820
|
-
context "when session is nil" do
|
821
|
-
before { expect(transaction.request).to receive(:session).and_return(nil) }
|
776
|
+
context "when env is nil" do
|
777
|
+
before { transaction.request.stub(:session => nil) }
|
822
778
|
|
823
779
|
it { should be_nil }
|
824
780
|
end
|
825
781
|
|
826
|
-
context "when
|
827
|
-
before {
|
782
|
+
context "when env is empty" do
|
783
|
+
before { transaction.request.stub(:session => {}) }
|
828
784
|
|
829
785
|
it { should eq({}) }
|
830
786
|
end
|
@@ -888,14 +844,8 @@ describe Appsignal::Transaction do
|
|
888
844
|
describe "#metadata" do
|
889
845
|
subject { transaction.send(:metadata) }
|
890
846
|
|
891
|
-
context "when request is nil" do
|
892
|
-
let(:request) { nil }
|
893
|
-
|
894
|
-
it { should be_nil }
|
895
|
-
end
|
896
|
-
|
897
847
|
context "when env is nil" do
|
898
|
-
before {
|
848
|
+
before { transaction.request.stub(:env => nil) }
|
899
849
|
|
900
850
|
it { should be_nil }
|
901
851
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.1.0.alpha.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Beekman
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
@@ -327,9 +327,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
327
327
|
version: '1.9'
|
328
328
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
329
329
|
requirements:
|
330
|
-
- - "
|
330
|
+
- - ">"
|
331
331
|
- !ruby/object:Gem::Version
|
332
|
-
version:
|
332
|
+
version: 1.3.1
|
333
333
|
requirements: []
|
334
334
|
rubyforge_project:
|
335
335
|
rubygems_version: 2.5.2
|