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.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,

View file

@ -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<T> implements IValidatorContext {
private final Map<String, Imdg<?>> imdgs;
private final Map<Enum<?>, Object> storedObjects;
private T validatedObject;
private Function<? super T, String> logPrefix;
public ImdgValidationContext() {
this.imdgs = new HashMap<>();
@ -29,6 +31,18 @@ public class ImdgValidationContext<T> 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<T> implements IValidatorContext {
}
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) {
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.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<C extends IValidatorContext> implements IValidator {
public Optional<EnumMessage> tillFirstError() {
Instant begin = Instant.now();
for (IValidationRule<C> rule : rules) {
log.debug("validating stage: {}", rule.ruleName());
log.debug("{}validating stage: {}", context.logPrefix(), rule.ruleName());
Optional<EnumMessage> 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();
}