appsignal 0.11.8.beta.0 → 0.11.8.beta.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69c0fe4aba981d664f4b5a320c2cf47816ae4598
4
- data.tar.gz: 546e20aa73e171ca1183c4cba04beed672ced563
3
+ metadata.gz: d352412d00bbd2c1cf81315d80ae4a5c08d8115e
4
+ data.tar.gz: df2cda49d433880e1c89b5c42c1c12cf1abb65bd
5
5
  SHA512:
6
- metadata.gz: dba3ef8508c2b43ef0456f926397ae29cd34a0b454de79cf3cf10e853386a2bfb90fb2d1e60ef21f9ffcf8e56c9425f6ede6669436430b35e2fb95936851be8c
7
- data.tar.gz: 26d06743732e417cd38ddf55372f25f80be96f38d55ed5719c3740b746a32cc0579e5f399e75b1b9d31a62564a31d643778ca8a0ff8ddc02ba7142c582762cb8
6
+ metadata.gz: 8347c842bde632030871bbe90392115a744d1676d1afc98c9f796987b587be7ce5d8c56a742019dd004b1f8b580fc05a9250e2b59ed099ef555d6e31052b1deb
7
+ data.tar.gz: cda5f26ebd0b612f46feca9952f1e420c6370e89e9682e8879e91f1250e9d47edcee7ff61e2cd5b11f6c2e0b08ae1a063451e92e008f1bc4cc10e1d006ec48ca
@@ -1,5 +1,7 @@
1
1
  # 0.11.8
2
2
  * Add frontend error catcher
3
+ * Add background job metadata (queue, priority etc.) to transaction overview
4
+ * Add APPSIGNAL_APP_ENV variable to Rails config, so you can override the environment
3
5
 
4
6
  # 0.11.7
5
7
  * Add option to override Job name in Delayed Job
@@ -22,9 +22,11 @@ if defined?(::Delayed::Plugin)
22
22
  'perform_job.delayed_job',
23
23
  :class => class_name,
24
24
  :method => method_name,
25
- :priority => job.priority,
26
- :attempts => job.attempts,
27
- :queue => job.queue,
25
+ :metadata => {
26
+ :priority => job.priority,
27
+ :attempts => job.attempts,
28
+ :queue => job.queue,
29
+ },
28
30
  :queue_start => job.created_at
29
31
  ) do
30
32
  block.call(job)
@@ -22,7 +22,7 @@ if defined?(::Rails)
22
22
  # Load config
23
23
  Appsignal.config = Appsignal::Config.new(
24
24
  Rails.root,
25
- Rails.env,
25
+ ENV.fetch('APPSIGNAL_APP_ENV', Rails.env),
26
26
  :name => Rails.application.class.parent_name
27
27
  )
28
28
 
@@ -4,18 +4,52 @@ if defined?(::Sidekiq)
4
4
  module Appsignal
5
5
  module Integrations
6
6
  class SidekiqPlugin
7
+ def job_keys
8
+ @job_keys ||= Set.new(%w(
9
+ class args retried_at failed_at
10
+ error_message error_class backtrace
11
+ error_backtrace enqueued_at retry
12
+ ))
13
+ end
14
+
7
15
  def call(worker, item, queue)
8
16
  Appsignal.monitor_transaction(
9
17
  'perform_job.sidekiq',
10
- :class => item['class'],
11
- :method => 'perform',
12
- :attempts => item['retry_count'],
13
- :queue => item['queue'],
18
+ :class => item['class'],
19
+ :method => 'perform',
20
+ :metadata => formatted_metadata(item),
21
+ :params => format_args(item['args']),
14
22
  :queue_start => item['enqueued_at']
15
23
  ) do
16
24
  yield
17
25
  end
18
26
  end
27
+
28
+ def formatted_metadata(item)
29
+ {}.tap do |hsh|
30
+ item.each do |key, val|
31
+ hsh[key] = truncate(string_or_inspect(val)) unless job_keys.include?(key)
32
+ end
33
+ end
34
+ end
35
+
36
+ def string_or_inspect(string_or_other)
37
+ if string_or_other.is_a?(String)
38
+ string_or_other
39
+ else
40
+ string_or_other.inspect
41
+ end
42
+ end
43
+
44
+ def format_args(args)
45
+ args.map do |arg|
46
+ truncate(string_or_inspect(arg))
47
+ end
48
+ end
49
+
50
+ def truncate(text)
51
+ text.size > 100 ? "#{text[0...97]}..." : text
52
+ end
19
53
  end
