diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java index 309055d9a..47f20719c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java @@ -25,6 +25,7 @@ import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.imdg.validation.LogPrefixId; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; @@ -79,6 +80,7 @@ public class ValidationConfig { context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_AccountBalance, imdgAccountBalance); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, ExecutionDepositValidationRule.ClearingIsAllowed, ExecutionDepositValidationRule.AccountIsNotBlocked, @@ -96,6 +98,7 @@ public class ValidationConfig { context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, STradesValidationRule.SecurityPresentFond, STradesValidationRule.CompanyPresent, @@ -113,6 +116,7 @@ public class ValidationConfig { context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, STradesValidationRule.SecurityPresentDeposit, STradesValidationRule.CompanyPresent, @@ -132,6 +136,7 @@ public class ValidationConfig { context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, RegistryStep3ValidationRule.ClearingAvailable, RegistryStep3ValidationRule.AccountActive, @@ -146,6 +151,7 @@ public class ValidationConfig { context.setValidatedObject(sDf01); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, Sdf01ValidationRule.CompanyPresent, Sdf01ValidationRule.AccountPresent, @@ -163,6 +169,7 @@ public class ValidationConfig { context.setValidatedObject(sDf57); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, Sdf57ValidationRule.CompanyDebOrCredPresent, Sdf57ValidationRule.AccountDebOrCredPresent, @@ -178,6 +185,7 @@ public class ValidationConfig { context.setValidatedObject(sDf01); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, Sdf01NewValidationRule.CompanyPresent, Sdf01NewValidationRule.AccountType, @@ -195,6 +203,7 @@ public class ValidationConfig { context.setValidatedObject(sDf08); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, Sdf08NewValidationRule.AccountPresent ); @@ -211,6 +220,7 @@ public class ValidationConfig { context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry); context.addImdg(IMDGDistributedNames.Map_Session, imdgSession); + context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, Sdf06NewValidationRule.CompanySymbolAndCompanyPresent, Sdf06NewValidationRule.AccountPresent, diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java index 2e7242a0f..8e1ea71a4 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java @@ -6,11 +6,13 @@ import ru.spcex.platform.utils.validation.IValidatorContext; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; public class ImdgValidationContext implements IValidatorContext { private final Map> imdgs; private final Map, Object> storedObjects; private T validatedObject; + private Function logPrefix; public ImdgValidationContext() { this.imdgs = new HashMap<>(); @@ -29,6 +31,18 @@ public class ImdgValidationContext implements IValidatorContext { return validatedObject; } + @Override + public String logPrefix() { + try { + if (logPrefix == null) { + return ""; + } + return logPrefix.apply(validatedObject); + } catch (Throwable e) { + return "(logPrefix) "; + } + } + /** * !!!не использовать один Enum в разных местах */ @@ -51,4 +65,8 @@ public class ImdgValidationContext implements IValidatorContext { } return (Imdg) imdg; } + + public void setLogPrefix(Function logPrefix) { + this.logPrefix = logPrefix; + } } diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/LogPrefixId.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/LogPrefixId.java new file mode 100644 index 000000000..8cc39dfd9 --- /dev/null +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/LogPrefixId.java @@ -0,0 +1,22 @@ +package ru.spcex.platform.imdg.validation; + +import ru.spcex.platform.classes.base.interfaces.WithId; + +import java.util.function.Function; + +public class LogPrefixId implements Function { + + public static final LogPrefixId INSTANCE = new LogPrefixId(); + + @Override + public String apply(WithId withId) { + if (withId != null && withId.getId() != null) + return "(#id=%d) ".formatted(withId.getId()); + else if (withId != null && withId.getId() == null) + return "(#id=null) "; + else if (withId == null) { + return "(obj=null) "; + } + return ""; + } +} diff --git a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/IValidatorContext.java b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/IValidatorContext.java index 7d8ff27c2..151e8f4a0 100644 --- a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/IValidatorContext.java +++ b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/IValidatorContext.java @@ -4,4 +4,8 @@ public interface IValidatorContext { default S getStoredObject(Enum storedObject) { throw new UnsupportedOperationException("not implemented"); } + + default String logPrefix() { + return ""; + } } diff --git a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/ValidatorImpl.java b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/ValidatorImpl.java index 7271a72af..416e854e2 100644 --- a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/ValidatorImpl.java +++ b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/validation/ValidatorImpl.java @@ -58,9 +58,9 @@ public class ValidatorImpl implements IValidator { validationError = rule.validate(context); validationError.ifPresent(errors::add); if (validationError.isPresent()) { - log.debug("validating stage: {} error", rule.ruleName()); + log.debug("{}validating stage: {} error", context.logPrefix(), rule.ruleName()); } else { - log.debug("validating stage: {} complete", rule.ruleName()); + log.debug("{}validating stage: {} complete", context.logPrefix(), rule.ruleName()); } } } @@ -75,17 +75,17 @@ public class ValidatorImpl implements IValidator { public Optional tillFirstError() { Instant begin = Instant.now(); for (IValidationRule rule : rules) { - log.debug("validating stage: {}", rule.ruleName()); + log.debug("{}validating stage: {}", context.logPrefix(), rule.ruleName()); Optional validationError; validationError = rule.validate(context); if (validationError.isPresent()) { - log.debug("validation stage: {} completed with error {} in {} ms", - rule.ruleName(), validationError.get().getSubject().getId(), + log.debug("{}validation stage: {} completed with error {} in {} ms", + context.logPrefix(), rule.ruleName(), validationError.get().getSubject().getId(), Instant.now().toEpochMilli() - begin.toEpochMilli()); return validationError; } } - log.debug("validation successfully completed in {} ms", Instant.now().toEpochMilli() - begin.toEpochMilli()); + log.debug("{}validation successfully completed in {} ms", context.logPrefix(), Instant.now().toEpochMilli() - begin.toEpochMilli()); if (chainedValidator != null) return chainedValidator.tillFirstError(); return Optional.empty(); }