RED-6420: Added errorCode to file, reset processingErrorCounter on rules change

This commit is contained in:
Dominique Eifländer 2024-11-05 11:39:16 +01:00
parent a5cbae2833
commit 849506eb2e
11 changed files with 69 additions and 10 deletions

View File

@ -26,6 +26,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.FileU
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.RulesValidationService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.RulesValidationMapper;
import com.iqser.red.service.persistence.service.v1.api.external.resource.RulesResource;
@ -52,6 +53,7 @@ public class RulesController implements RulesResource {
private final RulesPersistenceService rulesPersistenceService;
private final RulesValidationService rulesValidationService;
private final AuditPersistenceService auditPersistenceService;
private final FileStatusPersistenceService fileStatusPersistenceService;
@Override
@ -75,6 +77,7 @@ public class RulesController implements RulesResource {
}
if (!rules.isDryRun()) {
rulesPersistenceService.setRules(rulesUploadRequest.getRules(), rulesUploadRequest.getDossierTemplateId(), rulesUploadRequest.getRuleFileType());
fileStatusPersistenceService.resetErrorCounter(rulesUploadRequest.getDossierTemplateId());
}
auditPersistenceService.audit(AuditRequest.builder()

View File

@ -41,7 +41,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP
new FileErrorInfo("preprocessing failed",
MessagingConfiguration.PRE_PROCESSING_DLQ,
"pdftron-service",
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)));
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null));
}
@ -97,7 +97,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP
new FileErrorInfo("ocr failed",
MessagingConfiguration.OCR_DLQ,
"ocr-service",
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)));
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null));
}
@ -127,7 +127,7 @@ public class FileStatusProcessingUpdateInternalController implements FileStatusP
new FileErrorInfo("indexing failed",
MessagingConfiguration.INDEXING_DQL,
"search-service",
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)));
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), null));
}

View File

