diff --git a/enterprise/app/jobs/captain/documents/pdf_extraction_job.rb b/enterprise/app/jobs/captain/documents/pdf_extraction_job.rb index 010a8ff55..fb013c400 100644 --- a/enterprise/app/jobs/captain/documents/pdf_extraction_job.rb +++ b/enterprise/app/jobs/captain/documents/pdf_extraction_job.rb @@ -1,4 +1,7 @@ class Captain::Documents::PdfExtractionJob < ApplicationJob + retry_on ActiveStorage::FileNotFoundError, attempts: 3, wait: 2.seconds, on: :perform + retry_on Faraday::BadRequestError, attempts: 3, wait: 2.seconds, on: :perform + queue_as :low def perform(document) @@ -7,8 +10,6 @@ class Captain::Documents::PdfExtractionJob < ApplicationJob initialize_document_processing(document) result = extract_pdf_content(document) process_extraction_result(document, result) - rescue Captain::Tools::PdfExtractionService::ExtractionError => e - handle_pdf_extraction_error(document, e) end private diff --git a/enterprise/app/services/captain/tools/pdf_extraction_service.rb b/enterprise/app/services/captain/tools/pdf_extraction_service.rb index af50e3a67..33dabac97 100644 --- a/enterprise/app/services/captain/tools/pdf_extraction_service.rb +++ b/enterprise/app/services/captain/tools/pdf_extraction_service.rb @@ -7,7 +7,6 @@ class Captain::Tools::PdfExtractionService include Captain::Tools::PdfExtractionService::SourceHandler include Captain::Tools::PdfExtractionService::BlobHandler include Captain::Tools::PdfExtractionService::TextProcessor - include Captain::Tools::PdfExtractionService::ErrorHandler class ExtractionError < StandardError; end @@ -29,7 +28,7 @@ class Captain::Tools::PdfExtractionService validation_result = validate_pdf_source return validation_result unless validation_result[:success] - extract_pdf_with_error_handling + process_pdf_extraction end private diff --git a/enterprise/app/services/captain/tools/pdf_extraction_service/error_handler.rb b/enterprise/app/services/captain/tools/pdf_extraction_service/error_handler.rb deleted file mode 100644 index d85033a46..000000000 --- a/enterprise/app/services/captain/tools/pdf_extraction_service/error_handler.rb +++ /dev/null @@ -1,44 +0,0 @@ -module Captain::Tools::PdfExtractionService::ErrorHandler - private - - def extract_pdf_with_error_handling - process_pdf_extraction - rescue PDF::Reader::MalformedPDFError => e - handle_malformed_pdf_error(e) - rescue PDF::Reader::UnsupportedFeatureError => e - handle_unsupported_feature_error(e) - rescue Down::TimeoutError => e - handle_timeout_error(e) - rescue StandardError => e - handle_general_error(e) - end - - def handle_malformed_pdf_error(error) - Rails.logger.error "Malformed PDF (#{pdf_source_type}): #{error.message}" - failure_response(['Invalid or corrupted PDF format']) - end - - def handle_unsupported_feature_error(error) - Rails.logger.error "Unsupported PDF feature (#{pdf_source_type}): #{error.message}" - failure_response(['PDF contains unsupported features']) - end - - def handle_timeout_error(error) - Rails.logger.error "PDF download timeout (#{pdf_source_type}): #{error.message}" - failure_response(['PDF download timed out']) - end - - def handle_general_error(error) - Rails.logger.error "PDF extraction error (#{pdf_source_type}): #{error.message}" - Rails.logger.error error.backtrace.join("\n") - failure_response(['Failed to process PDF']) - end - - def success_response(content) - { success: true, content: content } - end - - def failure_response(errors) - { success: false, errors: errors } - end -end \ No newline at end of file diff --git a/enterprise/app/services/captain/tools/pdf_validation_concern.rb b/enterprise/app/services/captain/tools/pdf_validation_concern.rb index ff613f2c6..5c53d2444 100644 --- a/enterprise/app/services/captain/tools/pdf_validation_concern.rb +++ b/enterprise/app/services/captain/tools/pdf_validation_concern.rb @@ -20,27 +20,7 @@ module Captain::Tools::PdfValidationConcern end def validate_url_format - uri = parse_and_validate_uri - validate_url_scheme(uri) - validate_url_length - end - - def parse_and_validate_uri URI.parse(pdf_source) - rescue URI::InvalidURIError - raise StandardError, 'Malformed URL' - end - - def validate_url_scheme(uri) - return if %w[http https].include?(uri.scheme) - - raise StandardError, 'Invalid URL scheme' - end - - def validate_url_length - return if pdf_source.length <= 2000 - - raise StandardError, 'URL too long' end def validate_file_type_and_size