appsignal 0.7.1 → 0.8.0.alpha.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWNiNDkwNGY4MGQxNDBkNTE4ZTU2ZDczYmY4YTRiOWU5OTRjZjFkOA==
4
+ NTVhMjJhZmE1M2Y3ZTNmNzhhNjdlNDU1ZDRiN2ZkN2M5YmZhZjUwNQ==
5
5
  data.tar.gz: !binary |-
6
- NzhlZTIyMzgzODAwZjdlOTllNmYxMzMwZTE0ZTI2YzZjNzg2ZTEyNA==
6
+ ODVhZDM0M2FhMTkxNzgxZWI1NDBhNDI4YWNlMjJkMjBlNDE5ZmRlZg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YzI5MWYxYjFkN2M4MDkwZWY4M2FmMDRlYWFlNDI0NDI1ZGZlZTM1ZWQ0YmI4
10
- M2U0OGEyNmQyODZkNTY1MDk5MWM0ZTFkMjk3NTgwZjY1ZTljMDRhZjRhYTk2
11
- ZWVhMzMyYzI1NGJjZGY3ZWRhNzVjNjEzNDk3Zjk4NTdjMjk4ZWY=
9
+ YzNjMmVhNzY2ZmNhNmFjMDc3NWM4YjA5YzQxYzc0YzkzMDVkOGI2NDc3MGVk
10
+ MzI4N2NjMDMwODVjZGRhZTczNWI4MTkzZjViMzRjNmVjMmQ3MTk3NTZjY2E0
11
+ OTQxOTFlOWNkMWVkOWMyNDI1ZDhhNjRlNGFjZjIwMmU2MDcxNmM=
12
12
  data.tar.gz: !binary |-
13
- MDg5YzQ2OTdhNWY2ZmVhYjJjNmU0NzVlZDcxMzZlN2JmZTAyOTNmMmE1OTQ2
14
- ZDVjODAzNWNmMDljYWI4ZTQ1NWZmZDFmYzM5Y2VjZjc4YmY1MDIwMDMzZWQz
15
- OThkOThiZWNiNWI0YzAwMzYxOWFjNTVjYWYzN2ZhNzQ4NzA2Yzk=
13
+ YjZmMjExNzFhZTZlNzE2OWFjZmJmNTdkMTYwZmQ3NTNjOTZkNTQxMzhmMTA1
14
+ ZDU0ZDhlOTM1NDBiN2U3YTAzNzc1YWQ1YTFlMTg1Y2JiYzBmMWM4NWYxMzAy
15
+ NDYyM2RkNTU2YzI1YzgzMDYwZTE5ZjgzYzJlN2Y0YmUwYjBjNGQ=
@@ -12,6 +12,7 @@ gemfile:
12
12
  - "gemfiles/rails-3.1.gemfile"
13
13
  - "gemfiles/rails-3.2.gemfile"
14
14
  - "gemfiles/rails-4.0.gemfile"
15
+ - "gemfiles/rails-4.1.gemfile"
15
16
 
16
17
  matrix:
17
18
  allow_failures:
@@ -1,3 +1,6 @@
1
+ # 0.8.0
2
+ * Support for background processors
3
+
1
4
  # 0.7.1
2
5
  * Better support for forking webservers
3
6
 
data/README.md CHANGED
@@ -63,6 +63,7 @@ bundle --gemfile gemfiles/rails-3.0.gemfile
63
63
  bundle --gemfile gemfiles/rails-3.1.gemfile
64
64
  bundle --gemfile gemfiles/rails-3.2.gemfile
65
65
  bundle --gemfile gemfiles/rails-4.0.gemfile
66
+ bundle --gemfile gemfiles/rails-4.1.gemfile
66
67
  bundle --gemfile gemfiles/sinatra.gemfile
