refried 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/refried/configuration.rb +31 -0
- data/lib/refried/puter.rb +132 -0
- data/lib/refried/tubes.rb +14 -0
- data/lib/refried.rb +33 -3
- metadata +40 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5614a3de2476ba8b564bb1cce35e2580d5be4af8
|
4
|
+
data.tar.gz: 2a6a85e530fcc4f15176d820cbbb8f74da616b5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb38fe056924ad13c94d28418c2c5992509273f096dcb9e50a610ffc2d3f15d39e86128fec96eb0e1afe6d800c247d97884d16bf2bb6b79f91657cdb80ced3e9
|
7
|
+
data.tar.gz: 013058133907e862d01f91f16d24289839974b4f287df202af1c37c091fb4969a3adf639c0fbefeb978377dd8186052d21959d25d2edda145da005801c1beb10
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Refried
|
2
|
+
# The Refried Configuration class
|
3
|
+
# based in general on the configuration approach in https://github.com/nesquena/backburner MIT license
|
4
|
+
class Configuration
|
5
|
+
PRIORITY_LABELS = { :high => 0, :medium => 100, :low => 200 }
|
6
|
+
|
7
|
+
attr_accessor :beanstalk_url # beanstalk url connection
|
8
|
+
attr_accessor :tube_namespace # namespace prefix for every queue
|
9
|
+
attr_accessor :default_priority # default job priority
|
10
|
+
attr_accessor :respond_timeout # default job timeout
|
11
|
+
attr_accessor :on_error # error handler
|
12
|
+
attr_accessor :max_job_retries # max job retries
|
13
|
+
attr_accessor :retry_delay # retry delay in seconds
|
14
|
+
attr_accessor :logger # logger
|
15
|
+
attr_accessor :priority_labels # priority labels
|
16
|
+
attr_accessor :reserve_timeout # duration to wait to reserve on a single server
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@beanstalk_url = "beanstalk://localhost"
|
20
|
+
@tube_namespace = "refried.queue"
|
21
|
+
@default_priority = 65536
|
22
|
+
@respond_timeout = 120
|
23
|
+
@on_error = nil
|
24
|
+
@max_job_retries = 0
|
25
|
+
@retry_delay = 5
|
26
|
+
@logger = nil
|
27
|
+
@priority_labels = PRIORITY_LABELS
|
28
|
+
@reserve_timeout = nil
|
29
|
+
end
|
30
|
+
end # Configuration
|
31
|
+
end # Refried
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'beaneater'
|
2
|
+
|
3
|
+
module Refried
|
4
|
+
module Puter
|
5
|
+
module ActsAsPuter
|
6
|
+
def acts_as_puter
|
7
|
+
send :include, InstanceMethods
|
8
|
+
send :extend, ClassMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
SUPPORTED_MODES = [:simple, :type_map, :alias_map]
|
14
|
+
|
15
|
+
# Set the mode of function that the Puter should follow
|
16
|
+
#
|
17
|
+
# @param mode [Symbol] which mapping mode the puter uses, `:simple`, `:type_map` or `:alias_map`
|
18
|
+
def puter_mode=(mode)
|
19
|
+
unless SUPPORTED_MODES.include? mode
|
20
|
+
raise ArgumentError, "Unsupported mode for acts as puter."
|
21
|
+
end
|
22
|
+
@puter_mode = mode
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get the current mapping mode of the Puter
|
26
|
+
#
|
27
|
+
# @return [Symbol] the current mapping mode of the Puter
|
28
|
+
def puter_mode
|
29
|
+
@puter_mode ||= :simple
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module InstanceMethods
|
34
|
+
|
35
|
+
def puter_tube_alias_map
|
36
|
+
@puter_tube_alias_map ||= Hash.new
|
37
|
+
end
|
38
|
+
alias_method :alias_map, :puter_tube_alias_map
|
39
|
+
|
40
|
+
def puter_tube_alias_map=(alias_map)
|
41
|
+
@puter_tube_alias_map = alias_map
|
42
|
+
end
|
43
|
+
|
44
|
+
# I want to support a number of types of mappings
|
45
|
+
# 1. in the simple case the tube name should be associated with the Puter's class
|
46
|
+
# 2. a map of item types to tube names
|
47
|
+
# 3. a map of tube aliases to tube names (this corresponds to how ESIndexer & funding override workers will use the gem)
|
48
|
+
def put (item, tube_alias = nil)
|
49
|
+
self.attempt_to_log "Puter#put message received. #{item} and tube_alias #{tube_alias}"
|
50
|
+
puts tube_alias
|
51
|
+
tube = self.tube(alias: tube_alias)
|
52
|
+
payload = self.generate_message item
|
53
|
+
r = tube.put payload
|
54
|
+
self.attempt_to_log "Puter#put message queued containing #{item}, result = #{r}"
|
55
|
+
r
|
56
|
+
end
|
57
|
+
|
58
|
+
# Get the Beaneater Tube object for the current class, the item, and the alias
|
59
|
+
|
60
|
+
# If the puter mode is :type_map the :type key should contain the class of the item being put as a symbol, which should be a key in the puter_tube_type_map
|
61
|
+
# If the puter mode is :alias_map the value for the :alias key is the tube_alias,
|
62
|
+
# the tube_alias is used as the key in the puter_tube_alias_map whose value is the tube's name
|
63
|
+
|
64
|
+
def tube (selectors = {})
|
65
|
+
unless self.locatable? selectors
|
66
|
+
raise ArgumentError, 'Selectors to #tube were unexpected for current puter_mode'
|
67
|
+
end
|
68
|
+
case self.class.puter_mode
|
69
|
+
when :simple
|
70
|
+
tube_name = self.class.to_s.downcase
|
71
|
+
when :alias_map
|
72
|
+
tube_alias = selectors[:alias]
|
73
|
+
tube_name = self.alias_map[tube_alias]
|
74
|
+
else
|
75
|
+
raise ArgumentError, 'Invalid puter mode detected in the #tube method.'
|
76
|
+
end
|
77
|
+
tube_name ||= nil
|
78
|
+
tube ||= Refried.tubes.find tube_name
|
79
|
+
end
|
80
|
+
|
81
|
+
# This method converts the payload object into a format for injection
|
82
|
+
# into the queue
|
83
|
+
#
|
84
|
+
# @param payload the object that should be converted into a message (it must respond to the to_json method)
|
85
|
+
# @return [String] the appropriately serialized representation of the payload
|
86
|
+
def generate_message(payload)
|
87
|
+
if payload.is_a? Fixnum
|
88
|
+
payload.to_json
|
89
|
+
else
|
90
|
+
if payload.nil?
|
91
|
+
nil
|
92
|
+
elsif payload.respond_to?(:empty?) && payload.empty?
|
93
|
+
nil
|
94
|
+
elsif payload.respond_to? :to_edible
|
95
|
+
payload.to_edible
|
96
|
+
else
|
97
|
+
# Not sure that this is the appropriate implementation, perhaps to_s is better
|
98
|
+
payload.to_json
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
protected
|
104
|
+
def locatable? (selectors = {})
|
105
|
+
case self.class.puter_mode
|
106
|
+
when :simple
|
107
|
+
selectors.nil? || selectors.is_a?(Hash) && selectors.count == 0
|
108
|
+
when :alias_map
|
109
|
+
if selectors.is_a? Hash
|
110
|
+
l = selectors.has_key?(:alias) && selectors[:alias].is_a?(Symbol) && self.alias_map.has_key?(selectors[:alias])
|
111
|
+
end
|
112
|
+
l ||= false
|
113
|
+
else
|
114
|
+
false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def attempt_to_log (message)
|
119
|
+
begin
|
120
|
+
logger.info message
|
121
|
+
rescue => e
|
122
|
+
puts "Failed to access logger, message that should have been logged = #{message}"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.included(base)
|
128
|
+
base.extend(ActsAsPuter)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
Object.instance_eval { include Puter }
|
132
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Refried
|
2
|
+
class Tubes
|
3
|
+
# TODO: connect to configuration
|
4
|
+
def initialize
|
5
|
+
@pool ||= Beaneater::Pool.new(['localhost:11300 '])
|
6
|
+
@tubes = @pool.tubes
|
7
|
+
end
|
8
|
+
|
9
|
+
def find(canonical_tube_name)
|
10
|
+
@tubes.find canonical_tube_name
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/lib/refried.rb
CHANGED
@@ -1,5 +1,35 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require 'beaneater'
|
2
|
+
require 'refried/configuration'
|
3
|
+
require 'refried/tubes'
|
4
|
+
require 'refried/puter'
|
5
|
+
|
6
|
+
# Refried core API methods
|
7
|
+
# based in part on the design of backburner (https://github.com/nesquena/backburner MIT license)
|
8
|
+
module Refried
|
9
|
+
class << self
|
10
|
+
|
11
|
+
# Allows the user to set configuration options
|
12
|
+
# by yielding the configuration block
|
13
|
+
#
|
14
|
+
# @param block [Block]
|
15
|
+
# @return [Configuration] the current configuration object
|
16
|
+
def configure(&block)
|
17
|
+
yield(configuration)
|
18
|
+
configuration
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns the singleton class's configuration object
|
22
|
+
#
|
23
|
+
# @return [Configuration] the current configuration object
|
24
|
+
def configuration
|
25
|
+
@configuration ||= Configuration.new
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns the Beaneater::Tubes object, which is the collection of all the Beaneater Tube objects
|
29
|
+
#
|
30
|
+
# @return [Beaneater::Tubes] the collection of Beaneater Tubes
|
31
|
+
def tubes
|
32
|
+
@tubes ||= Tubes.new
|
33
|
+
end
|
4
34
|
end
|
5
35
|
end
|
metadata
CHANGED
@@ -1,15 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refried
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- caldwecr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
-
dependencies:
|
11
|
+
date: 2014-11-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: beaneater
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.3'
|
20
|
+
- - '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.3.3
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.3'
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.3.3
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: simplecov
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.9'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.9'
|
13
47
|
description: An enhancement
|
14
48
|
email: caldwecr@gmail.com
|
15
49
|
executables: []
|
@@ -17,6 +51,9 @@ extensions: []
|
|
17
51
|
extra_rdoc_files: []
|
18
52
|
files:
|
19
53
|
- lib/refried.rb
|
54
|
+
- lib/refried/configuration.rb
|
55
|
+
- lib/refried/puter.rb
|
56
|
+
- lib/refried/tubes.rb
|
20
57
|
homepage: http://rubygems.org/gems/refried
|
21
58
|
licenses: []
|
22
59
|
metadata: {}
|