simple_worker 0.4.1 → 0.5.1

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.
data/lib/rails2_init.rb CHANGED
@@ -1,8 +1,8 @@
1
- #puts "Initializing list of Rails models..."
2
- SimpleWorker.configure do |config|
3
- path = File.join(Rails.root, 'app/models/*.rb')
4
- # puts 'path=' + path
5
- config.models = Dir.glob(path)
6
- config.extra_requires += ['active_support/core_ext', 'active_record', 'action_mailer']
7
- # puts 'config.models=' + config.models.inspect
8
- end
1
+ #puts "Initializing list of Rails models..."
2
+ SimpleWorker.configure do |config|
3
+ path = File.join(Rails.root, 'app/models/*.rb')
4
+ # puts 'path=' + path
5
+ config.models = Dir.glob(path)
6
+ config.extra_requires += ['active_support/core_ext', 'active_record', 'action_mailer']
7
+ # puts 'config.models=' + config.models.inspect
8
+ end
data/lib/railtie.rb CHANGED
@@ -1,22 +1,22 @@
1
- # see http://api.rubyonrails.org/classes/Rails/Railtie.html
2
-
3
- require 'simple_worker'
4
- require 'rails'
5
-
6
- module SimpleWorker
7
- class Railtie < Rails::Railtie
8
- # railtie_name :simple_worker deprecated
9
-
10
- initializer "simple_worker.configure_rails_initialization" do |app|
11
- puts "Initializing SimpleWorker for Rails 3..."
12
- SimpleWorker.configure do |c2|
13
- path = File.join(Rails.root, 'app/models/*.rb')
14
- # puts 'path=' + path
15
- c2.models = Dir.glob(path)
16
- c2.extra_requires += ['active_support/core_ext', 'active_record', 'action_mailer']
17
- # puts 'config.models=' + c2.models.inspect
18
- end
19
-
20
- end
21
- end
22
- end
1
+ # see http://api.rubyonrails.org/classes/Rails/Railtie.html
2
+
3
+ require 'simple_worker'
4
+ require 'rails'
5
+
6
+ module SimpleWorker
7
+ class Railtie < Rails::Railtie
8
+ # railtie_name :simple_worker deprecated
9
+
10
+ initializer "simple_worker.configure_rails_initialization" do |app|
11
+ puts "Initializing SimpleWorker for Rails 3..."
12
+ SimpleWorker.configure do |c2|
13
+ path = File.join(Rails.root, 'app/models/*.rb')
14
+ # puts 'path=' + path
15
+ c2.models = Dir.glob(path)
16
+ c2.extra_requires += ['active_support/core_ext', 'active_record', 'action_mailer']
17
+ # puts 'config.models=' + c2.models.inspect
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,3 @@
1
- # This is an abstract module that developers creating works can mixin/include to use the SimpleWorker special functions.
2
-
3
1
  require 'digest/md5'
4
2
  require 'base64'
5
3
 
@@ -13,11 +11,13 @@ module SimpleWorker
13
11
  attr_accessor :subclass, :caller_file
14
12
  @merged = []
15
13
  @merged_workers = []
14
+ @merged_gems = []
16
15
  @unmerged = []
17
16
 
18
17
  def reset!
19
18
  @merged = []
20
19
  @merged_workers = []
20
+ @merged_gems = []
21
21
  @unmerged = []
22
22
  end
23
23
 
@@ -64,6 +64,12 @@ module SimpleWorker
64
64
  f
65
65
  end
66
66
 
67
+ # merges the specified gem.
68
+ def merge_gem(gem_name, version=nil)
69
+ @merged_gems << {:name=>gem_name, :version=>version}
70
+ require gem_name
71
+ end
72
+
67
73
  # merges the specified files.
68
74
  # todo: don't allow multiple files per merge, just one like require
69
75
  def merge(*files)
@@ -235,10 +241,11 @@ module SimpleWorker
235
241
  before_upload
236
242
 
237
243
  # puts 'upload_if_needed ' + self.class.name
238
- # Todo, watch for this file changing or something so we can reupload
244
+ # Todo, watch for this file changing or something so we can reupload (if in dev env)
239
245
  unless uploaded?
240
246
  merged = self.class.instance_variable_get(:@merged)
241
247
  unmerged = self.class.instance_variable_get(:@unmerged)
248
+ merged_gems = self.class.instance_variable_get(:@merged_gems)
242
249
  # puts 'merged1=' + merged.inspect
243
250
 
244
251
  subclass = self.class
@@ -257,7 +264,7 @@ module SimpleWorker
257
264
  # puts 'merged with superclass=' + merged.inspect
