fanforce-worker 0.5.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 +15 -0
- data/.gitignore +22 -0
- data/Gemfile +2 -0
- data/README.md +4 -0
- data/Rakefile +16 -0
- data/fanforce-worker.gemspec +22 -0
- data/lib/fanforce/worker.rb +6 -0
- data/lib/fanforce/worker/iron.rb +17 -0
- data/lib/fanforce/worker/version.rb +5 -0
- data/lib/fanforce/worker/worker.rb +83 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NGZiNDQyNDQ3MzFmYmI2ZWVhZTExZjc3MDFjNzVmODk0OGQ3MzRlZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTM0NDNkN2I3OGQ5YmQ1Yzg2NmM5MzZkOGIyOWZhMzRhYjhkOGI1Ng==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NzU5NTNkYTYzODViNGJiYTc4NWVmYTkyYmJlN2QyYzdiMjgzYjNiYjA3Y2Vk
|
10
|
+
Y2MyNjQ1ODFmMzQxZGFhYTEzOGEwMmNlMjgxNGFmYjFjMjk5M2Q4ZDVmNWMx
|
11
|
+
N2M5NDA3ODgxNjI2ZWMyNzYxNTM4NDJjMGIwZDk0OWMxZTU4Mzk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MzFjN2RkNDI3YTI0OWQ1ZjY3ZmQ3MWNjMmRjNzcyZTY5ZmI5MmM1ZTQ4NjJm
|
14
|
+
NzZiYWIwODI2OGZkODI1NmY5ZTNmYjM4MWM5NWI5MGYyZWViZTBkZGYwOTM4
|
15
|
+
NGVmN2M2YzgxMzNhMGViNzRkOGM1ZmExOGM4NDhhMzU3NDczNTk=
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
coverage
|
6
|
+
InstalledFiles
|
7
|
+
lib/bundler/man
|
8
|
+
pkg
|
9
|
+
rdoc
|
10
|
+
spec/reports
|
11
|
+
test/tmp
|
12
|
+
test/version_tmp
|
13
|
+
tmp
|
14
|
+
|
15
|
+
# YARD artifacts
|
16
|
+
.yardoc
|
17
|
+
_yardoc
|
18
|
+
doc/
|
19
|
+
.DS_Store
|
20
|
+
.idea/
|
21
|
+
.idea/*
|
22
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'fileutils'
|
4
|
+
include FileUtils
|
5
|
+
|
6
|
+
# Default Rake task is compile
|
7
|
+
#task :default => :compile
|
8
|
+
|
9
|
+
########################################################################
|
10
|
+
|
11
|
+
Rake::TestTask.new do |t|
|
12
|
+
t.libs.push "lib"
|
13
|
+
t.libs.push "test"
|
14
|
+
t.pattern = 'test/**/*_test.rb'
|
15
|
+
t.verbose = false
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'fanforce/worker/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'fanforce-worker'
|
8
|
+
gem.version = Fanforce::Worker::VERSION
|
9
|
+
gem.date = '2012-10-19'
|
10
|
+
gem.summary = %q{Fanforce worker library used by various Fanforce addons.}
|
11
|
+
gem.authors = ['Caleb Clark']
|
12
|
+
gem.email = ['cclark@fanforce.com']
|
13
|
+
gem.homepage = 'http://github.com/fanforce/fanforce-worker'
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
|
+
gem.require_paths = ['lib']
|
18
|
+
|
19
|
+
gem.add_runtime_dependency 'iron_mq', '~> 4'
|
20
|
+
gem.add_runtime_dependency 'typhoeus'
|
21
|
+
gem.add_runtime_dependency 'fanforce-api', '~> 0.9'
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'iron_mq'
|
2
|
+
|
3
|
+
class Fanforce::Worker::Iron
|
4
|
+
|
5
|
+
def initialize(opts={})
|
6
|
+
@mq_client = IronMQ::Client.new(:token => opts[:token] || ENV['IRON_TOKEN'], :project_id => opts[:project_id] || ENV['IRON_PROJECT_ID'])
|
7
|
+
end
|
8
|
+
|
9
|
+
def enqueue(queue_id, payload)
|
10
|
+
@mq_client.queue(queue_id).post(payload.to_json)
|
11
|
+
end
|
12
|
+
|
13
|
+
def client
|
14
|
+
@mq_client
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
class Fanforce::Worker
|
2
|
+
|
3
|
+
def initialize(opts={})
|
4
|
+
@opts = opts
|
5
|
+
end
|
6
|
+
|
7
|
+
def iron
|
8
|
+
require_relative 'iron'
|
9
|
+
@iron ||= Fanforce::Worker::Iron.new(@opts)
|
10
|
+
end
|
11
|
+
|
12
|
+
def enqueue(queue_id, payload)
|
13
|
+
raise 'Payload being sent to the queue must be a Hash' if !payload.is_a?(Hash)
|
14
|
+
iron.enqueue queue_id, params: payload, retries: 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def retry_error(queue_id, msg_id)
|
18
|
+
msg = iron.client.queue(queue_id + '-ERRORS').peek(msg_id)
|
19
|
+
data = MultiJson.load(msg.body, :symbolize_keys => true)
|
20
|
+
iron.enqueue queue_id, params: data[:params], retries: data[:retries] + 1
|
21
|
+
msg.delete
|
22
|
+
end
|
23
|
+
|
24
|
+
##########################################################################################
|
25
|
+
|
26
|
+
def self.add_error(queue_id, payload)
|
27
|
+
self.new.iron.enqueue("#{queue_id}-ERRORS", payload)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.enqueue(queue_id, payload)
|
31
|
+
self.new.enqueue(queue_id, payload)
|
32
|
+
end
|
33
|
+
|
34
|
+
##########################################################################################
|
35
|
+
|
36
|
+
def self.run(worker_data, &code_block)
|
37
|
+
require '.pluginenv'
|
38
|
+
require 'iron_mq'
|
39
|
+
require 'fanforce/api'
|
40
|
+
|
41
|
+
run_validations
|
42
|
+
run_worker IronMQ::Client.new.queue(worker_data['worker_id']).get(timeout: 3600), worker_data, &code_block
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.run_validations
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
def run_worker(msg, worker_data, &code_block)
|
50
|
+
puts '----------------------------------------------------------'
|
51
|
+
print 'PROCESSING MESSAGE: '
|
52
|
+
task_data = Fanforce.decode_json(msg.body)
|
53
|
+
|
54
|
+
set_env_vars(worker_data['env_vars'])
|
55
|
+
code_block.call(task_data[:params].clone, task_data[:retries])
|
56
|
+
msg.delete
|
57
|
+
|
58
|
+
rescue Exception => e
|
59
|
+
if msg.nil?
|
60
|
+
puts 'MESSAGE IS NIL'
|
61
|
+
return
|
62
|
+
end
|
63
|
+
task_data[:last_error] = {
|
64
|
+
exception: e.class.name,
|
65
|
+
message: e.message,
|
66
|
+
backtrace: e.backtrace,
|
67
|
+
raised_at: Time.now
|
68
|
+
}
|
69
|
+
task_data[:last_error][:curl_command] = e.curl_command if e.respond_to?(:curl_command)
|
70
|
+
task_data[:env_vars] = worker_data['env_vars']
|
71
|
+
|
72
|
+
puts "ADDING TO ERROR QUEUE: #{task_data.to_json}"
|
73
|
+
self.add_error worker_data['worker_id'], task_data
|
74
|
+
msg.delete
|
75
|
+
puts 'DELETED MESSAGE'
|
76
|
+
end
|
77
|
+
|
78
|
+
def set_env_vars(vars)
|
79
|
+
vars.each {|k,v| ENV[k.to_s]=v }
|
80
|
+
load 'fanforce/api/ff_globals.rb'
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fanforce-worker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Caleb Clark
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2012-10-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: iron_mq
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: typhoeus
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: fanforce-api
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
- cclark@fanforce.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- fanforce-worker.gemspec
|
67
|
+
- lib/fanforce/worker.rb
|
68
|
+
- lib/fanforce/worker/iron.rb
|
69
|
+
- lib/fanforce/worker/version.rb
|
70
|
+
- lib/fanforce/worker/worker.rb
|
71
|
+
homepage: http://github.com/fanforce/fanforce-worker
|
72
|
+
licenses: []
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.0.3
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Fanforce worker library used by various Fanforce addons.
|
94
|
+
test_files: []
|