delayed_job_azure 0.1.0
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 +7 -0
- data/.document +5 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +94 -0
- data/LICENSE.txt +23 -0
- data/README.md +66 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/delayed_job_azure.gemspec +73 -0
- data/lib/delayed/backend/actions.rb +82 -0
- data/lib/delayed/backend/azure.rb +135 -0
- data/lib/delayed/backend/azure_config.rb +5 -0
- data/lib/delayed/backend/version.rb +11 -0
- data/lib/delayed/backend/worker.rb +37 -0
- data/lib/delayed/serialization/azure.rb +6 -0
- data/lib/delayed_job_azure.rb +12 -0
- data/spec/.gitkeep +0 -0
- metadata +160 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f4a34c5b84f14bcbb6f4dcb3720c1887a59c1f66
|
4
|
+
data.tar.gz: 270064849ec4815b9429e5f39d0a24ff601c364a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 16f019eec488e97f077c72a00fc4358a8ecdfc58572a349785be5edb2558a3099f77a110b87e21137a730840ad3b5c62cf9845af5ca51c98d550c0beaae071d8
|
7
|
+
data.tar.gz: 3fa750b4d0f8c5a197848ed5679eb11e959b6eb73cc7a25d87b60419173e7cb034671719450f41f00559b276dd652d106c0333c300ce4f4edab53333ab20dbab
|
data/.document
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (3.2.18)
|
5
|
+
i18n (~> 0.6, >= 0.6.4)
|
6
|
+
multi_json (~> 1.0)
|
7
|
+
addressable (2.3.6)
|
8
|
+
azure (0.6.4)
|
9
|
+
json (~> 1.8)
|
10
|
+
mime-types (~> 1.0)
|
11
|
+
nokogiri (~> 1.5)
|
12
|
+
systemu (~> 2.6)
|
13
|
+
uuid (~> 2.0)
|
14
|
+
builder (3.2.2)
|
15
|
+
delayed_job (3.0.5)
|
16
|
+
activesupport (~> 3.0)
|
17
|
+
descendants_tracker (0.0.4)
|
18
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
19
|
+
diff-lcs (1.2.5)
|
20
|
+
docile (1.1.3)
|
21
|
+
faraday (0.9.0)
|
22
|
+
multipart-post (>= 1.2, < 3)
|
23
|
+
git (1.2.6)
|
24
|
+
github_api (0.11.3)
|
25
|
+
addressable (~> 2.3)
|
26
|
+
descendants_tracker (~> 0.0.1)
|
27
|
+
faraday (~> 0.8, < 0.10)
|
28
|
+
hashie (>= 1.2)
|
29
|
+
multi_json (>= 1.7.5, < 2.0)
|
30
|
+
nokogiri (~> 1.6.0)
|
31
|
+
oauth2
|
32
|
+
hashie (2.1.1)
|
33
|
+
highline (1.6.21)
|
34
|
+
i18n (0.6.9)
|
35
|
+
jeweler (2.0.1)
|
36
|
+
builder
|
37
|
+
bundler (>= 1.0)
|
38
|
+
git (>= 1.2.5)
|
39
|
+
github_api
|
40
|
+
highline (>= 1.6.15)
|
41
|
+
nokogiri (>= 1.5.10)
|
42
|
+
rake
|
43
|
+
rdoc
|
44
|
+
json (1.8.1)
|
45
|
+
jwt (0.1.13)
|
46
|
+
multi_json (>= 1.5)
|
47
|
+
macaddr (1.7.1)
|
48
|
+
systemu (~> 2.6.2)
|
49
|
+
mime-types (1.25.1)
|
50
|
+
mini_portile (0.6.0)
|
51
|
+
multi_json (1.10.0)
|
52
|
+
multi_xml (0.5.5)
|
53
|
+
multipart-post (2.0.0)
|
54
|
+
nokogiri (1.6.2.1)
|
55
|
+
mini_portile (= 0.6.0)
|
56
|
+
oauth2 (0.9.3)
|
57
|
+
faraday (>= 0.8, < 0.10)
|
58
|
+
jwt (~> 0.1.8)
|
59
|
+
multi_json (~> 1.3)
|
60
|
+
multi_xml (~> 0.5)
|
61
|
+
rack (~> 1.2)
|
62
|
+
rack (1.5.2)
|
63
|
+
rake (10.3.2)
|
64
|
+
rdoc (3.12.2)
|
65
|
+
json (~> 1.4)
|
66
|
+
rspec (2.14.1)
|
67
|
+
rspec-core (~> 2.14.0)
|
68
|
+
rspec-expectations (~> 2.14.0)
|
69
|
+
rspec-mocks (~> 2.14.0)
|
70
|
+
rspec-core (2.14.8)
|
71
|
+
rspec-expectations (2.14.5)
|
72
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
73
|
+
rspec-mocks (2.14.6)
|
74
|
+
simplecov (0.8.2)
|
75
|
+
docile (~> 1.1.0)
|
76
|
+
multi_json
|
77
|
+
simplecov-html (~> 0.8.0)
|
78
|
+
simplecov-html (0.8.0)
|
79
|
+
systemu (2.6.4)
|
80
|
+
thread_safe (0.3.3)
|
81
|
+
uuid (2.3.7)
|
82
|
+
macaddr (~> 1.0)
|
83
|
+
|
84
|
+
PLATFORMS
|
85
|
+
ruby
|
86
|
+
|
87
|
+
DEPENDENCIES
|
88
|
+
azure (~> 0.6)
|
89
|
+
bundler (~> 1.0)
|
90
|
+
delayed_job (~> 3.0.0)
|
91
|
+
jeweler (~> 2.0.1)
|
92
|
+
rdoc (~> 3.12)
|
93
|
+
rspec (>= 2.0)
|
94
|
+
simplecov
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Copyright (c) 2014, Supportify.io
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice, this
|
8
|
+
list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
12
|
+
and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
15
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
16
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
17
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
18
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
19
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
20
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
21
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
22
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
23
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
This is [Azure Queues](http://azure.microsoft.com/en-us/services/storage/) backend for [delayed_job](http://github.com/collectiveidea/delayed_job)
|
2
|
+
|
3
|
+
# Getting Started
|
4
|
+
|
5
|
+
## Get credentials
|
6
|
+
|
7
|
+
|
8
|
+
To start using delayed_job_azure, will need to have your storage account setup as mentioned [here](http://azure.microsoft.com/en-us/documentation/articles/storage-ruby-how-to-use-queue-storage/#CreateAccount).
|
9
|
+
|
10
|
+
Once your account is setup, you will need to configure your access using one of the methods mentioned on https://github.com/Azure/azure-sdk-for-ruby/.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add the gems to your `Gemfile:`
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'azure'
|
18
|
+
gem 'delayed_job'
|
19
|
+
gem 'delayed_job_azure'
|
20
|
+
```
|
21
|
+
|
22
|
+
Optionally: Add an initializer (`config/initializers/delayed_job.rb`):
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
Delayed::Worker.configure do |config|
|
26
|
+
# optional params:
|
27
|
+
config.available_priorities = [-1,0,1,2] # Default is [0]. Please note, adding new priorities will slow down picking the next job from queue. Also note that these priorities must include all priorities of your Delayed Jobs.
|
28
|
+
config.queue_name = 'default' # Specify an alternative queue name
|
29
|
+
config.delay = 0 # Time to wait before message will be available on the queue
|
30
|
+
config.timeout = 5.minutes # The time in seconds to wait after message is taken off the queue, before it is put back on. Delete before :timeout to ensure it does not go back on the queue.
|
31
|
+
config.expires_in = 7.days # After this time, message will be automatically removed from the queue.
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
## Usage
|
36
|
+
|
37
|
+
That's it. Use [delayed_job as normal](http://github.com/collectiveidea/delayed_job).
|
38
|
+
|
39
|
+
Example:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
class User
|
43
|
+
def background_stuff
|
44
|
+
puts "I run in the background"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
Then in one of your controllers:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
user = User.new
|
53
|
+
user.delay.background_stuff
|
54
|
+
```
|
55
|
+
|
56
|
+
## Start worker process
|
57
|
+
|
58
|
+
rake jobs:work
|
59
|
+
|
60
|
+
That will start pulling jobs off the queue and processing them.
|
61
|
+
|
62
|
+
# Documentation
|
63
|
+
|
64
|
+
You can find more documentation here:
|
65
|
+
|
66
|
+
* http://azure.microsoft.com/en-us/develop/ruby/
|
data/Rakefile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
17
|
+
gem.name = "delayed_job_azure"
|
18
|
+
gem.homepage = "http://github.com/supportify/delayed_job_azure"
|
19
|
+
gem.license = "BSD"
|
20
|
+
gem.summary = %Q{Azure Queue backend for delayed_job}
|
21
|
+
gem.description = %Q{Azure Queue backend for delayed_job}
|
22
|
+
gem.email = "help@supportify.io"
|
23
|
+
gem.authors = ["Jordan Yaker", "Supportify, Inc."]
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rspec/core/rake_task'
|
29
|
+
RSpec::Core::RakeTask.new(:spec)
|
30
|
+
|
31
|
+
desc "Code coverage detail"
|
32
|
+
task :simplecov do
|
33
|
+
ENV['COVERAGE'] = "true"
|
34
|
+
Rake::Task['spec'].execute
|
35
|
+
end
|
36
|
+
|
37
|
+
task :default => :spec
|
38
|
+
|
39
|
+
require 'rdoc/task'
|
40
|
+
Rake::RDocTask.new do |rdoc|
|
41
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
42
|
+
|
43
|
+
rdoc.rdoc_dir = 'rdoc'
|
44
|
+
rdoc.title = "delayed_job_azure #{version}"
|
45
|
+
rdoc.rdoc_files.include('README*')
|
46
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
47
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "delayed_job_azure"
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jordan Yaker", "Supportify, Inc."]
|
12
|
+
s.date = "2014-05-17"
|
13
|
+
s.description = "Azure Queue backend for delayed_job"
|
14
|
+
s.email = "help@supportify.io"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"README.md",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"delayed_job_azure.gemspec",
|
28
|
+
"lib/delayed/backend/actions.rb",
|
29
|
+
"lib/delayed/backend/azure.rb",
|
30
|
+
"lib/delayed/backend/azure_config.rb",
|
31
|
+
"lib/delayed/backend/version.rb",
|
32
|
+
"lib/delayed/backend/worker.rb",
|
33
|
+
"lib/delayed/serialization/azure.rb",
|
34
|
+
"lib/delayed_job_azure.rb",
|
35
|
+
"spec/.gitkeep"
|
36
|
+
]
|
37
|
+
s.homepage = "http://github.com/supportify/delayed_job_azure"
|
38
|
+
s.licenses = ["BSD"]
|
39
|
+
s.require_paths = ["lib"]
|
40
|
+
s.rubygems_version = "2.0.6"
|
41
|
+
s.summary = "Azure Queue backend for delayed_job"
|
42
|
+
|
43
|
+
if s.respond_to? :specification_version then
|
44
|
+
s.specification_version = 4
|
45
|
+
|
46
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_runtime_dependency(%q<azure>, ["~> 0.6"])
|
48
|
+
s.add_runtime_dependency(%q<delayed_job>, ["~> 3.0.0"])
|
49
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
50
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
51
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
|
52
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
53
|
+
s.add_development_dependency(%q<rspec>, [">= 2.0"])
|
54
|
+
else
|
55
|
+
s.add_dependency(%q<azure>, ["~> 0.6"])
|
56
|
+
s.add_dependency(%q<delayed_job>, ["~> 3.0.0"])
|
57
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
58
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
59
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
60
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
61
|
+
s.add_dependency(%q<rspec>, [">= 2.0"])
|
62
|
+
end
|
63
|
+
else
|
64
|
+
s.add_dependency(%q<azure>, ["~> 0.6"])
|
65
|
+
s.add_dependency(%q<delayed_job>, ["~> 3.0.0"])
|
66
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
67
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
68
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
69
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
70
|
+
s.add_dependency(%q<rspec>, [">= 2.0"])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Delayed
|
2
|
+
module Backend
|
3
|
+
module Azure
|
4
|
+
module Actions
|
5
|
+
def field(name, options = {})
|
6
|
+
#type = options[:type] || String
|
7
|
+
default = options[:default] || nil
|
8
|
+
define_method name do
|
9
|
+
@attributes ||= {}
|
10
|
+
@attributes[name.to_sym] || default
|
11
|
+
end
|
12
|
+
define_method "#{name}=" do |value|
|
13
|
+
@attributes ||= {}
|
14
|
+
@attributes[name.to_sym] = value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def before_fork
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_fork
|
22
|
+
end
|
23
|
+
|
24
|
+
def db_time_now
|
25
|
+
Time.now.utc
|
26
|
+
end
|
27
|
+
|
28
|
+
#def self.queue_name
|
29
|
+
# Delayed::Worker.queue_name
|
30
|
+
#end
|
31
|
+
|
32
|
+
def find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
|
33
|
+
Delayed::Worker.available_priorities.each do |priority|
|
34
|
+
unless queues.include? queue_name
|
35
|
+
azure.create_queue queue_name
|
36
|
+
queues << queue_name
|
37
|
+
end
|
38
|
+
|
39
|
+
message = azure.list_messages queue_name(priority), 0
|
40
|
+
return [Delayed::Backend::Azure::Job.new(message)] if message
|
41
|
+
end
|
42
|
+
[]
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete_all
|
46
|
+
deleted = 0
|
47
|
+
Delayed::Worker.available_priorities.each do |priority|
|
48
|
+
loop do
|
49
|
+
msgs = azure.list_messages queue_name(priority), 0,
|
50
|
+
number_of_messages: 1000
|
51
|
+
|
52
|
+
break if msgs.blank?
|
53
|
+
msgs.each do |msg|
|
54
|
+
azure.delete_message queue_name(priority), msg.id, msg.pop_receipt
|
55
|
+
deleted += 1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# No need to check locks
|
62
|
+
def clear_locks!(*args)
|
63
|
+
true
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def azure
|
69
|
+
::Delayed::Worker.azure
|
70
|
+
end
|
71
|
+
|
72
|
+
def queues
|
73
|
+
::Delayed::Worker.queues
|
74
|
+
end
|
75
|
+
|
76
|
+
def queue_name(priority)
|
77
|
+
"#{Delayed::Worker.queue_name}_#{priority || 0}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
|
2
|
+
module Delayed
|
3
|
+
module Backend
|
4
|
+
module Azure
|
5
|
+
class Job
|
6
|
+
include ::DelayedJobAzure::Document
|
7
|
+
include Delayed::Backend::Base
|
8
|
+
extend Delayed::Backend::Azure::Actions
|
9
|
+
|
10
|
+
field :priority, :type => Integer, :default => 0
|
11
|
+
field :attempts, :type => Integer, :default => 0
|
12
|
+
field :handler, :type => String
|
13
|
+
field :run_at, :type => Time
|
14
|
+
field :locked_at, :type => Time
|
15
|
+
field :locked_by, :type => String
|
16
|
+
field :failed_at, :type => Time
|
17
|
+
field :last_error, :type => String
|
18
|
+
field :queue, :type => String
|
19
|
+
|
20
|
+
def initialize(data = {})
|
21
|
+
@msg = nil
|
22
|
+
if data.is_a?(::Azure::Queue::Message)
|
23
|
+
@msg = data
|
24
|
+
data = JSON.load(data.message_text)
|
25
|
+
end
|
26
|
+
|
27
|
+
data.symbolize_keys!
|
28
|
+
payload_obj = data.delete(:payload_object) || data.delete(:handler)
|
29
|
+
|
30
|
+
@queue_name = data[:queue_name] || Delayed::Worker.queue_name
|
31
|
+
@delay = data[:delay] || Delayed::Worker.delay
|
32
|
+
@timeout = data[:timeout] || Delayed::Worker.timeout
|
33
|
+
@expires_in = data[:expires_in] || Delayed::Worker.expires_in
|
34
|
+
@attributes = data
|
35
|
+
self.payload_object = payload_obj
|
36
|
+
end
|
37
|
+
|
38
|
+
def payload_object
|
39
|
+
@payload_object ||= YAML.load(self.handler)
|
40
|
+
rescue TypeError, LoadError, NameError, ArgumentError => e
|
41
|
+
raise DeserializationError,
|
42
|
+
"Job failed to load: #{e.message}. Handler: #{handler.inspect}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def payload_object=(object)
|
46
|
+
if object.is_a? String
|
47
|
+
@payload_object = YAML.load(object)
|
48
|
+
self.handler = object
|
49
|
+
else
|
50
|
+
@payload_object = object
|
51
|
+
self.handler = object.to_yaml
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def save
|
56
|
+
if @attributes[:handler].blank?
|
57
|
+
raise "Handler missing!"
|
58
|
+
end
|
59
|
+
payload = JSON.dump(@attributes)
|
60
|
+
|
61
|
+
destroy if @msg
|
62
|
+
|
63
|
+
unless queues.include? queue_name
|
64
|
+
azure.create_queue queue_name
|
65
|
+
queues << queue_name
|
66
|
+
end
|
67
|
+
|
68
|
+
azure.create_message queue_name, payload,
|
69
|
+
timeout: @timeout,
|
70
|
+
visibility_timeout: @delay,
|
71
|
+
message_ttl: @expires_in
|
72
|
+
true
|
73
|
+
end
|
74
|
+
|
75
|
+
def save!
|
76
|
+
save
|
77
|
+
end
|
78
|
+
|
79
|
+
def destroy
|
80
|
+
if id and pop_receipt
|
81
|
+
aure.delete_message(queue_name, id, pop_receipt)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def fail!
|
86
|
+
destroy
|
87
|
+
# v2: move to separate queue
|
88
|
+
end
|
89
|
+
|
90
|
+
def update_attributes(attributes)
|
91
|
+
attributes.symbolize_keys!
|
92
|
+
@attributes.merge attributes
|
93
|
+
save
|
94
|
+
end
|
95
|
+
|
96
|
+
# No need to check locks
|
97
|
+
def lock_exclusively!(*args)
|
98
|
+
true
|
99
|
+
end
|
100
|
+
|
101
|
+
# No need to check locks
|
102
|
+
def unlock(*args)
|
103
|
+
true
|
104
|
+
end
|
105
|
+
|
106
|
+
def reload(*args)
|
107
|
+
# reset
|
108
|
+
super
|
109
|
+
end
|
110
|
+
|
111
|
+
def id
|
112
|
+
@msg.id if @msg
|
113
|
+
end
|
114
|
+
|
115
|
+
def pop_receipt
|
116
|
+
@msg.pop_receipt if @msg
|
117
|
+
end
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
def queue_name
|
122
|
+
"#{@queue_name}_#{@attributes[:priority] || 0}"
|
123
|
+
end
|
124
|
+
|
125
|
+
def azure
|
126
|
+
::Delayed::Worker.azure
|
127
|
+
end
|
128
|
+
|
129
|
+
def queues
|
130
|
+
::Delayed::Worker.queues
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'azure_config'
|
2
|
+
|
3
|
+
module Delayed
|
4
|
+
class Worker
|
5
|
+
class << self
|
6
|
+
attr_accessor :config, :azure, :queues
|
7
|
+
:queue_name, :delay, :timeout, :expires_in, :available_priorities
|
8
|
+
|
9
|
+
def configure
|
10
|
+
yield(config)
|
11
|
+
self.queue_name = config.queue_name || 'default'
|
12
|
+
self.delay = config.delay || 0
|
13
|
+
self.timeout = config.timeout || 5.minutes
|
14
|
+
self.expires_in = config.expires_in || 7.days
|
15
|
+
|
16
|
+
priorities = config.available_priorities || [0]
|
17
|
+
if priorities.include?(0) && priorities.all? { |p| p.is_a?(Integer) }
|
18
|
+
self.available_priorities = priorities.sort
|
19
|
+
else
|
20
|
+
raise ArgumentError, "available_priorities option has wrong format. Please provide array of Integer values, includes zero. Default is [0]."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def config
|
25
|
+
@config ||= AzureConfig.new
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Delayed::Worker.azure = Azure::QueueService.new
|
33
|
+
Delayed::Worker.queues = Delayed::Worker.azure.list_queues
|
34
|
+
Delayed::Worker.queues.map! { |q| q.name }
|
35
|
+
|
36
|
+
# initialize with defaults
|
37
|
+
Delayed::Worker.configure {}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'azure'
|
3
|
+
require 'delayed_job'
|
4
|
+
|
5
|
+
require_relative 'delayed/serialization/azure'
|
6
|
+
require_relative 'delayed/backend/actions'
|
7
|
+
require_relative 'delayed/backend/azure_config'
|
8
|
+
require_relative 'delayed/backend/worker'
|
9
|
+
require_relative 'delayed/backend/version'
|
10
|
+
require_relative 'delayed/backend/azure'
|
11
|
+
|
12
|
+
Delayed::Worker.backend = :azure
|
data/spec/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: delayed_job_azure
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jordan Yaker
|
8
|
+
- Supportify, Inc.
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-05-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: azure
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0.6'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0.6'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: delayed_job
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.0.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 3.0.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rdoc
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '3.12'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '3.12'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bundler
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: jeweler
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.0.1
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.0.1
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: simplecov
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '2.0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '2.0'
|
112
|
+
description: Azure Queue backend for delayed_job
|
113
|
+
email: help@supportify.io
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files:
|
117
|
+
- LICENSE.txt
|
118
|
+
- README.md
|
119
|
+
files:
|
120
|
+
- .document
|
121
|
+
- Gemfile
|
122
|
+
- Gemfile.lock
|
123
|
+
- LICENSE.txt
|
124
|
+
- README.md
|
125
|
+
- Rakefile
|
126
|
+
- VERSION
|
127
|
+
- delayed_job_azure.gemspec
|
128
|
+
- lib/delayed/backend/actions.rb
|
129
|
+
- lib/delayed/backend/azure.rb
|
130
|
+
- lib/delayed/backend/azure_config.rb
|
131
|
+
- lib/delayed/backend/version.rb
|
132
|
+
- lib/delayed/backend/worker.rb
|
133
|
+
- lib/delayed/serialization/azure.rb
|
134
|
+
- lib/delayed_job_azure.rb
|
135
|
+
- spec/.gitkeep
|
136
|
+
homepage: http://github.com/supportify/delayed_job_azure
|
137
|
+
licenses:
|
138
|
+
- BSD
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 2.0.6
|
157
|
+
signing_key:
|
158
|
+
specification_version: 4
|
159
|
+
summary: Azure Queue backend for delayed_job
|
160
|
+
test_files: []
|