258
265
  end
259
266
  merged += SimpleWorker.config.models if SimpleWorker.config.models
260
- SimpleWorker.service.upload(rfile, subclass.name, :merge=>merged, :unmerge=>unmerged)
267
+ SimpleWorker.service.upload(rfile, subclass.name, :merge=>merged, :unmerge=>unmerged, :merged_gems=>merged_gems)
261
268
  self.class.instance_variable_set(:@uploaded, true)
262
269
  else
263
270
  SimpleWorker.logger.debug 'Already uploaded for ' + self.class.name
@@ -1,236 +1,249 @@
1
- require 'base64'
2
- require 'logger'
3
- require 'appoxy_api'
4
-
5
- module SimpleWorker
6
-
7
- @@logger = Logger.new(STDOUT)
8
- @@logger.level = Logger::INFO
9
-
10
- def self.logger
11
- @@logger
12
- end
13
-
14
- class Service < Appoxy::Api::Client
15
-
16
- attr_accessor :config
17
-
18
- def initialize(access_key, secret_key, options={})
19
- SimpleWorker.logger.info 'Starting SimpleWorker::Service...'
20
- self.config = options[:config] if options[:config]
21
- super("http://api.simpleworker.com/api/", access_key, secret_key, options)
22
- self.host = self.config.host if self.config && self.config.host
23
- end
24
-
25
- # Options:
26
- # - :callback_url
27
- # - :merge => array of files to merge in with this file
28
- def upload(filename, class_name, options={})
29
- # puts "Uploading #{class_name}"
30
- # check whether it should upload again
31
- tmp = Dir.tmpdir()
32
- md5file = "simple_worker_#{class_name.gsub("::", ".")}_#{access_key[0, 8]}.md5"
33
- existing_md5 = nil
34
- f = File.join(tmp, md5file)
35
- if File.exists?(f)
36
- existing_md5 = IO.read(f)
37
- end
38
-
39
- # todo: no point in writing the merged file, just use a string, we're just reading it back in anyways
40
- filename = build_merged_file(filename, options[:merge], options[:unmerge]) if options[:merge]
41
-
42
- # sys.classes[subclass].__file__
43
- # puts '__FILE__=' + Base.subclass.__file__.to_s
44
- contents = File.read(filename)
45
- # puts 'START CONTENTS:'
46
- # puts contents
47
- # puts 'END CONTENTS'
48
- md5 = Digest::MD5.hexdigest(contents)
49
- # puts "new md5=" + md5
50
-
51
- new_code = false
52
- if md5 != existing_md5
53
- SimpleWorker.logger.info "Uploading #{class_name}, code modified."
54
- File.open(f, 'w') { |f| f.write(md5) }
55
- new_code = true
56
- else
57
- # puts "#{class_name}: same code, not uploading"
58
- end
59
-
60
- if new_code
61
- mystring = nil
62
- file = File.open(filename, "r") do |f|
63
- mystring = f.read
64
- end
65
- # mystring = Base64.encode64(mystring)
66
- # puts 'code=' + mystring
67
- options = {"code"=>mystring, "class_name"=>class_name}
68
- ret = post("code/put", options)
69
- ret
70
- end
71
- end
72
-
73
- def build_merged_file(filename, merge, unmerge)
74
- merge = merge.dup
75
- # merge << filename
76
- #puts "merge before uniq! " + merge.inspect
77
- merge.uniq!
78
- # puts "merge after uniq! " + merge.inspect
79
-
80
- if unmerge
81
- unmerge.each do |x|
82
- deleted = merge.delete x
83
- # puts "Unmerging #{x}. Success? #{deleted}"
84
- end
85
- end
86
-
87
- fname2 = File.join(Dir.tmpdir(), File.basename(filename))
88
- # puts 'fname2=' + fname2
89
- # puts 'merged_file_array=' + merge.inspect
90
-
91
- # Let's put the requires from the worker at the top
92
- worker_file_contents_array = File.readlines(filename)
93
- requires_lines = ""
94
- in_comment = false
95
- worker_file_contents_array.each do |line|
96
- line = line.strip
97
- # puts 'checking for requires in ' + line
98
- next if line.length == 0
99
- next if line[0] == "#"
100
- # puts 'line[0, 6]=' + line[0, 6]
101
- if in_comment && line[0,4] == "=end"
102
- in_comment = false
103
- next
104
- elsif in_comment
105
- next
106
- elsif line[0, 6] == "=begin"
107
- in_comment = true
108
- next
109
- end
110
- if line.index("require") == 0
111
- requires_lines << line + "\n"
112
- else
113
- break
114
- end
115
- end
116
-
117
- File.open(fname2, "w") do |f|
118
- if SimpleWorker.config.extra_requires
119
- SimpleWorker.config.extra_requires.each do |r|
120
- f.write "require '#{r}'\n"
121
- end
122
- end
123
- # puts 'Adding requires lines ' + requires_lines.inspect
124
- f.write requires_lines
125
- merge.each do |m|
126
- # puts "merging #{m} into #{filename}"
127
- f.write File.open(m, 'r') { |mo| mo.read }
128
- f.write "\n\n"
129
- end
130
- f.write worker_file_contents_array.join("\n")
131
- end
132
- fname2
133
- end
134
-
135
- def add_sw_params(hash_to_send)
136
- # todo: remove secret key?? Can use worker service from within a worker without it now
137
- hash_to_send["sw_access_key"] = self.access_key
138
- hash_to_send["sw_secret_key"] = self.secret_key
139
- end
140
-
141
- # class_name: The class name of a previously upload class, eg: MySuperWorker
142
- # data: Arbitrary hash of your own data that your task will need to run.
143
- def queue(class_name, data={}, options={})
144
- puts "Queuing #{class_name}..."
145
- if !data.is_a?(Array)
146
- data = [data]
147
- end
148
- # p data
149
- hash_to_send = {}
150
- hash_to_send["payload"] = data
151
- hash_to_send["class_name"] = class_name
152
- hash_to_send["priority"] = options[:priority] if options[:priority]
153
- hash_to_send["options"] = options
154
- add_sw_params(hash_to_send)
155
- if defined?(RAILS_ENV)
156
- # todo: move this to global_attributes in railtie
157
- hash_to_send["rails_env"] = RAILS_ENV
158
- end
159
- return queue_raw(class_name, hash_to_send)
160
-
161
- end
162
-
163
- def queue_raw(class_name, data={})
164
- params = nil
165
- hash_to_send = data
166
- hash_to_send["class_name"] = class_name
167
- ret = post("queue/add", hash_to_send)
168
- ret
169
-
170
- end
171
-
172
-
173
- #
174
- # schedule: hash of scheduling options that can include:
175
- # Required:
176
- # - start_at: Time of first run - DateTime or Time object.
177
- # Optional:
178
- # - run_every: Time in seconds between runs. If ommitted, task will only run once.
179
- # - delay_type: Fixed Rate or Fixed Delay. Default is fixed_delay.
180
- # - end_at: Scheduled task will stop running after this date (optional, if ommitted, runs forever or until cancelled)
181
- # - run_times: Task will run exactly :run_times. For instance if :run_times is 5, then the task will run 5 times.
182
- #
183
- def schedule(class_name, data, schedule)
184
- puts "Scheduling #{class_name}..."
185
- raise "Schedule must be a hash." if !schedule.is_a? Hash
186
- # if !data.is_a?(Array)
187
- # data = [data]
188
- # end
189
- hash_to_send = {}
190
- hash_to_send["payload"] = data
191
- hash_to_send["class_name"] = class_name
192
- hash_to_send["schedule"] = schedule
193
- add_sw_params(hash_to_send)
194
- # puts 'about to send ' + hash_to_send.inspect
195
- ret = post("scheduler/schedule", hash_to_send)
196
- ret
197
- end
198
-
199
- def cancel_schedule(scheduled_task_id)
200
- raise "Must include a schedule id." if scheduled_task_id.blank?
201
- hash_to_send = {}
202
- hash_to_send["scheduled_task_id"] = scheduled_task_id
203
- ret = post("scheduler/cancel", hash_to_send)
204
- ret
205
- end
206
-
207
- def get_schedules()
208
- hash_to_send = {}
209
- ret = get("scheduler/list", hash_to_send)
210
- ret
211
- end
212
-
213
- def status(task_id)
214
- data = {"task_id"=>task_id}
215
- ret = get("task/status", data)
216
- ret
217
- end
218
-
219
- def schedule_status(schedule_id)
220
- data = {"schedule_id"=>schedule_id}
221
- ret = get("scheduler/status", data)
222
- ret
223
- end
224
-
225
- def log(task_id)
226
- data = {"task_id"=>task_id}
227
- ret = get("task/log", data, {:parse=>false})
228
- # puts 'ret=' + ret.inspect
229
- # ret["log"] = Base64.decode64(ret["log"])
230
- ret
231
- end
232
-
233
-
234
- end
235
-
1
+ require 'base64'
2
+ require 'logger'
3
+ require 'appoxy_api'
4
+ require 'zip'
5
+ module SimpleWorker
6
+
7
+ @@logger = Logger.new(STDOUT)
8
+ @@logger.level = Logger::INFO
9
+
10
+ def self.logger
11
+ @@logger
12
+ end
13
+
14
+ def self.api_version
15
+ 3
16
+ end
17
+
18
+ class Service < Appoxy::Api::Client
19
+
20
+ attr_accessor :config
21
+
22
+ def initialize(access_key, secret_key, options={})
23
+ SimpleWorker.logger.info 'Starting SimpleWorker::Service...'
24
+ self.config = options[:config] if options[:config]
25
+ super("http://api.simpleworker.com/api/", access_key, secret_key, options)
26
+ self.host = self.config.host if self.config && self.config.host
27
+ end
28
+
29
+ # Options:
30
+ # - :callback_url
31
+ # - :merge => array of files to merge in with this file
32
+ def upload(filename, class_name, options={})
33
+ # puts "Uploading #{class_name}"
34
+ # check whether it should upload again
35
+ tmp = Dir.tmpdir()
36
+ md5file = "simple_worker_#{class_name.gsub("::", ".")}_#{access_key[0, 8]}.md5"
37
+ existing_md5 = nil
38
+ f = File.join(tmp, md5file)
39
+ if File.exists?(f)
40
+ existing_md5 = IO.read(f)
41
+ end
42
+ # Check for code changes.
43
+ md5 = Digest::MD5.hexdigest(File.read(filename))
44
+ new_code = false
45
+ if md5 != existing_md5
46
+ SimpleWorker.logger.info "Uploading #{class_name}, code modified."
47
+ File.open(f, 'w') { |f| f.write(md5) }
48
+ new_code = true
49
+ else
50
+ # puts "#{class_name}: same code, not uploading"
51
+ end
52
+
53
+
54
+ filename = build_merged_file(filename, options[:merge], options[:unmerge], options[:merged_gems])
55
+
56
+ # sys.classes[subclass].__file__
57
+ # puts '__FILE__=' + Base.subclass.__file__.to_s
58
+ # puts "new md5=" + md5
59
+
60
+
61
+
62
+ if new_code
63
+ # mystring = nil
64
+ # file = File.open(filename, "r") do |f|
65
+ # mystring = f.read
66
+ # end
67
+ # mystring = Base64.encode64(mystring)
68
+ # puts 'code=' + mystring
69
+ options = {"class_name"=>class_name, }
70
+ ret = post_file("code/put", File.new(filename), options)
71
+ ret
72
+ end
73
+ end
74
+
75
+ def get_gem_path(full_gem_name, version=nil)
76
+ gem_name =(full_gem_name.match(/^[a-zA-Z0-9\-_]+/)[0])
77
+ puts "Searching #{gem_name}"
78
+ searcher = Gem::GemPathSearcher.new
79
+ gems = searcher.find_all(gem_name)
80
+ gems = gems.select { |g| g.version.version==version } if version
81
+ if !gems.empty?
82
+ gem = gems.first
83
+ gem.full_gem_path + "/lib"
84
+ else
85
+ nil
86
+ end
87
+ end
88
+
89
+ def build_merged_file(filename, merge, unmerge, merged_gems)
90
+ # unless (merge && merge.size > 0) || (merged_gems && merged_gems.size > 0)
91
+ # return filename
92
+ # end
93
+ merge = merge.dup
94
+ if unmerge
95
+ unmerge.each do |x|
96
+ deleted = merge.delete x
97
+ # puts "Unmerging #{x}. Success? #{deleted}"
98
+ end
99
+ end
100
+ merge.uniq!
101
+ tmp_file = File.join(Dir.tmpdir(), File.basename(filename))
102
+ File.open(tmp_file, "w") do |f|
103
+ if SimpleWorker.config.extra_requires
104
+ SimpleWorker.config.extra_requires.each do |r|
105
+ f.write "require '#{r}'\n"
106
+ end
107
+ end
108
+ f.write File.open(filename, 'r') { |mo| mo.read }
109
+ end
110
+ merge << tmp_file
111
+ #puts "merge before uniq! " + merge.inspect
112
+ # puts "merge after uniq! " + merge.inspect
113
+
114
+ fname2 = tmp_file + ".zip"
115
+ # puts 'fname2=' + fname2
116
+ # puts 'merged_file_array=' + merge.inspect
117
+ #File.open(fname2, "w") do |f|
118
+ File.delete(fname2) if File.exist?(fname2)
119
+
120
+ Zip::ZipFile.open(fname2, 'w') do |f|
121
+ if merged_gems
122
+ merged_gems.each do |gem|
123
+ path = get_gem_path(gem[:name], gem[:version])
124
+ if path
125
+ puts "Collecting gem #{path}"
126
+ Dir["#{path}/**/**"].each do |file|
127
+ f.add('gems/'+"#{gem["name"]}/"+ file.sub(path+'/', ''), file)
128
+ end
129
+ end
130
+ end
131
+ end
132
+ merge.each do |m|
133
+ # puts "merging #{m} into #{filename}"
134
+ f.add(File.basename(m), m)
135
+ end
136
+ end
137
+ fname2
138
+ end
139
+
140
+ def add_sw_params(hash_to_send)
141
+ # todo: remove secret key?? Can use worker service from within a worker without it now
142
+ hash_to_send["sw_access_key"] = self.access_key
143
+ hash_to_send["sw_secret_key"] = self.secret_key
144
+ hash_to_send["api_version"] = SimpleWorker.api_version
145
+ end
146
+
147
+ def check_config
148
+ if self.config.nil? || self.config.access_key.nil?
149
+ raise "Invalid SimpleWorker configuration, no access key specified."
150
+ end
151
+ end
152
+
153
+ # class_name: The class name of a previously upload class, eg: MySuperWorker
154
+ # data: Arbitrary hash of your own data that your task will need to run.
155
+ def queue(class_name, data={}, options={})
156
+ puts "Queuing #{class_name}..."
157
+ check_config
158
+ if !data.is_a?(Array)
159
+ data = [data]
160
+ end
161
+ # p data
162
+ hash_to_send = {}
163
+ hash_to_send["payload"] = data
164
+ hash_to_send["class_name"] = class_name
165
+ hash_to_send["priority"] = options[:priority] if options[:priority]
166
+ hash_to_send["options"] = options
167
+ add_sw_params(hash_to_send)
168
+ if defined?(RAILS_ENV)
169
+ # todo: move this to global_attributes in railtie
170
+ hash_to_send["rails_env"] = RAILS_ENV
171
+ end
172
+ return queue_raw(class_name, hash_to_send)
173
+
174
+ end
175
+
176
+ def queue_raw(class_name, data={})
177
+ params = nil
178
+ hash_to_send = data
179
+ hash_to_send["class_name"] = class_name
180
+ ret = post("queue/add", hash_to_send)
181
+ ret
182
+
183
+ end
184
+
185
+
186
+ #
187
+ # schedule: hash of scheduling options that can include:
188
+ # Required:
189
+ # - start_at: Time of first run - DateTime or Time object.
190
+ # Optional:
191
+ # - run_every: Time in seconds between runs. If ommitted, task will only run once.
192
+ # - delay_type: Fixed Rate or Fixed Delay. Default is fixed_delay.
193
+ # - end_at: Scheduled task will stop running after this date (optional, if ommitted, runs forever or until cancelled)
194
+ # - run_times: Task will run exactly :run_times. For instance if :run_times is 5, then the task will run 5 times.
195
+ #
196
+ def schedule(class_name, data, schedule)
197
+ puts "Scheduling #{class_name}..."
198
+ raise "Schedule must be a hash." if !schedule.is_a? Hash
199
+ # if !data.is_a?(Array)
200
+ # data = [data]
201
+ # end
202
+ hash_to_send = {}
203
+ hash_to_send["payload"] = data
204
+ hash_to_send["class_name"] = class_name
205
+ hash_to_send["schedule"] = schedule
206
+ add_sw_params(hash_to_send)
207
+ # puts ' about to send ' + hash_to_send.inspect
208
+ ret = post("scheduler/schedule", hash_to_send)
209
+ ret
210
+ end
211
+
212
+ def cancel_schedule(scheduled_task_id)
213
+ raise "Must include a schedule id." if scheduled_task_id.blank?
214
+ hash_to_send = {}
215
+ hash_to_send["scheduled_task_id"] = scheduled_task_id
216
+ ret = post("scheduler/cancel", hash_to_send)
217
+ ret
218
+ end
219
+
220
+ def get_schedules()
221
+ hash_to_send = {}
222
+ ret = get("scheduler/list", hash_to_send)
223
+ ret
224
+ end
225
+
226
+ def status(task_id)
227
+ data = {"task_id"=>task_id}
228
+ ret = get("task/status", data)
229
+ ret
230
+ end
231
+
232
+ def schedule_status(schedule_id)
233
+ data = {"schedule_id"=>schedule_id}
234
+ ret = get("scheduler/status", data)
235
+ ret
236
+ end
237
+
238
+ def log(task_id)
239
+ data = {"task_id"=>task_id}
240
+ ret = get("task/log", data, {:parse=>false})
241
+ # puts ' ret=' + ret.inspect
242
+ # ret["log"] = Base64.decode64(ret["log"])
243
+ ret
244
+ end
245
+
246
+
247
+ end
248
+
236
249
  end
