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 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
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ fanforce-worker
2
+ ==
3
+
4
+ Fanforce worker library used by addons to connect with iron_mg and iron_worker_ng
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,6 @@
1
+ class Fanforce
2
+ require_relative 'worker/version'
3
+ require_relative 'worker/workers'
4
+ require_relative 'worker/worker'
5
+ end
6
+
@@ -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,5 @@
1
+ class Fanforce
2
+ class Worker
3
+ VERSION = '0.5.0'
4
+ end
5
+ 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: []