diff --git a/app/lib/pre_assembly/bundle.rb b/app/lib/pre_assembly/bundle.rb index a1afaabe9..541c3ff3c 100644 --- a/app/lib/pre_assembly/bundle.rb +++ b/app/lib/pre_assembly/bundle.rb @@ -119,13 +119,13 @@ def process_digital_objects begin # Try to pre_assemble the digital object. load_checksums(dobj) - dobj.pre_assemble + status = dobj.pre_assemble # Indicate that we finished. dobj.pre_assem_finished = true log "Completed #{dobj.druid}" ensure # Log the outcome no matter what. - File.open(progress_log_file, 'a') { |f| f.puts log_progress_info(dobj).to_yaml } + File.open(progress_log_file, 'a') { |f| f.puts log_progress_info(dobj, status).to_yaml } end end ensure @@ -137,13 +137,13 @@ def objects_to_process @o2p ||= digital_objects.reject { |dobj| skippables.key?(dobj.container) } end - def log_progress_info(dobj) + def log_progress_info(dobj, status) { container: dobj.container, pid: dobj.pid, pre_assem_finished: dobj.pre_assem_finished, timestamp: Time.now.strftime('%Y-%m-%d %H:%I:%S') - } + }.merge(status) end private diff --git a/app/lib/pre_assembly/digital_object.rb b/app/lib/pre_assembly/digital_object.rb index 6757aff8c..cb4a5eb71 100644 --- a/app/lib/pre_assembly/digital_object.rb +++ b/app/lib/pre_assembly/digital_object.rb @@ -60,9 +60,10 @@ def content_md_creation_style # The main process. #### + # @return [Hash] the status of the attempt and an optional message def pre_assemble log " - pre_assemble(#{source_id}) started" - raise "#{druid.druid} can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened" if !openable? && current_object_version > 1 + return { status: 'error', message: "can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened" } if !openable? && current_object_version > 1 @assembly_directory = AssemblyDirectory.create(druid_id: druid.id) stage_files generate_content_metadata @@ -70,6 +71,7 @@ def pre_assemble create_new_version if openable? initialize_assembly_workflow log " - pre_assemble(#{pid}) finished" + { status: 'success' } end attr_reader :assembly_directory diff --git a/config/initializers/okcomputer.rb b/config/initializers/okcomputer.rb index bb9d994f6..37936a796 100644 --- a/config/initializers/okcomputer.rb +++ b/config/initializers/okcomputer.rb @@ -10,9 +10,9 @@ OkComputer::Registry.register 'feature-resque-down', OkComputer::ResqueDownCheck.new # check for backed up resque queues: this is a low volume app, so the threshold is low -Resque.queues.each do |queue| - OkComputer::Registry.register "feature-#{queue}-queue-depth", OkComputer::ResqueBackedUpCheck.new(queue, 5) -end +# Resque.queues.each do |queue| +# OkComputer::Registry.register "feature-#{queue}-queue-depth", OkComputer::ResqueBackedUpCheck.new(queue, 5) +# end class DirectoryExistsCheck < OkComputer::Check attr_accessor :directory diff --git a/spec/lib/pre_assembly/bundle_spec.rb b/spec/lib/pre_assembly/bundle_spec.rb index a6d991686..d1ceaabcb 100644 --- a/spec/lib/pre_assembly/bundle_spec.rb +++ b/spec/lib/pre_assembly/bundle_spec.rb @@ -52,11 +52,18 @@ expect { b.process_digital_objects }.not_to raise_error end - it 'throws an exception for re-accessioned objects that are not ready to be versioned' do - allow_any_instance_of(PreAssembly::DigitalObject).to receive(:'openable?').and_return(false) - allow_any_instance_of(PreAssembly::DigitalObject).to receive(:current_object_version).and_return(2) - exp_msg = "druid:aa111aa1111 can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened" - expect { b.process_digital_objects }.to raise_error(RuntimeError, exp_msg) + context 'when there are re-accessioned objects that are not ready to be versioned' do + before do + allow_any_instance_of(PreAssembly::DigitalObject).to receive(:'openable?').and_return(false) + allow_any_instance_of(PreAssembly::DigitalObject).to receive(:current_object_version).and_return(2) + end + + it 'logs an error' do + b.process_digital_objects + yaml = YAML.load_file(b.progress_log_file) + expect(yaml[:status]).to eq 'error' + expect(yaml[:message]).to eq "can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened" + end end end diff --git a/spec/lib/pre_assembly/digital_object_spec.rb b/spec/lib/pre_assembly/digital_object_spec.rb index 4e9b83a96..d2d8d5916 100644 --- a/spec/lib/pre_assembly/digital_object_spec.rb +++ b/spec/lib/pre_assembly/digital_object_spec.rb @@ -44,12 +44,19 @@ def add_object_files(extension = 'tif') object.pre_assemble end - it 'throws an exception for existing non-openable objects' do - allow(object).to receive(:'openable?').and_return(false) - allow(object).to receive(:current_object_version).and_return(2) - expect(object).not_to receive(:stage_files) - exp_msg = "#{pid} can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened" - expect { object.pre_assemble }.to raise_error(RuntimeError, exp_msg) + context 'when the object is not openable' do + before do + allow(object).to receive(:'openable?').and_return(false) + allow(object).to receive(:current_object_version).and_return(2) + end + + let(:status) { object.pre_assemble } + + it 'logs an error for existing non-openable objects' do + expect(object).not_to receive(:stage_files) + expect(status).to eq(status: 'error', + message: "can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened") + end end it 'calls create_new_version for existing openable objects' do