@ -10,6 +10,7 @@ import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONIntegerSetConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ErrorCode;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
@ -198,6 +199,11 @@ public class FileEntity {
@Column
private OffsetDateTime errorTimestamp;
@Column
@Enumerated(EnumType.STRING)
private ErrorCode errorCode;
@ElementCollection(fetch = FetchType.EAGER)
private List<FileEntityComponentMappingVersionEntity> componentMappingVersions;

View File

@ -210,12 +210,13 @@ public class FileStatusPersistenceService {
public void updateStatusErrorInfo(String fileId, FileErrorInfo fileErrorInfo) {
if (fileErrorInfo == null) {
fileRepository.updateStatusErrorInfo(fileId, null, null, null, null);
fileRepository.updateStatusErrorInfo(fileId, null, null, null, null, null);
} else {
fileRepository.updateStatusErrorInfo(fileId,
fileErrorInfo.getCause().substring(0, Math.min(fileErrorInfo.getCause().length(), 255)),
fileErrorInfo.getQueue(),
fileErrorInfo.getService(),
fileErrorInfo.getErrorCode(),
fileErrorInfo.getTimestamp());
}
@ -230,7 +231,7 @@ public class FileStatusPersistenceService {
}
if (processingStatus == ProcessingStatus.PROCESSED) {
// reset the error info
fileRepository.updateStatusErrorInfo(fileId, null, null, null, null);
fileRepository.updateStatusErrorInfo(fileId, null, null, null, null, null);
// In case the file is updated to "processed", "lastProcessed" date should be updated to "now"
fileRepository.updateProcessingStatus(fileId,
processingStatus,
@ -620,6 +621,11 @@ public class FileStatusPersistenceService {
fileRepository.updateFileModificationDate(fileId, fileManipulationDate);
}
@Transactional
public void resetErrorCounter(String dossierTemplateId){
fileRepository.updateErrorCounter(dossierTemplateId, 0);
}
@Transactional
public void updateHasHighlights(String fileId, boolean hasHighlights) {

View File

@ -13,6 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FilePageCountsProjection;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FileProcessingStatusProjection;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FileWorkflowStatusProjection;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ErrorCode;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
@ -121,12 +122,20 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Param("processingErrorCounter") int processingErrorCounter);
@Modifying(clearAutomatically = true)
@Query("update FileEntity f set f.processingErrorCounter = :processingErrorCounter "
+ "where f.dossierId in (select fe.dossierId from FileEntity fe inner join DossierEntity d on d.id = fe.dossierId where d.dossierTemplateId = :dossierTemplateId) and f.processingStatus = 'ERROR'")
void updateErrorCounter(@Param("dossierTemplateId") String dossierTemplateId,
@Param("processingErrorCounter") int processingErrorCounter);
@Modifying
@Query("update FileEntity f set f.errorCause = :cause, f.errorQueue = :queue, f.errorService = :service, f.errorTimestamp = :timestamp " + "where f.id = :fileId")
@Query("update FileEntity f set f.errorCause = :cause, f.errorQueue = :queue, f.errorService = :service, f.errorTimestamp = :timestamp, f.errorCode = :errorCode where f.id = :fileId")
void updateStatusErrorInfo(@Param("fileId") String fileId,
@Param("cause") String cause,
@Param("queue") String queue,
@Param("service") String service,
@Param("errorCode") ErrorCode errorCode,
@Param("timestamp") OffsetDateTime timestamp);

View File

@ -218,4 +218,6 @@ databaseChangeLog:
- include:
file: db/changelog/tenant/141-add-overwrite-file-counter-to-file.yaml
- include:
file: db/changelog/tenant/143-modify-download-redaction-file-status-details.yaml
file: db/changelog/tenant/143-modify-download-redaction-file-status-details.yaml
- include:
file: db/changelog/tenant/144-add-error-code-to-file.yaml

View File

@ -0,0 +1,11 @@
databaseChangeLog:
- changeSet:
id: 144-add-error-code-to-file
author: dom
changes:
- addColumn:
columns:
- column:
name: error_code
type: VARCHAR(255)
tableName: file

View File

@ -367,7 +367,7 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
IOUtils.toByteArray(new ClassPathResource("files/csv/fileattributes_missing_quotation_mark.csv").getInputStream()));
result = assertThrows(FeignException.class, () -> uploadClient.upload(missingQuotation, dossier.getId(), false, false));
assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]"));
assertTrue(result.getMessage().contains("Invalid CSV file format: Unterminated quoted field at end of CSV line. Beginning of lost text: [4.636.0,4.363.0,4.363.0\\n]") || result.getMessage().contains("Invalid CSV file format: Unterminiertes Anführungszeichen am Ende einer CSV-Zeile. Anfang des verlorenen Textes: [4.636.0,4.363.0,4.363.0\\n]"));
}

View File

@ -1,4 +1,4 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
package com.iqser.red.service.peristence.v1.server.integration.tests.component;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@ -25,7 +25,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.FileSer
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLogEntry;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentsOverrides;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.RevertOverrideRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.AddFileRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v2.api.external.model.Component;
import com.iqser.red.service.persistence.service.v2.api.external.model.ComponentValue;

View File

@ -0,0 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file;
public enum ErrorCode {
RULES_EXECUTION_TIMEOUT, LOCKED_RULES, MISSING_DOCX_PDFTRON_LICENSE
}

View File

@ -18,6 +18,7 @@ public class FileErrorInfo {
private String queue;
private String service;
private OffsetDateTime timestamp;
private ErrorCode errorCode;
public FileErrorInfo(String cause, String queue, String service) {
@ -28,4 +29,21 @@ public class FileErrorInfo {
this.timestamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
}
public FileErrorInfo(String cause, String queue, String service, OffsetDateTime timestamp) {
this.cause = cause;
this.queue = queue;
this.service = service;
this.timestamp = timestamp;
}
public FileErrorInfo(String cause, String queue, String service, ErrorCode errorCode) {
this.cause = cause;
this.queue = queue;
this.service = service;
this.timestamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
this.errorCode = errorCode;
}
}