tracked_job 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZjVlYzllOGEzM2FiNzNjODljNWMxZTg2YTI5ODFlODQwODA4YjIyNA==
5
+ data.tar.gz: !binary |-
6
+ YTQyMjMzNjJlNTVlY2E0OGU2YzUxYThmMjdhMWVkMTQ4Mjc0YjRmNg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZGY5MjQzNDA0M2RkMDZiN2U5OTAwYmE0ZGEwNjAyZjdhNTA5NDc2ZjI1OGZk
10
+ YmQ5YWQwMDA2M2NmYWZkZGNiMGQwMmVlOGVjOGUyODc2M2I3MGU4M2ZkMjEx
11
+ ODZkYWM1MDcxN2U0ZGMwYWJhNjcwNTk2NGNkNmUyMTIwMWYwYjQ=
12
+ data.tar.gz: !binary |-
13
+ YzQwYzE1OTc0YjhiYzg1MTM1ODRkMWQ1YzkyNjVkNjAzNDFkODkzMjExMzU1
14
+ YzgwM2MwZTg0ZmE1ODU4NWQxMWRkYzZhMjkyZTE5NWNmNzI0ODIzY2MzYjgz
15
+ YmNmYjhlZDRjZGUwNWY0MTUxYzIyNDZkYTM4NDJiOTdlYTE5ZDM=
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Tracked'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
@@ -0,0 +1,4 @@
1
+ module Tracked
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Tracked
2
+ module ApplicationHelper
3
+ end
4
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ TrackedJob::Engine.routes.draw do
2
+ end
@@ -0,0 +1,15 @@
1
+ class CreateTrackedJob < ActiveRecord::Migration
2
+ def change
3
+ create_table :tracked_jobs do |t|
4
+ t.string :uuid, limit: 36, null: false
5
+ t.references :job, null: false
6
+ t.boolean :success
7
+ t.text :result
8
+ t.datetime :started_at
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :tracked_jobs, :uuid, unique: true
13
+ add_index :tracked_jobs, :job_id, unique: true
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ module Tracked
2
+ module DelayedJob
3
+ class Plugin < Delayed::Plugin
4
+ module Perform
5
+ def perform
6
+ @tracked_job.start!
7
+ begin
8
+ result = super
9
+ rescue Exception => exception
10
+ @tracked_job.fail!(exception.message)
11
+ raise
12
+ end
13
+ @tracked_job.succeed!(result)
14
+ return result
15
+ end
16
+ end
17
+
18
+ callbacks do |lifecycle|
19
+ lifecycle.before(:invoke_job) do |job|
20
+ tracked_job = Tracked::Job.find_by(job_id: job.id)
21
+ if tracked_job.present?
22
+ payload = job.payload_object
23
+ payload.instance_variable_set(:@tracked_job, tracked_job)
24
+ payload.extend Perform
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ module Delayed
2
+ class TrackedDelayProxy < Delayed::DelayProxy
3
+ def method_missing(method, *args)
4
+ job = super
5
+ tracked_job = ::Tracked::Job.generate(job.id)
6
+ tracked_job
7
+ end
8
+ end
9
+
10
+ module MessageSending
11
+ def tracked_delay(options = {})
12
+ TrackedDelayProxy.new(PerformableMethod, self, options)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ module Tracked
2
+ class Job < ActiveRecord::Base
3
+ self.table_name = "tracked_jobs"
4
+
5
+ serialize :result
6
+
7
+ def self.generate(job_id)
8
+ uuid = SecureRandom.uuid
9
+ self.create!(job_id: job_id, uuid: uuid)
10
+ end
11
+
12
+ def start!
13
+ self.update_attributes!(started_at: Time.now)
14
+ end
15
+
16
+ def succeed!(result)
17
+ self.update_attributes!(success: true, result: result)
18
+ end
19
+
20
+ def fail!(result)
21
+ self.update_attributes!(success: false, result: result)
22
+ end
23
+
24
+ def status
25
+ return :created if started_at.nil?
26
+ return :started if success.nil?
27
+ return :success if success
28
+ :failed
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ module TrackedJob
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace TrackedJob
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module TrackedJob
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,10 @@
1
+ require 'tracked_job/engine'
2
+ require 'tracked/job'
3
+
4
+ if defined?(Delayed)
5
+ require 'tracked/delayed_job/plugin'
6
+ require 'tracked/delayed_job/tracked_delay_proxy'
7
+ end
8
+
9
+ module TrackedJob
10
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tracked_job
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ludvig Dickman
8
+ - Jenny Olsson
9
+ - Avidity
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2014-02-03 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 4.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: 4.0.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: delayed_job
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '='
34
+ - !ruby/object:Gem::Version
35
+ version: 4.0.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '='
41
+ - !ruby/object:Gem::Version
42
+ version: 4.0.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: delayed_job_active_record
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '='
48
+ - !ruby/object:Gem::Version
49
+ version: 4.0.0
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '='
55
+ - !ruby/object:Gem::Version
56
+ version: 4.0.0
57
+ - !ruby/object:Gem::Dependency
58
+ name: sqlite3
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec-rails
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ description: Adds the ability to track backgrounds jobs. Currently only for delayed_job.
86
+ email:
87
+ - code@avidity.se
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - Rakefile
93
+ - app/controllers/tracked/application_controller.rb
94
+ - app/helpers/tracked/application_helper.rb
95
+ - config/routes.rb
96
+ - db/migrate/20140128084338_create_tracked_job.rb
97
+ - lib/tracked/delayed_job/plugin.rb
98
+ - lib/tracked/delayed_job/tracked_delay_proxy.rb
99
+ - lib/tracked/job.rb
100
+ - lib/tracked_job.rb
101
+ - lib/tracked_job/engine.rb
102
+ - lib/tracked_job/version.rb
103
+ homepage: http://github.com/avidity/tracked_job
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.2.1
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Track background jobs
127
+ test_files: []