20
54
  end
21
55
  end
@@ -1,3 +1,3 @@
1
1
  module Appsignal
2
- VERSION = '0.11.8.beta.0'
2
+ VERSION = '0.11.8.beta.1'
3
3
  end
@@ -30,11 +30,11 @@ describe "Delayed Job integration" do
30
30
  let(:time) { Time.parse('01-01-2001 10:01:00UTC') }
31
31
  let(:job) do
32
32
  double(
33
- :name => 'TestClass#perform',
34
- :priority => 1,
35
- :attempts => 1,
36
- :queue => 'default',
37
- :created_at => time - 60_000,
33
+ :name => 'TestClass#perform',
34
+ :priority => 1,
35
+ :attempts => 1,
36
+ :queue => 'default',
37
+ :created_at => time - 60_000,
38
38
  :payload_object => double
39
39
  )
40
40
  end
@@ -45,11 +45,13 @@ describe "Delayed Job integration" do
45
45
  it "should wrap in a transaction with the correct params" do
46
46
  Appsignal.should_receive(:monitor_transaction).with(
47
47
  'perform_job.delayed_job',
48
- :class => 'TestClass',
49
- :method => 'perform',
50
- :priority => 1,
51
- :attempts => 1,
52
- :queue => 'default',
48
+ :class => 'TestClass',
49
+ :method => 'perform',
50
+ :metadata => {
51
+ :priority => 1,
52
+ :attempts => 1,
53
+ :queue => 'default',
54
+ },
53
55
  :queue_start => time - 60_000,
54
56
  )
55
57
 
@@ -67,7 +69,7 @@ describe "Delayed Job integration" do
67
69
  :name => 'TestClass#perform',
68
70
  :priority => 1,
69
71
  :attempts => 1,
70
- :queue => 'default',
72
+ :queue => 'default',
71
73
  :created_at => time - 60_000
72
74
  )
73
75
  end
@@ -76,9 +78,11 @@ describe "Delayed Job integration" do
76
78
  'perform_job.delayed_job',
77
79
  :class => 'CustomClass',
78
80
  :method => 'perform',
79
- :priority => 1,
80
- :attempts => 1,
81
- :queue => 'default',
81
+ :metadata => {
82
+ :priority => 1,
83
+ :attempts => 1,
84
+ :queue => 'default',
85
+ },
82
86
  :queue_start => time - 60_000
83
87
  )
84
88
 
@@ -20,8 +20,8 @@ if rails_present?
20
20
  it { should be_a(Appsignal::Config) }
21
21
 
22
22
  its(:root_path) { should == Pathname.new(project_fixture_path) }
23
- its(:env) { should == 'test' }
24
- its([:name]) { should == 'TestApp' }
23
+ its(:env) { should == 'test' }
24
+ its([:name]) { should == 'TestApp' }
25
25
 
26
26
  context "initial config" do
27
27
  subject { Appsignal.config.initial_config }
@@ -48,5 +48,21 @@ if rails_present?
48
48
  MyApp::Application.middleware.to_a.should_not include Appsignal::Rack::Instrumentation
49
49
  end
50
50
  end
51
+
52
+ context "with APPSIGNAL_APP_ENV ENV var set" do
53
+ around do |sample|
54
+ ENV['APPSIGNAL_APP_ENV'] = 'env_test'
55
+
56
+ MyEnvApp::Application.config.root = project_fixture_path
57
+ MyEnvApp::Application.initialize!
58
+
59
+ sample.run
60
+
61
+ ENV.delete('APPSIGNAL_APP_ENV')
62
+ end
63
+ subject { Appsignal.config }
64
+
65
+ its(:env) { should == 'env_test' }
66
+ end
51
67
  end
52
68
  end
