simple_worker 0.4.1 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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