data/lib/simple_worker.rb CHANGED
@@ -13,11 +13,13 @@ module SimpleWorker
13
13
  :service
14
14
 
15
15
  def configure()
16
- SimpleWorker.config ||= Config.new
17
16
  yield(config)
18
17
  SimpleWorker.service = Service.new(config.access_key, config.secret_key, :config=>config)
19
18
  end
20
19
 
20
+ def config
21
+ @config ||= Config.new
22
+ end
21
23
 
22
24
  end
23
25
 
data/test/cool_model.rb CHANGED
@@ -1,7 +1,7 @@
1
- require 'simple_record'
2
-
3
- class CoolModel < SimpleRecord::Base
4
-
5
- has_strings :name
6
-
7
- end
1
+ require 'simple_record'
2
+
3
+ class CoolModel < SimpleRecord::Base
4
+
5
+ has_strings :name
6
+
7
+ end
data/test/cool_worker.rb CHANGED
@@ -1,14 +1,14 @@
1
-
2
- class CoolWorker < SimpleWorker::Base
3
- attr_accessor :array_of_models
4
- merge 'cool_model'
5
-
6
-
7
- def run
8
- 10.times do |i|
9
- puts "HEY THERE PUTS #{i}"
10
- log "HEY THERE LOG #{i}"
11
- sleep 1
12
- end
13
- end
14
- end
1
+
2
+ class CoolWorker < SimpleWorker::Base
3
+ attr_accessor :array_of_models
4
+ merge 'cool_model'
5
+
6
+
7
+ def run
8
+ 10.times do |i|
9
+ puts "HEY THERE PUTS #{i}"
10
+ log "HEY THERE LOG #{i}"
11
+ sleep 1
12
+ end
13
+ end
14
+ end
data/test/db_worker.rb CHANGED
@@ -1,19 +1,18 @@
1
- require 'mysql2'
2
-
3
- # bump asdf
4
- class DbWorker < SimpleWorker::Base
5
- attr_accessor :array_of_models
6
- merge 'trace_object'
7
-
8
- def run
9
- to = TraceObject.find(:first)
10
- log to.inspect
11
- @object = to
12
- end
13
-
14
- def ob
15
- @object
16
- end
17
-
18
-
19
- end
1
+ require 'mysql2'
2
+
3
+ class DbWorker < SimpleWorker::Base
4
+ attr_accessor :array_of_models
5
+ merge 'trace_object'
6
+
7
+ def run
8
+ to = TraceObject.find(:first)
9
+ log to.inspect
10
+ @object = to
11
+ end
12
+
13
+ def ob
14
+ @object
15
+ end
16
+
17
+
18
+ end
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  require File.join(File.dirname(__FILE__), '../../lib/simple_worker')
3
3
  rescue Exception => ex
