logPrefix для валидации

This commit is contained in:
ialbert 2023-07-04 14:40:59 +03:00
parent dfe3e271d7
commit 5b3fedfc0c
5 changed files with 60 additions and 6 deletions

View file

@ -25,6 +25,7 @@ import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; 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.IValidator;
import ru.spcex.platform.utils.validation.ValidatorImpl; import ru.spcex.platform.utils.validation.ValidatorImpl;
@ -79,6 +80,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
context.addImdg(IMDGDistributedNames.Map_AccountBalance, imdgAccountBalance); context.addImdg(IMDGDistributedNames.Map_AccountBalance, imdgAccountBalance);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
ExecutionDepositValidationRule.ClearingIsAllowed, ExecutionDepositValidationRule.ClearingIsAllowed,
ExecutionDepositValidationRule.AccountIsNotBlocked, ExecutionDepositValidationRule.AccountIsNotBlocked,
@ -96,6 +98,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity); context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
STradesValidationRule.SecurityPresentFond, STradesValidationRule.SecurityPresentFond,
STradesValidationRule.CompanyPresent, STradesValidationRule.CompanyPresent,
@ -113,6 +116,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity); context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
STradesValidationRule.SecurityPresentDeposit, STradesValidationRule.SecurityPresentDeposit,
STradesValidationRule.CompanyPresent, STradesValidationRule.CompanyPresent,
@ -132,6 +136,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
RegistryStep3ValidationRule.ClearingAvailable, RegistryStep3ValidationRule.ClearingAvailable,
RegistryStep3ValidationRule.AccountActive, RegistryStep3ValidationRule.AccountActive,
@ -146,6 +151,7 @@ public class ValidationConfig {
context.setValidatedObject(sDf01); context.setValidatedObject(sDf01);
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
Sdf01ValidationRule.CompanyPresent, Sdf01ValidationRule.CompanyPresent,
Sdf01ValidationRule.AccountPresent, Sdf01ValidationRule.AccountPresent,
@ -163,6 +169,7 @@ public class ValidationConfig {
context.setValidatedObject(sDf57); context.setValidatedObject(sDf57);
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
Sdf57ValidationRule.CompanyDebOrCredPresent, Sdf57ValidationRule.CompanyDebOrCredPresent,
Sdf57ValidationRule.AccountDebOrCredPresent, Sdf57ValidationRule.AccountDebOrCredPresent,
@ -178,6 +185,7 @@ public class ValidationConfig {
context.setValidatedObject(sDf01); context.setValidatedObject(sDf01);
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
Sdf01NewValidationRule.CompanyPresent, Sdf01NewValidationRule.CompanyPresent,
Sdf01NewValidationRule.AccountType, Sdf01NewValidationRule.AccountType,
@ -195,6 +203,7 @@ public class ValidationConfig {
context.setValidatedObject(sDf08); context.setValidatedObject(sDf08);
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount); context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
Sdf08NewValidationRule.AccountPresent Sdf08NewValidationRule.AccountPresent
); );
@ -211,6 +220,7 @@ public class ValidationConfig {
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry); context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
context.addImdg(IMDGDistributedNames.Map_Session, imdgSession); context.addImdg(IMDGDistributedNames.Map_Session, imdgSession);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
Sdf06NewValidationRule.CompanySymbolAndCompanyPresent, Sdf06NewValidationRule.CompanySymbolAndCompanyPresent,
Sdf06NewValidationRule.AccountPresent, Sdf06NewValidationRule.AccountPresent,

View file

@ -6,11 +6,13 @@ import ru.spcex.platform.utils.validation.IValidatorContext;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
public class ImdgValidationContext<T> implements IValidatorContext { public class ImdgValidationContext<T> implements IValidatorContext {
private final Map<String, Imdg<?>> imdgs; private final Map<String, Imdg<?>> imdgs;
private final Map<Enum<?>, Object> storedObjects; private final Map<Enum<?>, Object> storedObjects;
private T validatedObject; private T validatedObject;
private Function<? super T, String> logPrefix;
public ImdgValidationContext() { public ImdgValidationContext() {
this.imdgs = new HashMap<>(); this.imdgs = new HashMap<>();
@ -29,6 +31,18 @@ public class ImdgValidationContext<T> implements IValidatorContext {
return validatedObject; return validatedObject;
} }
@Override
public String logPrefix() {
try {
if (logPrefix == null) {
return "";
}
return logPrefix.apply(validatedObject);
} catch (Throwable e) {
return "(logPrefix) ";
}
}
/** /**
* !!!не использовать один Enum в разных местах * !!!не использовать один Enum в разных местах
*/ */
@ -51,4 +65,8 @@ public class ImdgValidationContext<T> implements IValidatorContext {
} }
return (Imdg<V>) imdg; return (Imdg<V>) imdg;
} }
public void setLogPrefix(Function<? super T, String> logPrefix) {
this.logPrefix = logPrefix;
}
} }

View file

@ -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<WithId, String> {
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 "";
}
}

View file

@ -4,4 +4,8 @@ public interface IValidatorContext {
default <S> S getStoredObject(Enum<?> storedObject) { default <S> S getStoredObject(Enum<?> storedObject) {
throw new UnsupportedOperationException("not implemented"); throw new UnsupportedOperationException("not implemented");
} }
default String logPrefix() {
return "";
}
} }

View file

@ -58,9 +58,9 @@ public class ValidatorImpl<C extends IValidatorContext> implements IValidator {
validationError = rule.validate(context); validationError = rule.validate(context);
validationError.ifPresent(errors::add); validationError.ifPresent(errors::add);
if (validationError.isPresent()) { if (validationError.isPresent()) {
log.debug("validating stage: {} error", rule.ruleName()); log.debug("{}validating stage: {} error", context.logPrefix(), rule.ruleName());
} else { } else {
log.debug("validating stage: {} complete", rule.ruleName()); log.debug("{}validating stage: {} complete", context.logPrefix(), rule.ruleName());
} }
} }
} }
@ -75,17 +75,17 @@ public class ValidatorImpl<C extends IValidatorContext> implements IValidator {
public Optional<EnumMessage> tillFirstError() { public Optional<EnumMessage> tillFirstError() {
Instant begin = Instant.now(); Instant begin = Instant.now();
for (IValidationRule<C> rule : rules) { for (IValidationRule<C> rule : rules) {
log.debug("validating stage: {}", rule.ruleName()); log.debug("{}validating stage: {}", context.logPrefix(), rule.ruleName());
Optional<EnumMessage> validationError; Optional<EnumMessage> validationError;
validationError = rule.validate(context); validationError = rule.validate(context);
if (validationError.isPresent()) { if (validationError.isPresent()) {
log.debug("validation stage: {} completed with error {} in {} ms", log.debug("{}validation stage: {} completed with error {} in {} ms",
rule.ruleName(), validationError.get().getSubject().getId(), context.logPrefix(), rule.ruleName(), validationError.get().getSubject().getId(),
Instant.now().toEpochMilli() - begin.toEpochMilli()); Instant.now().toEpochMilli() - begin.toEpochMilli());
return validationError; 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(); if (chainedValidator != null) return chainedValidator.tillFirstError();
return Optional.empty(); return Optional.empty();
} }