diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java index e2efe83b..500545e8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java @@ -58,7 +58,7 @@ public class AnalyzeService { private final ImportedRedactionService importedRedactionService; - @Timed("analyzeDocumentStructure") + @Timed("redactmanager_analyzeDocumentStructure") public AnalyzeResult analyzeDocumentStructure(StructureAnalyzeRequest analyzeRequest) { long startTime = System.currentTimeMillis(); @@ -107,7 +107,7 @@ public class AnalyzeService { } - @Timed("reanalyze") + @Timed("redactmanager_reanalyze") @SneakyThrows public AnalyzeResult reanalyze(@RequestBody AnalyzeRequest analyzeRequest) { @@ -121,14 +121,10 @@ public class AnalyzeService { return analyze(analyzeRequest); } -// var dis = System.currentTimeMillis(); DictionaryIncrement dictionaryIncrement = dictionaryService.getDictionaryIncrements(analyzeRequest.getDossierTemplateId(), new DictionaryVersion(redactionLog.getDictionaryVersion(), redactionLog.getDossierDictionaryVersion()), analyzeRequest.getDossierId()); -// log.info("Dictionary Increment time time: {} ms", (System.currentTimeMillis() - dis)); -// var fis = System.currentTimeMillis(); Set sectionsToReanalyse = !analyzeRequest.getSectionsToReanalyse() .isEmpty() ? analyzeRequest.getSectionsToReanalyse() : findSectionsToReanalyse(dictionaryIncrement, redactionLog, text, analyzeRequest); -// log.info("Find sections time: {} ms", (System.currentTimeMillis() - fis)); if (sectionsToReanalyse.isEmpty()) { return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true); @@ -146,36 +142,26 @@ public class AnalyzeService { .filter(sectionText -> sectionsToReanalyse.contains(sectionText.getSectionNumber())) .collect(Collectors.toList()); -// long kis = System.currentTimeMillis(); KieContainer kieContainer = droolsExecutionService.updateRules(analyzeRequest.getDossierTemplateId()); -// log.info("Kie time: {} ms", (System.currentTimeMillis() - kis)); -// long dds = System.currentTimeMillis(); Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); -// log.info("Dict Time time: {} ms", (System.currentTimeMillis() - dds)); -// long pis = System.currentTimeMillis(); PageEntities pageEntities = entityRedactionService.findEntities(dictionary, reanalysisSections, kieContainer, analyzeRequest, nerEntities); -// log.info("Find Entities time: {}", (System.currentTimeMillis() - pis)); -// long crs = System.currentTimeMillis(); var newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest.getDossierTemplateId()); -// log.info("Create Redaction-log time: {} ms", (System.currentTimeMillis() - crs)); -// long prs = System.currentTimeMillis(); + var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId(), analyzeRequest.getFileId(), newRedactionLogEntries, false); -// log.info("Process imports time: {} ms", (System.currentTimeMillis() - prs)); + redactionLog.getRedactionLogEntry() .removeIf(entry -> sectionsToReanalyse.contains(entry.getSectionNumber()) && !entry.getType() .equals(IMPORTED_REDACTION_TYPE)); redactionLog.getRedactionLogEntry().addAll(importedRedactionFilteredEntries); -// var fls = System.currentTimeMillis(); - // log.info("Finalize time: {} ms", (System.currentTimeMillis() - fls)); return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true); } - @Timed("analyze") + @Timed("redactmanager_analyze") public AnalyzeResult analyze(AnalyzeRequest analyzeRequest) { long startTime = System.currentTimeMillis(); @@ -208,6 +194,7 @@ public class AnalyzeService { } + @Timed("redactmanager_findSectionsToReanalyse") private Set findSectionsToReanalyse(DictionaryIncrement dictionaryIncrement, RedactionLog redactionLog, Text text, AnalyzeRequest analyzeRequest) { @@ -225,7 +212,6 @@ public class AnalyzeService { } } -// long ss = System.currentTimeMillis(); var dictionaryIncrementsSearch = new SearchImplementation(dictionaryIncrement.getValues().stream() .map(DictionaryIncrementValue::getValue).collect(Collectors.toList()), true); @@ -237,7 +223,6 @@ public class AnalyzeService { } } -// log.info("Section Find time: {}", (System.currentTimeMillis() - ss)); log.info("Should reanalyze {} sections for request: {}, took: {}", sectionsToReanalyse.size(), analyzeRequest, System.currentTimeMillis() - start); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java index 418567a0..8644f0a1 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java @@ -5,9 +5,12 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ty import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary; import com.iqser.red.service.redaction.v1.server.redaction.model.*; + import feign.FeignException; +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.SerializationUtils; import org.springframework.stereotype.Service; @@ -17,7 +20,6 @@ import java.util.List; import java.util.*; import java.util.stream.Collectors; - @Slf4j @Service @RequiredArgsConstructor @@ -29,6 +31,7 @@ public class DictionaryService { private final Map dictionariesByDossier = new HashMap<>(); + @Timed("redactmanager_updateDictionary") public DictionaryVersion updateDictionary(String dossierTemplateId, String dossierId) { log.info("Updating dictionary data for dossierTemplate {} and dossier {}", dossierTemplateId, dossierId); @@ -44,11 +47,16 @@ public class DictionaryService { updateDictionaryEntry(dossierTemplateId, dossierDictionaryVersion, getVersion(dossierDictionary), dossierId); } - return DictionaryVersion.builder().dossierTemplateVersion(dossierTemplateDictionaryVersion).dossierVersion(dossierDictionaryVersion).build(); + return DictionaryVersion.builder() + .dossierTemplateVersion(dossierTemplateDictionaryVersion) + .dossierVersion(dossierDictionaryVersion) + .build(); } - public DictionaryIncrement getDictionaryIncrements(String dossierTemplateId, DictionaryVersion fromVersion, String dossierId) { + @Timed("redactmanager_getDictionaryIncrements") + public DictionaryIncrement getDictionaryIncrements(String dossierTemplateId, DictionaryVersion fromVersion, + String dossierId) { DictionaryVersion version = updateDictionary(dossierTemplateId, dossierId); @@ -102,58 +110,69 @@ public class DictionaryService { try { DictionaryRepresentation dictionaryRepresentation = new DictionaryRepresentation(); - var typeResponse = dossierId == null ? dictionaryClient.getAllTypesForDossierTemplate(dossierTemplateId, false) - : dictionaryClient.getAllTypesForDossier(dossierId, false); + var typeResponse = dossierId == null ? dictionaryClient.getAllTypesForDossierTemplate(dossierTemplateId, false) : dictionaryClient.getAllTypesForDossier(dossierId, false); if (CollectionUtils.isNotEmpty(typeResponse)) { - List dictionary = typeResponse - .stream() - .map(t -> { + List dictionary = typeResponse.stream().map(t -> { - Optional oldModel; - if (dossierId == null) { - var representation = dictionariesByDossierTemplate.get(dossierTemplateId); - oldModel = representation != null ? representation.getDictionary().stream().filter(f -> f.getType().equals(t.getType())).findAny() : Optional.empty(); - } else { - var representation = dictionariesByDossier.get(dossierId); - oldModel = representation != null ? representation.getDictionary().stream().filter(f -> f.getType().equals(t.getType())).findAny() : Optional.empty(); - } + Optional oldModel; + if (dossierId == null) { + var representation = dictionariesByDossierTemplate.get(dossierTemplateId); + oldModel = representation != null ? representation.getDictionary() + .stream() + .filter(f -> f.getType().equals(t.getType())) + .findAny() : Optional.empty(); + } else { + var representation = dictionariesByDossier.get(dossierId); + oldModel = representation != null ? representation.getDictionary() + .stream() + .filter(f -> f.getType().equals(t.getType())) + .findAny() : Optional.empty(); + } - Set entries = new HashSet<>(); - Set falsePositives = new HashSet<>(); - Set falseRecommendations = new HashSet<>(); + Set entries = new HashSet<>(); + Set falsePositives = new HashSet<>(); + Set falseRecommendations = new HashSet<>(); - DictionaryEntries newEntries = getEntries(t.getId(), currentVersion); + DictionaryEntries newEntries = getEntries(t.getId(), currentVersion); - var newValues = newEntries.getEntries().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet()); - var newFalsePositivesValues = newEntries.getFalsePositives().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet()); - var newFalseRecommendationsValues = newEntries.getFalseRecommendations().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet()); + var newValues = newEntries.getEntries() + .stream() + .map(DictionaryEntry::getValue) + .collect(Collectors.toSet()); + var newFalsePositivesValues = newEntries.getFalsePositives() + .stream() + .map(DictionaryEntry::getValue) + .collect(Collectors.toSet()); + var newFalseRecommendationsValues = newEntries.getFalseRecommendations() + .stream() + .map(DictionaryEntry::getValue) + .collect(Collectors.toSet()); + oldModel.ifPresent(oldDictionaryModel -> { - oldModel.ifPresent(oldDictionaryModel -> { + }); + // add old entries from existing DictionaryModel + oldModel.ifPresent(dictionaryModel -> entries.addAll(dictionaryModel.getEntries() + .stream() + .filter(f -> !newValues.contains(f.getValue())) + .collect(Collectors.toList()))); + oldModel.ifPresent(dictionaryModel -> falsePositives.addAll(dictionaryModel.getFalsePositives() + .stream() + .filter(f -> !newFalsePositivesValues.contains(f.getValue())) + .collect(Collectors.toList()))); + oldModel.ifPresent(dictionaryModel -> falseRecommendations.addAll(dictionaryModel.getFalseRecommendations() + .stream() + .filter(f -> !newFalseRecommendationsValues.contains(f.getValue())) + .collect(Collectors.toList()))); - }); - // add old entries from existing DictionaryModel - oldModel.ifPresent(dictionaryModel -> entries.addAll(dictionaryModel.getEntries().stream().filter( - f -> !newValues.contains(f.getValue())).collect(Collectors.toList()) - )); - oldModel.ifPresent(dictionaryModel -> falsePositives.addAll(dictionaryModel.getFalsePositives().stream().filter( - f -> !newFalsePositivesValues.contains(f.getValue())).collect(Collectors.toList()) - )); - oldModel.ifPresent(dictionaryModel -> falseRecommendations.addAll(dictionaryModel.getFalseRecommendations().stream().filter( - f -> !newFalseRecommendationsValues.contains(f.getValue())).collect(Collectors.toList()) - )); + // Add Increments + entries.addAll(newEntries.getEntries()); + falsePositives.addAll(newEntries.getFalsePositives()); + falseRecommendations.addAll(newEntries.getFalseRecommendations()); - // Add Increments - entries.addAll(newEntries.getEntries()); - falsePositives.addAll(newEntries.getFalsePositives()); - falseRecommendations.addAll(newEntries.getFalseRecommendations()); - - return new DictionaryModel(t.getType(), t.getRank(), convertColor(t.getHexColor()), t.isCaseInsensitive(), t - .isHint(), entries, falsePositives, falseRecommendations, dossierId != null); - }) - .sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed()) - .collect(Collectors.toList()); + return new DictionaryModel(t.getType(), t.getRank(), convertColor(t.getHexColor()), t.isCaseInsensitive(), t.isHint(), entries, falsePositives, falseRecommendations, dossierId != null); + }).sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed()).collect(Collectors.toList()); dictionary.forEach(dm -> dictionaryRepresentation.getLocalAccessMap().put(dm.getType(), dm)); @@ -193,11 +212,11 @@ public class DictionaryService { falsePositives.forEach(entry -> entry.setValue(entry.getValue().toLowerCase(Locale.ROOT))); falseRecommendations.forEach(entry -> entry.setValue(entry.getValue().toLowerCase(Locale.ROOT))); } + log.info("Dictionary update returned {} entries {} falsePositives and {} falseRecommendations for type {}", entries.size(), falsePositives.size(), falseRecommendations.size(), type.getType()); return new DictionaryEntries(entries, falsePositives, falseRecommendations); } - private float[] convertColor(String hex) { Color color = Color.decode(hex); @@ -225,6 +244,7 @@ public class DictionaryService { } + @Timed("redactmanager_getDeepCopyDictionary") public Dictionary getDeepCopyDictionary(String dossierTemplateId, String dossierId) { List copy = new ArrayList<>(); @@ -244,7 +264,12 @@ public class DictionaryService { dossierDictionaryVersion = dossierRepresentation.getDictionaryVersion(); } - return new Dictionary(copy.stream().sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed()).collect(Collectors.toList()), DictionaryVersion.builder().dossierTemplateVersion(dossierTemplateRepresentation.getDictionaryVersion()).dossierVersion(dossierDictionaryVersion).build()); + return new Dictionary(copy.stream() + .sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed()) + .collect(Collectors.toList()), DictionaryVersion.builder() + .dossierTemplateVersion(dossierTemplateRepresentation.getDictionaryVersion()) + .dossierVersion(dossierDictionaryVersion) + .build()); } @@ -255,10 +280,12 @@ public class DictionaryService { private Long getVersion(DictionaryRepresentation dictionaryRepresentation) { + if (dictionaryRepresentation == null) { return null; } else { return dictionaryRepresentation.getDictionaryVersion(); } } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java index 39893057..5c61a752 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java @@ -3,6 +3,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.service; import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException; import com.iqser.red.service.redaction.v1.server.redaction.model.Section; + +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.kie.api.KieServices; @@ -41,6 +43,7 @@ public class DroolsExecutionService { } + @Timed("redactmanager_executeRules") public Section executeRules(KieContainer kieContainer, Section section) { KieSession kieSession = kieContainer.newKieSession(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java index 7426cc2d..f7b82c49 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java @@ -37,6 +37,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.utils.FindEntityDetai import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder; import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -50,6 +51,7 @@ public class EntityRedactionService { private final SurroundingWordsService surroundingWordsService; + public PageEntities findEntities(Dictionary dictionary, List sectionTexts, KieContainer kieContainer, AnalyzeRequest analyzeRequest, NerEntities nerEntities) { @@ -236,6 +238,7 @@ public class EntityRedactionService { } + @Timed("redactmanager_findEntities") private Entities findEntities(SearchableText searchableText, String headline, int sectionNumber, Dictionary dictionary, boolean local, NerEntities nerEntities, List cellStarts, ManualRedactions manualRedactions) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java index c65b6780..358c9ce8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java @@ -11,6 +11,7 @@ import com.iqser.red.service.redaction.v1.model.Rectangle; import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; @Service @@ -23,6 +24,7 @@ public class ImportedRedactionService { private final RedactionStorageService redactionStorageService; + @Timed("redactmanager_processImportedRedactions") public List processImportedRedactions(String dossierTemplateId, String dossierId, String fileId, List redactionLogEntries, boolean addImportedRedactions) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java index 4ba2846b..c53484b5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionSurroundingTextService.java @@ -24,6 +24,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.utils.FindEntityDetai import com.iqser.red.service.redaction.v1.server.redaction.utils.SearchImplementation; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -35,7 +36,7 @@ public class ManualRedactionSurroundingTextService { private final RedactionStorageService redactionStorageService; private final SurroundingWordsService surroundingWordsService; - + @Timed("redactmanager_SurroundingTextAnalysis") public AnalyzeResult addSurroundingText(String dossierId, String fileId, ManualRedactions manualRedactions) { long startTime = System.currentTimeMillis(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java index 5f75bdce..0358a694 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java @@ -2,6 +2,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.service; import com.iqser.red.service.redaction.v1.model.*; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; + +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -18,6 +20,7 @@ public class RedactionChangeLogService { private final RedactionStorageService redactionStorageService; + @Timed("redactmanager_computeChanges") public RedactionLogChanges computeChanges(String dossierId, String fileId, RedactionLog currentRedactionLog, int analysisNumber) { long start = System.currentTimeMillis(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java index 1cc07e89..79aa82cf 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java @@ -22,6 +22,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.Image; import com.iqser.red.service.redaction.v1.server.redaction.model.PageEntities; import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder; +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -33,6 +34,7 @@ public class RedactionLogCreatorService { private final DictionaryService dictionaryService; + @Timed("redactmanager_createRedactionLog") public List createRedactionLog(PageEntities pageEntities, int numberOfPages, String dossierTemplateId) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java index 66ef638f..c8b6b4dc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java @@ -12,6 +12,8 @@ import com.iqser.red.service.redaction.v1.model.Rectangle; import com.iqser.red.service.redaction.v1.model.*; import com.iqser.red.service.redaction.v1.server.exception.NotFoundException; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; + +import io.micrometer.core.annotation.Timed; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -34,6 +36,8 @@ public class RedactionLogMergeService { private final RedactionStorageService redactionStorageService; + + @Timed("redactmanager_getMergedRedactionLog") public RedactionLog provideRedactionLog(RedactionRequest redactionRequest) { log.debug("Requested preview for: {}", redactionRequest); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java index b0d398cf..51c27c77 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SurroundingWordsService.java @@ -4,6 +4,8 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary; import com.iqser.red.service.redaction.v1.server.redaction.model.Entity; import com.iqser.red.service.redaction.v1.server.redaction.model.SearchableText; import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; + +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -19,6 +21,7 @@ public class SurroundingWordsService { private final RedactionServiceSettings redactionServiceSettings; + @Timed("redactmanager_addSurroundingText") public void addSurroundingText(Set entities, SearchableText searchableText, Dictionary dictionary) { if (entities.isEmpty()) { @@ -39,6 +42,7 @@ public class SurroundingWordsService { } + @Timed("redactmanager_addSurroundingText_tables") public void addSurroundingText(Set entities, SearchableText searchableText, Dictionary dictionary, List cellstarts) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/EntitySearchUtils.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/EntitySearchUtils.java index e718b33d..ffa482b2 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/EntitySearchUtils.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/EntitySearchUtils.java @@ -3,6 +3,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.utils; import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary; import com.iqser.red.service.redaction.v1.server.redaction.model.*; + +import io.micrometer.core.annotation.Timed; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java index a7772bd6..4a11aea3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java @@ -12,10 +12,13 @@ import com.iqser.red.service.redaction.v1.server.client.model.NerEntities; import com.iqser.red.service.redaction.v1.server.exception.NotFoundException; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; + +import io.micrometer.core.annotation.Timed; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; + import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; @@ -41,21 +44,6 @@ public class RedactionStorageService { } - @SneakyThrows - public void storeObject(String dossierId, String fileId, FileType fileType, Object any) { - var baos = new ByteArrayOutputStream(); - try { - dslJson.serialize(any, baos); - } catch (com.dslplatform.json.SerializationException e){ - // Fails on file 49 Cyprodinil - EU AIR3 - MCA Section 8 Supplement - Ecotoxicological studies on the active substance.pdf - var bytes = objectMapper.writeValueAsBytes(any); - storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, fileType), bytes); - dslJson.newWriter(); - return; - } - storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, fileType), baos.toByteArray()); - } - @SneakyThrows public void storeObject(String dossierId, String fileId, FileType fileType, InputStream inputStream) { @@ -63,6 +51,33 @@ public class RedactionStorageService { } + @SneakyThrows + @Timed("redactmanager_storeObject") + public void storeObject(String dossierId, String fileId, FileType fileType, Object any) { + + var bytes = serializeObject(any); + storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, fileType), bytes); + } + + + @SneakyThrows + @Timed("redactmanager_serializeObject") + private byte[] serializeObject(Object any) { + + try { + var baos = new ByteArrayOutputStream(); + dslJson.serialize(any, baos); + return baos.toByteArray(); + } catch (com.dslplatform.json.SerializationException e) { + // Fails on file 49 Cyprodinil - EU AIR3 - MCA Section 8 Supplement - Ecotoxicological studies on the active substance.pdf + var bytes = objectMapper.writeValueAsBytes(any); + dslJson.newWriter(); + return bytes; + } + } + + + @Timed("redactmanager_getImportedRedactions") public ImportedRedactions getImportedRedactions(String dossierId, String fileId) { InputStreamResource inputStreamResource; @@ -73,6 +88,13 @@ public class RedactionStorageService { return null; } + return deserializeImportedRedactions(inputStreamResource); + } + + + @Timed("redactmanager_deserializeImportedRedactions") + private ImportedRedactions deserializeImportedRedactions(InputStreamResource inputStreamResource) { + try { return dslJson.deserialize(ImportedRedactions.class, inputStreamResource.getInputStream()); } catch (IOException e) { @@ -81,6 +103,7 @@ public class RedactionStorageService { } + @Timed("redactmanager_getRedactionLog") public RedactionLog getRedactionLog(String dossierId, String fileId) { InputStreamResource inputStreamResource; @@ -91,6 +114,13 @@ public class RedactionStorageService { return null; } + return deserializeRedactionLog(inputStreamResource); + } + + + @Timed("redactmanager_deserializeRedactionLog") + private RedactionLog deserializeRedactionLog(InputStreamResource inputStreamResource) { + try { return dslJson.deserialize(RedactionLog.class, inputStreamResource.getInputStream()); } catch (IOException e) { @@ -99,6 +129,7 @@ public class RedactionStorageService { } + @Timed("redactmanager_deserializeRedactionLog") public Text getText(String dossierId, String fileId) { InputStreamResource inputStreamResource; @@ -109,6 +140,13 @@ public class RedactionStorageService { return null; } + return deserializeText(inputStreamResource); + } + + + @Timed("redactmanager_deserializeText") + private Text deserializeText(InputStreamResource inputStreamResource) { + try { return dslJson.deserialize(Text.class, inputStreamResource.getInputStream()); } catch (IOException e) { @@ -117,6 +155,7 @@ public class RedactionStorageService { } + @Timed("redactmanager_getNerEntities") public NerEntities getNerEntities(String dossierId, String fileId) { InputStreamResource inputStreamResource; @@ -126,6 +165,13 @@ public class RedactionStorageService { throw new NotFoundException("NER Entities are not available."); } + return deserializeNerEntities(inputStreamResource); + } + + + @Timed("redactmanager_deserializeNerEntities") + private NerEntities deserializeNerEntities(InputStreamResource inputStreamResource) { + try { return dslJson.deserialize(NerEntities.class, inputStreamResource.getInputStream()); } catch (IOException e) { @@ -134,15 +180,27 @@ public class RedactionStorageService { } + @Timed("redactmanager_getSectionGrid") public SectionGrid getSectionGrid(String dossierId, String fileId) { + InputStreamResource inputStreamResource; try { - var sectionGrid = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.SECTION_GRID)); - return dslJson.deserialize(SectionGrid.class, sectionGrid.getInputStream()); + inputStreamResource = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.SECTION_GRID)); } catch (StorageObjectDoesNotExist e) { throw new NotFoundException("Section Grid is not available."); + } + + return deserializeSectionGrid(inputStreamResource); + } + + + @Timed("redactmanager_deserializeSectionGrid") + private SectionGrid deserializeSectionGrid(InputStreamResource inputStreamResource) { + + try { + return dslJson.deserialize(SectionGrid.class, inputStreamResource.getInputStream()); } catch (IOException e) { - throw new RuntimeException("Could not convert RedactionLog", e); + throw new RuntimeException("Could not convert SectionGrid", e); } }