Class: Ddr::Jobs::FitsFileCharacterization
- Inherits:
-
Object
- Object
- Ddr::Jobs::FitsFileCharacterization
- Defined in:
- lib/ddr/jobs/fits_file_characterization.rb
Constant Summary collapse
- EVENT_SUMMARY =
'FITS characterization of content file'.freeze
Class Method Summary collapse
- .create_temp_infile(dir, tmp_filename, content) ⇒ Object
- .fits_command ⇒ Object
- .fits_version ⇒ Object
- .notify_event(pid, err, status) ⇒ Object
- .perform(pid) ⇒ Object
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_command ⇒ Object
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_version ⇒ Object
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 |