Class: Ddr::Jobs::FitsFileCharacterization

Inherits:
Object
  • Object
show all
Defined in:
lib/ddr/jobs/fits_file_characterization.rb

Constant Summary collapse

EVENT_SUMMARY =
'FITS characterization of content file'.freeze

Class Method Summary collapse

Class Method Details

.create_temp_infile(dir, tmp_filename, content) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/ddr/jobs/fits_file_characterization.rb', line 35

def self.create_temp_infile(dir, tmp_filename, content)
  temp_infile = File.join(dir, tmp_filename)
  File.open(temp_infile, 'wb') do |f|
    f.write content
  end
  temp_infile
end

.fits_commandObject



25
26
27
# File 'lib/ddr/jobs/fits_file_characterization.rb', line 25

def self.fits_command
  File.join(Ddr::Models.fits_home, 'fits.sh')
end

.fits_versionObject



29
30
31
# File 'lib/ddr/jobs/fits_file_characterization.rb', line 29

def self.fits_version
  `#{fits_command} -v`.strip
end

.notify_event(pid, err, status) ⇒ Object



43
44
45
46
47
48
# File 'lib/ddr/jobs/fits_file_characterization.rb', line 43

def self.notify_event(pid, err, status)
  details = status.success? ? nil : err
  event_args = { pid: pid, summary: EVENT_SUMMARY, software:  "fits #{fits_version}", detail: details }
  event_args[:outcome] = status.success? ? Ddr::Events::Event::SUCCESS : Ddr::Events::Event::FAILURE
  Ddr::Notifications.notify_event(:update, event_args)
end

.perform(pid) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/ddr/jobs/fits_file_characterization.rb', line 10

def self.perform(pid)
  obj = ActiveFedora::Base.find(pid)
  tmp_filename = Ddr::Utils::sanitize_filename(obj.original_filename) || obj.content.default_file_name
  Dir.mktmpdir do |dir|
    infile = create_temp_infile(dir, tmp_filename, obj.content.content)
    fits_output, err, status = Open3.capture3(fits_command, '-i', infile)
    if status.success? && fits_output.present?
      obj.reload
      obj.fits.content = fits_output
      obj.save!
    end
    notify_event(pid, err, status)
  end
end