RED-6420: Added errorCode to file, reset processingErrorCounter on rules change
This commit is contained in:
parent
a5cbae2833
commit
849506eb2e
@ -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()
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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]"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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;
|
||||
@ -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
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user