Class: Daengine::DigitalAssetProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/daengine/digital_asset_processor.rb

Constant Summary collapse

@@last_read_time =
2.days.ago

Class Method Summary collapse

Class Method Details

.process_tuple_directoryObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/daengine/digital_asset_processor.rb', line 6

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)
  # ensure only one instance running at a time
  lockfile_name = Daengine.config[:daengine_yml_file] + '.lck'
  begin
    lockfile = File.new(lockfile_name, File::CREAT|File::EXCL)

    # 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
    last_run_time = 10.years.ago
    if not time.blank?
      @@last_read_time = time
      last_run_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("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|
        begin
          #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, last_run_time)
          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")
        rescue
          Daengine.log("Unable to process file #{filename}, #{$!.message}", "error")            
        end
      end
    end

  rescue Errno::EEXIST
    Daengine.log("DigitalAssetProcessor: Already in progress. Lockfile exists at #{lockfile_name}. Aborting!", "error")
  ensure
    unless lockfile.nil?
      lockfile.close()
      File.delete(lockfile_name)
    end
  end
 
end

.read_last_process_timeObject



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/daengine/digital_asset_processor.rb', line 72

def self.read_last_process_time
  time = 2.days.ago
  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} - #{e.message}", "error")
  end
  time
end

.save_last_read_timeObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/daengine/digital_asset_processor.rb', line 60

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