4
- puts 'Could not load relative simple_worker: ' + ex.message
4
+ puts 'ERROR!!! ' + ex.message
5
5
  # require 'simple_worker'
6
6
  end
7
7
 
@@ -1,22 +1,22 @@
1
- begin
2
- require File.join(File.dirname(__FILE__), '../../lib/simple_worker')
3
- rescue Exception => ex
4
- puts 'Could not load relative simple_worker: ' + ex.message
5
- # require 'simple_worker'
6
- end
7
-
8
-
9
- class Model2
10
- attr_accessor :heidi, :ho
11
-
12
- include SimpleWorker::UsedInWorker
13
-
14
- def say_hello
15
- log "Hi there sir"
16
- end
17
-
18
- # testk laksdfj klasj df
19
- def test
20
- log 'test'
21
- end
22
- end
1
+ begin
2
+ require File.join(File.dirname(__FILE__), '../../lib/simple_worker')
3
+ rescue Exception => ex
4
+ puts 'ERROR!!! ' + ex.message
5
+ # require 'simple_worker'
6
+ end
7
+
8
+
9
+ class Model2
10
+ attr_accessor :heidi, :ho
11
+
12
+ include SimpleWorker::UsedInWorker
13
+
14
+ def say_hello
15
+ log "Hi there sir"
16
+ end
17
+
18
+ # testk laksdfj klasj df
19
+ def test
20
+ log 'test'
21
+ end
22
+ end
@@ -1,4 +1,4 @@
1
-
2
-
3
- require_relative 'models/model_1.rb'
4
-
1
+
2
+
3
+ require_relative 'models/model_1.rb'
4
+
@@ -1,25 +1,25 @@
1
- require 'test/unit'
2
- begin
3
- require File.join(File.dirname(__FILE__), '../lib/simple_worker')
4
- rescue Exception => ex
5
- puts ex.message
6
- require 'simple_worker'
7
- end
8
- require_relative "test_worker"
9
- require_relative "test_worker_2"
10
-
11
-
12
- class SimpleWorkerTests < Test::Unit::TestCase
13
-
14
- def test_no_conf
15
- # Add something to queue, get task ID back
16
- tw = TestWorker.new
17
- tw.s3_key = "active style runner"
18
- tw.times = 3
19
-
20
- tw.run_local
21
-
22
- end
23
-
24
- end
25
-
1
+ require 'test/unit'
2
+ begin
3
+ require File.join(File.dirname(__FILE__), '../lib/simple_worker')
4
+ rescue Exception => ex
5
+ puts ex.message
6
+ require 'simple_worker'
7
+ end
8
+ require_relative "test_worker"
9
+ require_relative "test_worker_2"
10
+
11
+
12
+ class SimpleWorkerTests < Test::Unit::TestCase
13
+
14
+ def test_no_conf
15
+ # Add something to queue, get task ID back
16
+ tw = TestWorker.new
17
+ tw.s3_key = "active style runner"
18
+ tw.times = 3
19
+
20
+ tw.run_local
21
+
22
+ end
23
+
24
+ end
25
+
@@ -28,7 +28,7 @@ class SimpleWorkerTests < TestBase
28
28
  puts 'queuing ' + tw.inspect