67
68
  ```
68
69
 
@@ -74,6 +75,7 @@ BUNDLE_GEMFILE=gemfiles/rails-3.0.gemfile bundle exec rspec
74
75
  BUNDLE_GEMFILE=gemfiles/rails-3.1.gemfile bundle exec rspec
75
76
  BUNDLE_GEMFILE=gemfiles/rails-3.2.gemfile bundle exec rspec
76
77
  BUNDLE_GEMFILE=gemfiles/rails-4.0.gemfile bundle exec rspec
78
+ BUNDLE_GEMFILE=gemfiles/rails-4.1.gemfile bundle exec rspec
77
79
  BUNDLE_GEMFILE=gemfiles/sinatra.gemfile bundle exec rspec
78
80
  ```
79
81
 
data/Rakefile CHANGED
@@ -59,30 +59,34 @@ task :publish do
59
59
  end
60
60
 
61
61
  task :bundle do
62
- puts `bundle --gemfile gemfiles/no_dependencies.gemfile`
63
- puts `bundle --gemfile gemfiles/rails-3.0.gemfile`
64
- puts `bundle --gemfile gemfiles/rails-3.1.gemfile`
65
- puts `bundle --gemfile gemfiles/rails-3.2.gemfile`
66
- puts `bundle --gemfile gemfiles/rails-4.0.gemfile`
67
- puts `bundle --gemfile gemfiles/sinatra.gemfile`
62
+ system 'bundle --gemfile gemfiles/no_dependencies.gemfile'
63
+ system 'bundle --gemfile gemfiles/rails-3.0.gemfile'
64
+ system 'bundle --gemfile gemfiles/rails-3.1.gemfile'
65
+ system 'bundle --gemfile gemfiles/rails-3.2.gemfile'
66
+ system 'bundle --gemfile gemfiles/rails-4.0.gemfile'
67
+ system 'bundle --gemfile gemfiles/rails-4.1.gemfile'
68
+ system 'bundle --gemfile gemfiles/sinatra.gemfile'
68
69
  end
69
70
 
70
71
  task :spec do
71
72
  puts 'Running no dependencies'
72
- puts `env BUNDLE_GEMFILE=gemfiles/no_dependencies.gemfile bundle exec rspec`
73
+ system 'env BUNDLE_GEMFILE=gemfiles/no_dependencies.gemfile bundle exec rspec'
73
74
 
74
75
  puts 'Running rails-3.0'
75
- puts `env BUNDLE_GEMFILE=gemfiles/rails-3.0.gemfile bundle exec rspec`
76
+ system 'env BUNDLE_GEMFILE=gemfiles/rails-3.0.gemfile bundle exec rspec'
76
77
 
77
78
  puts 'Running rails-3.1'
78
- puts `env BUNDLE_GEMFILE=gemfiles/rails-3.1.gemfile bundle exec rspec`
79
+ system 'env BUNDLE_GEMFILE=gemfiles/rails-3.1.gemfile bundle exec rspec'
79
80
 
80
81
  puts 'Running rails-3.2'
81
- puts `env BUNDLE_GEMFILE=gemfiles/rails-3.2.gemfile bundle exec rspec`
82
+ system 'env BUNDLE_GEMFILE=gemfiles/rails-3.2.gemfile bundle exec rspec'
82
83
 
83
84
  puts 'Running rails-4.0'
84
- puts `env BUNDLE_GEMFILE=gemfiles/rails-4.0.gemfile bundle exec rspec`
85
+ system 'env BUNDLE_GEMFILE=gemfiles/rails-4.0.gemfile bundle exec rspec'
86
+
87
+ puts 'Running rails-4.1'
88
+ system 'env BUNDLE_GEMFILE=gemfiles/rails-4.1.gemfile bundle exec rspec'
85
89
 
86
90
  puts 'Running sinatra'
87
- puts `env BUNDLE_GEMFILE=gemfiles/sinatra.gemfile bundle exec rspec`
91
+ system 'env BUNDLE_GEMFILE=gemfiles/sinatra.gemfile bundle exec rspec'
88
92
  end
@@ -32,6 +32,7 @@ Gem::Specification.new do |gem|
32
32
  gem.add_development_dependency 'rspec'
33
33
  gem.add_development_dependency 'capistrano', '< 3.0'
34
34
  gem.add_development_dependency 'pry'
35
+ gem.add_development_dependency 'timecop'
35
36
 
