lib/daengine/digital_asset_processor.rb in daengine-0.1.2 vs lib/daengine/digital_asset_processor.rb in daengine-0.1.3
- old
+ new
@@ -1,70 +1,103 @@
module Daengine
-class DigitalAssetProcessor
-
- @@last_read_time = 2.days.ago
+ class DigitalAssetProcessor
- def self.trap_signals
- sigtrap = proc {
- puts "DigitalAssetProcessor: caught trapped signal, shutting down"
- @@run = false
- }
- signals = ["SIGTERM", "SIGINT"]
- signals.push("SIGHUP") unless is_windows?
- signals.each do |signal|
- trap signal, sigtrap
+ @@last_read_time = 2.days.ago
+
+ def self.trap_signals
+ sigtrap = proc {
+ puts "DigitalAssetProcessor: caught trapped signal, shutting down"
+ @@run = false
+ }
+ signals = ["SIGTERM", "SIGINT"]
+ signals.push("SIGHUP") unless is_windows?
+ signals.each do |signal|
+ trap signal, sigtrap
+ end
end
- end
- def self.is_windows?
- processor, platform, *rest = RUBY_PLATFORM.split("-")
- platform =~ /mswin/ || platform =~ /mingw/
- end
+ def self.is_windows?
+ processor, platform, *rest = RUBY_PLATFORM.split("-")
+ platform =~ /mswin/ || platform =~ /mingw/
+ end
- def self.execute
- @@run = true
- trap_signals
- @@wthread = Thread.new { worker() }
- return @@wthread
- end
-
- def self.worker
- puts "DigitalAssetProcessor: start processing digital assets!"
- while @@run
- begin
- self.process_tuple_directory
- process_tuple_directory
- rescue => e
- puts e.message
- puts e.backtrace
+ def self.execute
+ @@run = true
+ trap_signals
+ @@wthread = Thread.new { worker() }
+ return @@wthread
+ end
+
+ def self.worker
+ puts "DigitalAssetProcessor: start processing digital assets!"
+ while @@run
+ begin
+ self.process_tuple_directory
+ process_tuple_directory
+ rescue => e
+ puts e.message
+ puts e.backtrace
+ end
+ sleep(5)
end
- sleep(5)
+ @@wthread.exit
end
- @@wthread.exit
- end
- def self.process_tuple_directory
- path = Daengine.config[:assets_path]
- raise "DigitalAssetProcessor: unable to read from asset path #{path}" unless File::directory?(path)
- # read the given directory, process each file in date order starting 2 days ago
- deploy_files= []
+ def self.process_tuple_directory
+ path = Daengine.config[:assets_path]
+ raise "ERROR: DigitalAssetProcessor: Invalid assets_path provided. Unable to read from #{path}" unless File::directory?(path)
+ # read the given directory, process each file in date order starting 2 days ago if last_read_time is nil
+ time = self.read_last_process_time
+ if not time.blank?
+ @@last_read_time = time
+ end
+ Daengine.log("DigitalAssetProcessor: Last process time was #{@@last_read_time}", "info")
+ deploy_files= []
- puts "DigitalAssetProcessor: reading digital asset deployment files from #{path}"
- deploy_files = Dir.entries(path).select {
- |f| File.file?("#{path}/#{f}") and File.mtime("#{path}/#{f}") > @@last_read_time
- }.sort_by{ |f| File.mtime("#{path}/#{f}") }
+ deploy_files = Dir.entries(path).select {
+ |f| File.file?("#{path}/#{f}") and File.mtime("#{path}/#{f}") > @@last_read_time
+ }.sort_by { |f| File.mtime("#{path}/#{f}") }
- deploy_files.each do |filename|
- #parse the file and add content to database.
- file = File.expand_path(filename, path)
- p "DigitalAssetProcessor: processing file #{file}"
- open_file = File.open(file, 'rb')
- Daengine::TeamsiteMetadataParser.parse_tuple_file(open_file)
- p "DigitalAssetProcessor: finished parsing #{filename}."
- @@last_read_time = File.mtime(file)
- p "DigitalAssetProcessor: set last read time to #{@@last_read_time}."
+ if deploy_files.empty?
+ Daengine.log("DigitalAssetProcessor: No digital asset deployment files found to process under #{path}", "warn")
+ else
+ Daengine.log("DigitalAssetProcessor: Reading digital asset deployment files from #{path}", "info")
+ deploy_files.each do |filename|
+ #parse the file and add metadata content to database.
+ file = File.expand_path(filename, path)
+ Daengine.log("DigitalAssetProcessor: Processing file #{filename} --- #{File.mtime(file)}", "info")
+ open_file = File.open(file, 'rb')
+ Daengine::TeamsiteMetadataParser.parse_tuple_file(open_file)
+ Daengine.log("DigitalAssetProcessor: Finished processing #{filename}", "info")
+ @@last_read_time = File.mtime(file)
+ self.save_last_read_time
+ Daengine.log("DigitalAssetProcessor: Last process time set to #{@@last_read_time}", "info")
+ end
+ end
end
+ def self.save_last_read_time
+ begin
+ target = Daengine.config[:daengine_yml_file]
+ content = "last_read_time: #{@@last_read_time}"
+ File.open(target, "w+") do |f|
+ f.write(content)
+ end
+ rescue Exception => e
+ Daengine.log("DigitalAssetProcessor: Failed to write to #{target}.", "warn")
+ end
+ end
+
+ def self.read_last_process_time
+ time = ""
+ begin
+ target = Daengine.config[:daengine_yml_file]
+ property = YAML.load_file(target)
+ time = property['last_read_time']
+ rescue Exception => e
+ Daengine.log("DigitalAssetProcessor: Failed to read from #{target}", "warn")
+ end
+ time
+ end
+
end
-
-end
end
\ No newline at end of file