29
29
 
30
30
  response_hash_single = nil
31
- 1.times do |i|
31
+ 5.times do |i|
32
32
  begin
33
33
  response_hash_single = tw.queue
34
34
  rescue => ex
@@ -38,7 +38,7 @@ class SimpleWorkerTests < TestBase
38
38
 
39
39
  puts 'response_hash=' + response_hash_single.inspect
40
40
  puts 'task_id=' + tw.task_id
41
- 20.times do |i|
41
+ 10.times do |i|
42
42
  puts "status #{i}: " + tw.status.inspect
43
43
  break if tw.status["status"] == "complete"
44
44
  sleep 2
data/test/test_worker.rb CHANGED
@@ -1,29 +1,29 @@
1
- #begin
2
- # require File.join(File.dirname(__FILE__), '../lib/simple_worker')
3
- #rescue Exception => ex
4
- # puts ex.message
5
- # require 'simple_worker'
6
- #end
7
- # Bump for new checksum.
8
- class TestWorker < SimpleWorker::Base
9
-
10
- attr_accessor :s3_key, :times
11
-
12
- def run
13
- log 'running the test worker for moi '.upcase
14
- log 's3_key instance_variable = ' + self.s3_key.to_s
15
-
16
- @times.times do |i|
17
- log 'running at ' + i.to_s
18
- sleep 1
19
- set_progress(:percent=> (i / @times * 100))
20
- end
21
- end
22
-
23
- def set_complete(params=nil)
24
- log 'SET COMPLETE YAY!' + params[:task_set_id]
25
- end
26
-
27
-
28
- end
29
-
1
+ #begin
2
+ # require File.join(File.dirname(__FILE__), '../lib/simple_worker')
3
+ #rescue Exception => ex
4
+ # puts ex.message
5
+ # require 'simple_worker'
6
+ #end
7
+ # Bump for new checksum.
8
+ class TestWorker < SimpleWorker::Base
9
+
10
+ attr_accessor :s3_key, :times
11
+
12
+ def run
13
+ log 'running the test worker for moi '.upcase
14
+ log 's3_key instance_variable = ' + self.s3_key.to_s
15
+
16
+ @times.times do |i|
17
+ log 'running at ' + i.to_s
18
+ sleep 1
19
+ set_progress(:percent=> (i / @times * 100))
20
+ end
21
+ end
22
+
23
+ def set_complete(params=nil)
24
+ log 'SET COMPLETE YAY!' + params[:task_set_id]
25
+ end
26
+
27
+
28
+ end
29
+
@@ -7,10 +7,7 @@ rescue Exception => ex
7
7
  end