36
37
  if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
37
38
  gem.add_development_dependency 'racc'
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '~> 4.1.0.beta'
4
+
5
+ gem 'generator_spec'
6
+
7
+ gemspec :path => '../'
@@ -121,3 +121,4 @@ require 'appsignal/version'
121
121
  require 'appsignal/integrations/passenger'
122
122
  require 'appsignal/integrations/unicorn'
123
123
  require 'appsignal/integrations/rails'
124
+ require 'appsignal/integrations/sidekiq'
@@ -45,6 +45,8 @@ module Appsignal
45
45
  event = ActiveSupport::Notifications::Event.new(*args)
46
46
  if event.name.start_with?('process_action')
47
47
  Appsignal::Transaction.current.set_process_action_event(event)
48
+ elsif event.name.start_with?('perform_job')
49
+ Appsignal::Transaction.current.set_perform_job_event(event)
48
50
  end
49
51
  Appsignal::Transaction.current.add_event(event)
50
52
  end
@@ -0,0 +1,35 @@
1
+ if defined?(::Sidekiq)
2
+ module Appsignal
3
+ module Integrations
4
+ class SidekiqPlugin
5
+ def call(worker, item, queue)
6
+ Appsignal::Transaction.create(SecureRandom.uuid, ENV.to_hash)
7
+
8
+ ActiveSupport::Notifications.instrument(
9
+ 'perform_job.sidekiq',
10
+ :class => item['class'],
11
+ :method => 'perform',
12
+ :attempts => item['retry_count'],
13
+ :queue => item['queue'],
14
+ :queue_time => (Time.now.to_f - item['enqueued_at'].to_f) * 1000
15
+ ) do
16
+ yield
17
+ end
18
+ rescue Exception => exception
19
+ unless Appsignal.is_ignored_exception?(exception)
20
+ Appsignal::Transaction.current.add_exception(exception)
21
+ end
22
+ raise exception
23
+ ensure
24
+ Appsignal::Transaction.current.complete!
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ Sidekiq.configure_server do |config|
31
+ config.server_middleware do |chain|
32
+ chain.add Appsignal::Integrations::SidekiqPlugin
33
+ end
34
+ end
35
+ end
@@ -22,7 +22,7 @@ module Appsignal
22
22
  end
23
23
 
24
24
  attr_reader :request_id, :events, :process_action_event, :action, :exception,
25
- :env, :fullpath, :time, :tags
25
+ :env, :fullpath, :time, :tags, :kind
26
26
 
27
27
  def initialize(request_id, env)
28
28
  @request_id = request_id
@@ -51,9 +51,16 @@ module Appsignal
51
51
 
52
52
  def set_process_action_event(event)
53
53
  @process_action_event = event
54
- if event && event.payload
55
- @action = "#{event.payload[:controller]}##{event.payload[:action]}"
56
- end
54
+ return unless event && event.payload
55
+ @action = "#{event.payload[:controller]}##{event.payload[:action]}"
56
+ @kind = 'http_request'
57
+ end
58
+
59
+ def set_perform_job_event(event)
60
+ @process_action_event = event
61
+ return unless event && event.payload
62
+ @action = "#{event.payload[:class]}##{event.payload[:method]}"
63
+ @kind = 'background_job'
57
64
  end
58
65
 
59
66
  def add_event(event)
@@ -114,6 +121,14 @@ module Appsignal
114
121
  end
115
122
  end
116
123
 
124
+ def queue_start
125
+ if @kind == 'background_job'
126
+ @process_action_event.payload[:queue_start].to_f
127
+ else
128
+ http_queue_start
129
+ end
130
+ end
131
+
117
132
  def http_queue_start
118
133
  return unless env
119
134
  env_var = env['HTTP_X_QUEUE_START'] || env['HTTP_X_REQUEST_START']
@@ -9,7 +9,7 @@ module Appsignal
9
9
 
10
10
  def to_hash
11
11
  merge_process_action_event_with_log_entry! if process_action_event
12
- add_http_queue_duration_to_hash!
12
+ add_queue_duration_to_hash!
13
13
  if exception?
