Class: Daengine::DigitalAssetProcessor
- Inherits:
-
Object
- Object
- Daengine::DigitalAssetProcessor
- Defined in:
- lib/daengine/digital_asset_processor.rb
Constant Summary collapse
- @@last_read_time =
2.days.ago
Class Method Summary collapse
- .execute ⇒ Object
- .is_windows? ⇒ Boolean
- .process_tuple_directory ⇒ Object
- .read_last_process_time ⇒ Object
- .save_last_read_time ⇒ Object
- .trap_signals ⇒ Object
- .worker ⇒ Object
Class Method Details
.execute ⇒ Object
23 24 25 26 27 28 |
# File 'lib/daengine/digital_asset_processor.rb', line 23 def self.execute @@run = true trap_signals @@wthread = Thread.new { worker() } return @@wthread end |
.is_windows? ⇒ Boolean
18 19 20 21 |
# File 'lib/daengine/digital_asset_processor.rb', line 18 def self.is_windows? processor, platform, *rest = RUBY_PLATFORM.split("-") platform =~ /mswin/ || platform =~ /mingw/ end |
.process_tuple_directory ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/daengine/digital_asset_processor.rb', line 45 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= [] 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}") } if deploy_files.empty? Daengine.log("WARN: 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.(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) + 1.second self.save_last_read_time Daengine.log("DigitalAssetProcessor: Last process time set to #{@@last_read_time}", "info") end end end |
.read_last_process_time ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/daengine/digital_asset_processor.rb', line 90 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("ERROR: DigitalAssetProcessor: Failed to read from #{target}", "error") end time end |
.save_last_read_time ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/daengine/digital_asset_processor.rb', line 78 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("ERROR: DigitalAssetProcessor: Failed to write to #{target}.", "error") end end |
.trap_signals ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/daengine/digital_asset_processor.rb', line 6 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 |
.worker ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/daengine/digital_asset_processor.rb', line 30 def self.worker puts "DigitalAssetProcessor: start processing digital assets!" while @@run begin self.process_tuple_directory process_tuple_directory rescue => e puts e. puts e.backtrace end sleep(5) end @@wthread.exit end |