lib/libis/format/tool/fido.rb in libis-format-0.9.49 vs lib/libis/format/tool/fido.rb in libis-format-0.9.50
- old
+ new
@@ -72,20 +72,26 @@
# No header output
args << '-q'
# Run command and capture results
- fido = ::Libis::Tools::Command.run(Libis::Format::Config[:fido_path], *args)
+ timeout = Libis::Format::Config[:timeouts][:fido]
+ result = ::Libis::Tools::Command.run(
+ Libis::Format::Config[:fido_path], *args,
+ timeout: timeout,
+ kill_after: timeout * 2
+ )
# Log warning if needed
- raise RuntimeError, "Fido errors: #{fido[:err].join("\n")}" unless fido[:err].empty?
+ raise RuntimeError, "#{self.class} took too long (> #{timeout} seconds) to complete" if result[:timeout]
+ raise RuntimeError, "#{self.class} errors: #{result[:err].join("\n")}" unless result[:status] == 0 && result[:err].empty?
# Parse output (CSV) text into array and return result
keys = [:status, :time, :puid, :format_name, :format_version, :filesize, :filepath, :mimetype, :matchtype]
- result = CSV.parse(fido[:out].join("\n"))
+ data = CSV.parse(result[:out].join("\n"))
.map {|a| Hash[keys.zip(a)]}
.select {|a| a[:status] == 'OK'}
- result.each do |r|
+ data.each do |r|
r.delete(:time)
r.delete(:status)
r.delete(:filesize)
r[:tool] = :fido
end