14
14
  add_exception_to_hash!
15
15
  add_tags_to_hash!
@@ -25,7 +25,7 @@ module Appsignal
25
25
  :request_id => request_id,
26
26
  :log_entry => {
27
27
  :path => fullpath,
28
- :kind => 'http_request',
28
+ :kind => kind,
29
29
  :time => time,
30
30
  :environment => sanitized_environment,
31
31
  :session_data => sanitized_session_data
@@ -38,15 +38,18 @@ module Appsignal
38
38
  hash[:log_entry].merge!(event_to_hash(process_action_event))
39
39
  hash[:log_entry].tap do |o|
40
40
  o.merge!(o.delete(:payload))
41
- o.delete(:action)
42
41
  o.delete(:controller)
42
+ o.delete(:action)
43
43
  o.delete(:name)
44
+ o.delete(:class)
45
+ o.delete(:method)
46
+ o.delete(:queue_start)
44
47
  o[:action] = action
45
48
  end
46
49
  end
47
50
 
48
- def add_http_queue_duration_to_hash!
49
- start = http_queue_start
51
+ def add_queue_duration_to_hash!
52
+ start = queue_start
50
53
  if start
51
54
  hash[:log_entry][:queue_duration] = hash[:log_entry][:time] - start
52
55
  end
@@ -1,3 +1,3 @@
1
1
  module Appsignal
2
- VERSION = '0.7.1'
2
+ VERSION = '0.8.0.alpha.0'
3
3
  end
@@ -95,14 +95,14 @@ describe Appsignal::Agent do
95
95
  end
96
96
 
97
97
  it "should should not listen to events that start with a bang" do
98
- Appsignal::Transaction.current.should_not receive(:add_event)
98
+ Appsignal::Transaction.current.should_not_receive(:add_event)
99
99
 
100
100
  ActiveSupport::Notifications.instrument '!render_template'
101
101
  end
102
102
 
103
103
  it "should add a normal event" do
104
- Appsignal::Transaction.current.should_not receive(:set_process_action_event)
105
- Appsignal::Transaction.current.should receive(:add_event).with(
104
+ Appsignal::Transaction.current.should_not_receive(:set_process_action_event)
105
+ Appsignal::Transaction.current.should_receive(:add_event).with(
106
106
  kind_of(ActiveSupport::Notifications::Event)
107
107
  ).at_least(:once)
108
108
 
@@ -110,15 +110,26 @@ describe Appsignal::Agent do
110
110
  end
111
111
 
112
112
  it "should add and set a process action event" do
113
- Appsignal::Transaction.current.should receive(:set_process_action_event).with(
113
+ Appsignal::Transaction.current.should_receive(:set_process_action_event).with(
114
114
  kind_of(ActiveSupport::Notifications::Event)
115
115
  ).at_least(:once)
116
- Appsignal::Transaction.current.should receive(:add_event).with(
116
+ Appsignal::Transaction.current.should_receive(:add_event).with(
117
117
  kind_of(ActiveSupport::Notifications::Event)
118
118
  ).at_least(:once)
119
119
 
120
120
  ActiveSupport::Notifications.instrument 'process_action.rack'
121
121
  end
122
+
123
+ it "should add and set a perform job event" do
124
+ Appsignal::Transaction.current.should_receive(:set_perform_job_event).with(
125
+ kind_of(ActiveSupport::Notifications::Event)
126
+ ).at_least(:once)
127
+ Appsignal::Transaction.current.should_receive(:add_event).with(
128
+ kind_of(ActiveSupport::Notifications::Event)
129
+ ).at_least(:once)
130
+
131
+ ActiveSupport::Notifications.instrument 'perform_job.processor'
132
+ end
122
133
  end
123
134
  end
124
135
 
@@ -171,6 +182,21 @@ describe Appsignal::Agent do
171
182
  after { subject.send_queue }
172
183
  end
173
184
 
185
+ describe "#forked!" do
186
+ its(:forked?) { should be_false }
187
+
188
+ it "should create a new aggregator and restart the thread" do
189
+ previous_aggregator = subject.aggregator
190
+ subject.should_receive(:restart_thread)
191
+
192
+ subject.forked!
193
+
194
+ subject.forked?.should be_true
195
+ subject.aggregator.should_not == previous_aggregator
196
+ subject.aggregator.should be_a Appsignal::Aggregator
197
+ end
198
+ end
199
+
174
200
  describe "#shutdown" do
175
201
  before do
176
202
  ActiveSupport::Notifications.should_receive(:unsubscribe).with(subject.subscriber)
@@ -211,15 +237,6 @@ describe Appsignal::Agent do
211
237
  subject.shutdown(true)
212
238
  end
213
239
  end
214
-
215
- context "when we're a child process" do
216
- it "should shutdown" do
217
- subject.stub(:forked? => true)
218
- subject.should_not_receive(:send_queue)
219
-
220
- subject.shutdown(true)
221
- end
222
- end
223
240
  end
224
241
  end
225
242
 
@@ -298,16 +315,10 @@ describe Appsignal::Agent do
298
315
  end
299
316
  end
300
317
 
301
- describe "#shutdown" do
302
- it "does not raise exceptions" do
303
- expect { subject.send(:shutdown) }.not_to raise_error
304
- end
305
- end
306
-
307
- describe "when inactive" do
318
+ context "when inactive" do
308
319
  before { Appsignal.stub(:active? => false) }
309
320
 
310
- it "should not start a new thread" do
321
+ it "should not start a thread" do
311
322
  Thread.should_not_receive(:new)
312
323
  end
313
324
 
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ class VerySpecificError < RuntimeError
4
+ end
5
+
6
+ describe "Sidekiq integration" do
7
+ let(:file) { File.expand_path('lib/appsignal/integrations/sidekiq.rb') }
8
+ before :all do
9
+ module Sidekiq
10
+ def self.configure_server
11
+ end
12
+ end
13
+ end
14
+ before do
15
+ load file
16
+ start_agent
17
+ end
18
+
19
+ let(:worker) { double }
20
+ let(:queue) { double }
21
+ let(:current_transaction) { Appsignal::Transaction.create(SecureRandom.uuid, {}) }
22
+ let(:item) {{
23
+ 'class' => 'TestClass',
24
+ 'retry_count' => 0,
25
+ 'queue' => 'default',
26
+ 'enqueued_at' => Time.parse('01-01-2001 10:00:00UTC')
27
+ }}
28
+
29
+ before do
30
+ Appsignal.stub(:is_ignored_exception? => false)
31
+ Appsignal::Transaction.stub(:current => current_transaction)
32
+ end
33
+
34
+ context "with a performance call" do
35
+ it "should create an instrumentation with the correct params" do
36
+ ActiveSupport::Notifications.should_receive(:instrument).with(
37
+ 'perform_job.sidekiq',
38
+ :class => 'TestClass',
39
+ :method => 'perform',
40
+ :attempts => 0,
41
+ :queue => 'default',
42
+ :queue_time => 60_000
43
+ )
44
+ end
45
+
46
+ after do
47
+ Timecop.freeze(Time.parse('01-01-2001 10:01:00UTC')) do
48
+ Appsignal::Integrations::SidekiqPlugin.new.call(worker, item, queue) do
49
+ # nothing
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ context "with an erroring call" do
56
+ let(:error) { VerySpecificError.new('the roof') }
57
+ it "should add exception to appsignal" do
58
+ current_transaction.should_receive(:add_exception).with(error)
59
+ end
60
+
61
+ after do
62
+ begin
63
+ Timecop.freeze(Time.parse('01-01-2001 10:01:00UTC')) do
64
+ Appsignal::Integrations::SidekiqPlugin.new.call(worker, item, queue) do
65
+ raise error
66
+ end
67
+ end
68
+ rescue VerySpecificError
69
+ end
70
+ end
71
+ end
72
+
73
+ context "without sidekiq" do
74
+ before(:all) { Object.send(:remove_const, :Sidekiq) }
75
+
76
+ specify { expect { Sidekiq }.to raise_error(NameError) }
77
+ specify { expect { load file }.to_not raise_error }
78
+ end
79
+ end
@@ -112,5 +112,28 @@ describe Appsignal::Transaction::Formatter do
112
112
  } }
113
113
  end
114
114
  end
115
+
116
+ context "with a background request" do
117
+ let(:transaction) { background_job_transaction }
118
+ before { transaction.truncate! }
119
+
120
+ its(:keys) { should =~ [:request_id, :log_entry, :failed] }
121
+ its([:request_id]) { should == '1' }
122
+ its([:log_entry]) { should == {
123
+ :action => "BackgroundJob#perform",
124
+ :duration => be_within(0.01).of(100.0),
125
+ :end => 978364860.1,
126
+ :queue_duration => 10.0,
127
+ :priority => 1,
128
+ :attempts => 0,
129
+ :queue => 'default',
130
+ :environment => {},
131
+ :kind => "background_job",
132
+ :path => "/foo",
133
+ :session_data => {},
134
+ :time => 978364860.0,
135
+ } }
136
+ its([:failed]) { should be_false }
137
+ end
115
138
  end
116
139
  end
@@ -44,13 +44,42 @@ describe Appsignal::Transaction do
44
44
  end
45
45
 
46
46
  describe '#set_process_action_event' do
47
+ before { transaction.set_process_action_event(process_action_event) }
47
48
  let(:process_action_event) { notification_event }
48
49
 
49
50
  it 'should add a process action event' do
50
- transaction.set_process_action_event(process_action_event)
51
-
52
51
  transaction.process_action_event.should == process_action_event
53
52
  end
53
+
54
+ it "should set the action" do
55
+ transaction.action.should == 'BlogPostsController#show'
56
+ end
57
+
58
+ it "should set the kind" do
59
+ transaction.kind.should == 'http_request'
60
+ end
61
+ end
62
+
63
+ describe "set_perform_job_event" do
64
+ before { transaction.set_perform_job_event(perform_job_event) }
65
+ let(:perform_job_event) do
66
+ notification_event(
67
+ :name => 'perform_job.delayed_job',
68
+ :payload => create_background_payload
69
+ )
70
+ end
71
+
72
+ it 'should add a process action event' do
73
+ transaction.process_action_event.should == perform_job_event
74
+ end
75
+
76
+ it "should set the action" do
77
+ transaction.action.should == 'BackgroundJob#perform'
78
+ end
79
+
80
+ it "should set the kind" do
81
+ transaction.kind.should == 'background_job'
82
+ end
54
83
  end
55
84
 
56
85
  describe "#set_tags" do
@@ -287,7 +316,26 @@ describe Appsignal::Transaction do
287
316
  end
288
317
  end
289
318
 
290
- # protected
319
+ describe "#queue_start" do
320
+ subject { transaction.queue_start }
321
+
322
+ context "for a http request" do
323
+ let(:transaction) { regular_transaction }
324
+
325
+ it "should call http_queue_start" do
326
+ transaction.should_receive(:http_queue_start)
327
+ subject
328
+ end
329
+ end
330
+
331
+ context "for a background job" do
332
+ let(:transaction) { background_job_transaction }
333
+
334
+ it "should get the queue start from the payload" do
335
+ subject.should == 978364850.0
336
+ end
337
+ end
338
+ end
291
339
 
292
340
  describe "#http_queue_start" do
293
341
  let(:slightly_earlier_time) { fixed_time - 10.0 }
@@ -329,6 +377,8 @@ describe Appsignal::Transaction do
329
377
  end
330
378
  end
331
379
 
380
+ # protected
381
+
332
382
  describe '#add_sanitized_context!' do
333
383
  subject { transaction.send(:add_sanitized_context!) }
334
384
 
@@ -1,6 +1,7 @@
1
1
  ENV['RAILS_ENV'] ||= 'test'
2
2
  require 'rspec'
3
3
  require 'pry'
4
+ require 'timecop'
4
5
  require 'active_support/notifications'
5
6
 
6
7
  begin
@@ -24,4 +24,15 @@ module NotificationHelpers
24
24
  :db_runtime => 500
25
25
  }.merge(args)
26
26
  end
27
+
28
+ def create_background_payload(args={})
29
+ {
30
+ :class => 'BackgroundJob',
31
+ :method => 'perform',
32
+ :priority => 1,
33
+ :attempts => 0,
34
+ :queue => 'default',
35
+ :queue_start => fixed_time - 10,
36
+ }
37
+ end
27
38
  end
@@ -59,6 +59,23 @@ module TransactionHelpers
59
59
  )