8
8
  =end
9
9
 
10
- # Bump for new checksum.sdf adsfjlaksdjf d
11
-
12
- require 'json'
13
-
10
+ # Bump for new checksum.sdf adsfjlaksdjf dasfasdfadsf
14
11
  class TestWorker2 < SimpleWorker::Base
15
12
 
16
13
  merge File.join(File.dirname(__FILE__), 'models', 'model_1.rb')
@@ -40,7 +37,7 @@ class TestWorker2 < SimpleWorker::Base
40
37
 
41
38
  second_workers = []
42
39
  now = Time.now
43
- 1.times do |i|
40
+ 10.times do |i|
44
41
  second_worker = SecondWorker.new
45
42
  second_worker.start_time = now
46
43
  second_worker.num = i
data/test/trace_object.rb CHANGED
@@ -1,6 +1,6 @@
1
- class TraceObject < ActiveRecord::Base
2
- belongs_to :tracking_device
3
- has_many :location_updates
4
-
5
-
6
- end
1
+ class TraceObject < ActiveRecord::Base
2
+ belongs_to :tracking_device
3
+ has_many :location_updates
4
+
5
+
6
+ end
@@ -0,0 +1,26 @@
1
+ require 'zip'
2
+ require 'zlib'
3
+
4
+ dir = Dir.new("./")
5
+ started_at = Time.now
6
+ fname2 = "zipped.zip"
7
+ Zip::ZipFile.open(fname2, 'w') do |f|
8
+ dir.each do |fname|
9
+ puts "merging #{fname} into #{fname2}"
10
+ f.add(File.basename(fname), fname)
11
+ end
12
+ end
13
+ ended_at = Time.now
14
+ puts "zip duration=#{(ended_at.to_f - started_at.to_f)}"
15
+
16
+ # todo: need to tar these first.
17
+ started_at = Time.now
18
+ fname2 = "gzipped.gzip"
19
+ Zlib::GzipWriter.open(fname2) do |gz|
20
+ dir.each do |fname|
21
+ puts "merging #{fname} into #{fname2}"
22
+ gz.write(File.basename(fname), fname)
23
+ end
24
+ end
25
+ ended_at = Time.now
26
+ puts "gzip duration=#{(ended_at.to_f - started_at.to_f)}"
metadata CHANGED
@@ -1,35 +1,44 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: simple_worker
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.1
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 5
8
+ - 1
9
+ version: 0.5.1
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Travis Reeder
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2011-03-07 00:00:00.000000000 -08:00
16
+
17
+ date: 2011-03-26 00:00:00 -07:00
13
18
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
16
21
  name: appoxy_api