@@ -17,11 +17,14 @@ describe "Sidekiq integration" do
17
17
  let(:queue) { double }
18
18
  let(:current_transaction) { Appsignal::Transaction.create(SecureRandom.uuid, {}) }
19
19
  let(:item) {{
20
- 'class' => 'TestClass',
20
+ 'class' => 'TestClass',
21
21
  'retry_count' => 0,
22
- 'queue' => 'default',
23
- 'enqueued_at' => Time.parse('01-01-2001 10:00:00UTC')
22
+ 'queue' => 'default',
23
+ 'enqueued_at' => Time.parse('01-01-2001 10:00:00UTC'),
24
+ 'args' => ['Model', 1],
25
+ 'extra' => 'data'
24
26
  }}
27
+ let(:plugin) { Appsignal::Integrations::SidekiqPlugin.new }
25
28
 
26
29
  before do
27
30
  Appsignal.stub(:is_ignored_exception? => false)
@@ -32,10 +35,14 @@ describe "Sidekiq integration" do
32
35
  it "should wrap in a transaction with the correct params" do
33
36
  Appsignal.should_receive(:monitor_transaction).with(
34
37
  'perform_job.sidekiq',
35
- :class => 'TestClass',
36
- :method => 'perform',
37
- :attempts => 0,
38
- :queue => 'default',
38
+ :class => 'TestClass',
39
+ :method => 'perform',
40
+ :metadata => {
41
+ 'retry_count' => "0",
42
+ 'queue' => 'default',
43
+ 'extra' => 'data'
44
+ },
45
+ :params => ['Model', "1"],
39
46
  :queue_start => Time.parse('01-01-2001 10:00:00UTC')
40
47
  )
41
48
  end
@@ -67,6 +74,67 @@ describe "Sidekiq integration" do
67
74
  end
68
75
  end
69
76
 
77
+ describe "#formatted_data" do
78
+ let(:item) do
79
+ {
80
+ 'foo' => 'bar',
81
+ 'class' => 'TestClass',
82
+ }
83
+ end
84
+
85
+ it "should only add items to the hash that do not appear in JOB_KEYS" do
86
+ plugin.formatted_metadata(item).should == {'foo' => 'bar'}
87
+ end
88
+ end
89
+
90
+ describe "#format_args" do
91
+ let(:object) { Object.new }
92
+ let(:args) do
93
+ [
94
+ 'Model',
95
+ 1,
96
+ object
97
+ ]
98
+ end
99
+
100
+ it "should format the arguments" do
101
+ plugin.format_args(args).should == ['Model', '1', object.inspect]
102
+ end
103
+ end
104
+
105
+ describe "#truncate" do
106
+ let(:very_long_text) do
107
+ "a" * 200
108
+ end
109
+
110
+ it "should truncate the text to 100 chars max" do
111
+ plugin.truncate(very_long_text).should == "#{'a' * 97}..."
112
+ end
113
+ end
114
+
115
+ describe "#string_or_inspect" do
116
+ context "when string" do
117
+ it "should return the string" do
118
+ plugin.string_or_inspect('foo').should == 'foo'
119
+ end
120
+ end
121
+
122
+ context "when integer" do
123
+ it "should return the string" do
124
+ plugin.string_or_inspect(1).should == '1'
125
+ end
126
+ end
127
+
128
+ context "when object" do
129
+ let(:object) { Object.new }
130
+
131
+ it "should return the string" do
132
+ plugin.string_or_inspect(object).should == object.inspect
133
+ end
134
+ end
135
+
136
+ end
137
+
70
138
  context "without sidekiq" do
71
139
  before(:all) { Object.send(:remove_const, :Sidekiq) }
72
140
 
@@ -4,3 +4,10 @@ module MyApp
4
4
  config.eager_load = false
5
5
  end
6
6
  end
7
+
8
+ module MyEnvApp
9
+ class Application < Rails::Application
10
+ config.active_support.deprecation = proc { |message, stack| }
11
+ config.eager_load = false
12
+ end
13
+ 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: 0.11.8.beta.0
4
+ version: 0.11.8.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Beekman
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-03-03 00:00:00.000000000 Z
15
+ date: 2015-03-05 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rack