60
60
  end
61
61
 
62
+ def background_job_transaction(args={})
63
+ Appsignal::Transaction.create(
64
+ '1',
65
+ {
66
+ 'SERVER_NAME' => 'localhost',
67
+ 'action_dispatch.routes' => 'not_available'
68
+ }.merge(args)
69
+ ).tap do |o|
70
+ o.set_perform_job_event(
71
+ notification_event(
72
+ :name => 'perform_job.delayed_job',
73
+ :payload => create_background_payload
74
+ )
75
+ )
76
+ end
77
+ end
78
+
62
79
  def appsignal_transaction(args={})
63
80
  process_action_event = args.delete(:process_action_event)
64
81
  events = args.delete(:events) || [
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.7.1
4
+ version: 0.8.0.alpha.0
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: 2013-12-20 00:00:00.000000000 Z
15
+ date: 2013-12-24 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activesupport
@@ -112,6 +112,20 @@ dependencies:
112
112
  - - ! '>='
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: timecop
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
115
129
  description: The official appsignal.com gem
116
130
  email:
117
131
  - support@appsignal.com
@@ -135,6 +149,7 @@ files:
135
149
  - gemfiles/rails-3.1.gemfile
136
150
  - gemfiles/rails-3.2.gemfile
137
151
  - gemfiles/rails-4.0.gemfile
152
+ - gemfiles/rails-4.1.gemfile
138
153
  - gemfiles/sinatra.gemfile
139
154
  - lib/appsignal.rb
140
155
  - lib/appsignal/agent.rb
@@ -153,6 +168,7 @@ files:
153
168
  - lib/appsignal/integrations/capistrano/careful_logger.rb
154
169
  - lib/appsignal/integrations/passenger.rb
155
170
  - lib/appsignal/integrations/rails.rb
171
+ - lib/appsignal/integrations/sidekiq.rb
156
172
  - lib/appsignal/integrations/sinatra.rb
157
173
  - lib/appsignal/integrations/unicorn.rb
158
174
  - lib/appsignal/marker.rb
@@ -180,6 +196,7 @@ files:
180
196
  - spec/lib/appsignal/integrations/capistrano_spec.rb
181
197
  - spec/lib/appsignal/integrations/passenger_spec.rb
182
198
  - spec/lib/appsignal/integrations/rails_spec.rb
199
+ - spec/lib/appsignal/integrations/sidekiq_spec.rb
183
200
  - spec/lib/appsignal/integrations/sinatra_spec.rb
184
201
  - spec/lib/appsignal/integrations/unicorn_spec.rb
185
202
  - spec/lib/appsignal/marker_spec.rb
@@ -217,9 +234,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
217
234
  version: 1.9.3
218
235
  required_rubygems_version: !ruby/object:Gem::Requirement
219
236
  requirements:
220
- - - ! '>='
237
+ - - ! '>'
221
238
  - !ruby/object:Gem::Version
222
- version: '0'
239
+ version: 1.3.1
223
240
  requirements: []
224
241
  rubyforge_project:
225
242
  rubygems_version: 2.0.3
@@ -240,6 +257,7 @@ test_files:
240
257
  - spec/lib/appsignal/integrations/capistrano_spec.rb
241
258
  - spec/lib/appsignal/integrations/passenger_spec.rb
242
259
  - spec/lib/appsignal/integrations/rails_spec.rb
260
+ - spec/lib/appsignal/integrations/sidekiq_spec.rb
243
261
  - spec/lib/appsignal/integrations/sinatra_spec.rb
244
262
  - spec/lib/appsignal/integrations/unicorn_spec.rb
245
263
  - spec/lib/appsignal/marker_spec.rb