17
- requirement: &22838376 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
18
24
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
23
31
  type: :runtime
24
- prerelease: false
25
- version_requirements: *22838376
32
+ version_requirements: *id001
26
33
  description: The official SimpleWorker gem for http://www.simpleworker.com
27
34
  email: travis@appoxy.com
28
35
  executables: []
36
+
29
37
  extensions: []
30
- extra_rdoc_files:
38
+
39
+ extra_rdoc_files:
31
40
  - README.markdown
32
- files:
41
+ files:
33
42
  - lib/rails2_init.rb
34
43
  - lib/railtie.rb
35
44
  - lib/simple_worker.rb
@@ -55,32 +64,40 @@ files:
55
64
  - test/test_worker_2.rb
56
65
  - test/test_worker_3.rb
57
66
  - test/trace_object.rb
67
+ - test/zip_vs_gzip.rb
58
68
  has_rdoc: true
59
69
  homepage: http://github.com/appoxy/simple_worker
60
70
  licenses: []
71
+
61
72
  post_install_message:
62
73
  rdoc_options: []
63
- require_paths:
74
+
75
+ require_paths:
64
76
  - lib
65
- required_ruby_version: !ruby/object:Gem::Requirement
77
+ required_ruby_version: !ruby/object:Gem::Requirement
66
78
  none: false
67
- requirements:
68
- - - ! '>='
69
- - !ruby/object:Gem::Version
70
- version: '0'
71
- required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
86
  none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
92
+ version: "0"
77
93
  requirements: []
94
+
78
95
  rubyforge_project:
79
- rubygems_version: 1.6.0
96
+ rubygems_version: 1.3.7
80
97
  signing_key:
81
98
  specification_version: 3
82
99
  summary: The official SimpleWorker gem for http://www.simpleworker.com
83
- test_files:
100
+ test_files:
84
101
  - test/cool_model.rb
85
102
  - test/cool_worker.rb
86
103
  - test/db_worker.rb
@@ -97,3 +114,4 @@ test_files:
97
114
  - test/test_worker_2.rb
98
115
  - test/test_worker_3.rb
99
116
  - test/trace_object.rb
117
+ - test/zip_vs_gzip.rb