http://jira.mfd.msk:8088/browse/BKI-3215 Moved SignalServerException logs to GlobalExceptionHandler; Added warn logs to GlobalExceptionHandler for SignalClientException
This commit is contained in:
parent
98622d7817
commit
2c3b2822c2
7 changed files with 48 additions and 46 deletions
|
|
@ -18,7 +18,7 @@ public class MapperTimingAspect {
|
||||||
} finally {
|
} finally {
|
||||||
long tookMs = (System.nanoTime() - start) / 1_000_000;
|
long tookMs = (System.nanoTime() - start) / 1_000_000;
|
||||||
String method = pjp.getSignature().toShortString();
|
String method = pjp.getSignature().toShortString();
|
||||||
if (tookMs > 200) {
|
if (tookMs > 1000) {
|
||||||
log.warn("Slow mapper call {} took {} ms", method, tookMs);
|
log.warn("Slow mapper call {} took {} ms", method, tookMs);
|
||||||
} else {
|
} else {
|
||||||
log.debug("Mapper call {} took {} ms", method, tookMs);
|
log.debug("Mapper call {} took {} ms", method, tookMs);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.nbch.credit_tracker.config.rest;
|
package ru.nbch.credit_tracker.config.rest;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
|
@ -12,10 +13,12 @@ import ru.nbch.credit_tracker.entities.user_response.errors.*;
|
||||||
import ru.nbch.credit_tracker.enums.SignalError;
|
import ru.nbch.credit_tracker.enums.SignalError;
|
||||||
import ru.nbch.credit_tracker.exceptions.SignalClientException;
|
import ru.nbch.credit_tracker.exceptions.SignalClientException;
|
||||||
import ru.nbch.credit_tracker.exceptions.SignalException;
|
import ru.nbch.credit_tracker.exceptions.SignalException;
|
||||||
|
import ru.nbch.credit_tracker.exceptions.SignalServerException;
|
||||||
import ru.nbch.credit_tracker.utils.error.SimpleMessageResolver;
|
import ru.nbch.credit_tracker.utils.error.SimpleMessageResolver;
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@RestControllerAdvice
|
@RestControllerAdvice
|
||||||
public class GlobalExceptionHandler {
|
public class GlobalExceptionHandler {
|
||||||
|
|
||||||
|
|
@ -43,14 +46,20 @@ public class GlobalExceptionHandler {
|
||||||
public ResponseEntity<CommonError> handleClientException(SignalException ex) {
|
public ResponseEntity<CommonError> handleClientException(SignalException ex) {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.setContentType(new MediaType("application", "xml", Charset.forName(encoding)));
|
headers.setContentType(new MediaType("application", "xml", Charset.forName(encoding)));
|
||||||
|
|
||||||
|
String errorText = messageResolver.resolve(ex.getErrorMessage());
|
||||||
|
|
||||||
CommonError commonError = getCommonError(ex);
|
CommonError commonError = getCommonError(ex);
|
||||||
commonError.setStatus("error");
|
commonError.setStatus("error");
|
||||||
commonError.setErrorCode(ex.getErrorMessage().getSubject().getCode());
|
commonError.setErrorCode(ex.getErrorMessage().getSubject().getCode());
|
||||||
commonError.setErrorText(messageResolver.resolve(ex.getErrorMessage()));
|
commonError.setErrorText(errorText);
|
||||||
|
|
||||||
if (ex instanceof SignalClientException) {
|
if (ex instanceof SignalClientException) {
|
||||||
|
log.warn("Response error: {}", errorText);
|
||||||
return new ResponseEntity<>(commonError, headers, HttpStatus.BAD_REQUEST);
|
return new ResponseEntity<>(commonError, headers, HttpStatus.BAD_REQUEST);
|
||||||
} else {
|
} else {
|
||||||
|
Exception cause = ((SignalServerException) ex).getCause();
|
||||||
|
log.error(cause.getMessage(), cause);
|
||||||
return new ResponseEntity<>(commonError, headers, HttpStatus.INTERNAL_SERVER_ERROR);
|
return new ResponseEntity<>(commonError, headers, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@ package ru.nbch.credit_tracker.enums;
|
||||||
public enum SignalError implements IEnumKeyCode {
|
public enum SignalError implements IEnumKeyCode {
|
||||||
ERROR_001("001", "Ошибка распаковки архива"),
|
ERROR_001("001", "Ошибка распаковки архива"),
|
||||||
ERROR_002("002", "Отсутствует обязательный элемент: {}"),
|
ERROR_002("002", "Отсутствует обязательный элемент: {}"),
|
||||||
ERROR_003("003", "Элемент ClientId не соответствует формату XXXXXXXXX"),
|
ERROR_003("003", "Элемент ClientId не соответствует формату XXXXXXXXX. Id: {}"),
|
||||||
ERROR_005("005", "Неверный логин или пароль"),
|
ERROR_005("005", "Неверный логин или пароль"),
|
||||||
ERROR_006("006", "Доступ к услуге закрыт, обратитесь к курирующему менеджеру"),
|
ERROR_006("006", "Доступ к услуге закрыт, обратитесь к курирующему менеджеру"),
|
||||||
ERROR_007("007", "В системе уже существует пакет с таким именем"),
|
ERROR_007("007", "В системе уже существует пакет с таким именем"),
|
||||||
ERROR_008("008", "PackageName не соответствует допустимому формату"),
|
ERROR_008("008", "PackageName не соответствует допустимому формату"),
|
||||||
ERROR_009("009", "Превышен допустимый размер пакета"),
|
ERROR_009("009", "Превышен допустимый размер пакета"),
|
||||||
ERROR_010("010", "Идентификатор субъекта (Id) не соответствует допустимому формату"),
|
ERROR_010("010", "Идентификатор субъекта (Id) не соответствует допустимому формату: {}"),
|
||||||
ERROR_011("011", "Получен невалидный XML"),
|
ERROR_011("011", "Получен невалидный XML"),
|
||||||
ERROR_012("012", "Пакет {} не найден"),
|
ERROR_012("012", "Пакет {} не найден"),
|
||||||
ERROR_013("013", "На стороне сервиса произошла ошибка, попробуйте повторить запрос позже или сообщите в техническую поддержку"),
|
ERROR_013("013", "На стороне сервиса произошла ошибка, попробуйте повторить запрос позже или сообщите в техническую поддержку"),
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
package ru.nbch.credit_tracker.exceptions;
|
package ru.nbch.credit_tracker.exceptions;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import ru.nbch.credit_tracker.enums.EnumKeyMessage;
|
import ru.nbch.credit_tracker.enums.EnumKeyMessage;
|
||||||
import ru.nbch.credit_tracker.enums.XmlErrorFormat;
|
import ru.nbch.credit_tracker.enums.XmlErrorFormat;
|
||||||
|
|
||||||
|
@Getter
|
||||||
public class SignalServerException extends SignalException {
|
public class SignalServerException extends SignalException {
|
||||||
|
|
||||||
public SignalServerException(EnumKeyMessage errorMessage, XmlErrorFormat errorFormat) {
|
private final Exception cause;
|
||||||
|
|
||||||
|
public SignalServerException(EnumKeyMessage errorMessage, XmlErrorFormat errorFormat, Exception cause) {
|
||||||
super(errorMessage, errorFormat);
|
super(errorMessage, errorFormat);
|
||||||
|
this.cause = cause;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -109,21 +109,17 @@ public class SignalFacade {
|
||||||
zipInputStream.getNextEntry();
|
zipInputStream.getNextEntry();
|
||||||
|
|
||||||
filePath = writeTmpFile(zipInputStream);
|
filePath = writeTmpFile(zipInputStream);
|
||||||
if (filePath == null) {
|
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError);
|
|
||||||
} finally {
|
} finally {
|
||||||
if (zipInputStream != null) {
|
if (zipInputStream != null) {
|
||||||
try {
|
try {
|
||||||
zipInputStream.close();
|
zipInputStream.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -140,8 +136,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
@ -165,8 +160,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// в отдельном потоке запускаем регистрацию субъектов, поиск фидов и расчет флагов просрочек
|
// в отдельном потоке запускаем регистрацию субъектов, поиск фидов и расчет флагов просрочек
|
||||||
|
|
@ -200,7 +194,7 @@ public class SignalFacade {
|
||||||
return monitoringRequest;
|
return monitoringRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String writeTmpFile(ZipInputStream zipInputStream) {
|
private String writeTmpFile(ZipInputStream zipInputStream) throws IOException {
|
||||||
String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator;
|
String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator;
|
||||||
String filePath = folderPath + UUID.randomUUID() + "monitoring_request.xml";
|
String filePath = folderPath + UUID.randomUUID() + "monitoring_request.xml";
|
||||||
CTUtil.createFolder(folderPath);
|
CTUtil.createFolder(folderPath);
|
||||||
|
|
@ -214,9 +208,6 @@ public class SignalFacade {
|
||||||
}
|
}
|
||||||
|
|
||||||
return filePath;
|
return filePath;
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("Ошибка при записи файла запроса постановки на мониторинг на диск", e);
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -281,8 +272,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringActivePackagesError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringActivePackagesError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -318,8 +308,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringActivePackagesError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringActivePackagesError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -344,8 +333,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_017, XmlErrorFormat.MonitoringPackageDeleteError, e);
|
||||||
throw serverExcp(SignalError.ERROR_017, XmlErrorFormat.MonitoringPackageDeleteError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -391,8 +379,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringReportListError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringReportListError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -418,8 +405,7 @@ public class SignalFacade {
|
||||||
if (e instanceof SignalClientException) {
|
if (e instanceof SignalClientException) {
|
||||||
throw (SignalClientException) e;
|
throw (SignalClientException) e;
|
||||||
}
|
}
|
||||||
log.error(e.getMessage(), e);
|
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringDownloadError, e);
|
||||||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringDownloadError);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.nbch.credit_tracker.utils;
|
package ru.nbch.credit_tracker.utils;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest;
|
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest;
|
||||||
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.Subject;
|
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.Subject;
|
||||||
import ru.nbch.credit_tracker.enums.SignalError;
|
import ru.nbch.credit_tracker.enums.SignalError;
|
||||||
|
|
@ -10,25 +11,30 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp;
|
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class ValidationUtil {
|
public class ValidationUtil {
|
||||||
|
|
||||||
private static String phoneRegex = "^\\d{9}$";
|
private static final String phoneRegex = "^\\d{9}$";
|
||||||
private static String packageNameRegex = "^[A-Z0-9_]{1,22}$";
|
private static final String packageNameRegex = "^[A-Z0-9_]{1,22}$";
|
||||||
private static String npIdRegex = "^\\S{1,36}$";
|
private static final String npIdRegex = "^\\S{1,36}$";
|
||||||
|
|
||||||
public static void validateMonitoringRequest(MonitoringRequest request) throws SignalClientException {
|
public static void validateMonitoringRequest(MonitoringRequest request) throws SignalClientException {
|
||||||
if (request == null) {
|
if (request == null) {
|
||||||
throw clientExcp(SignalError.ERROR_011, XmlErrorFormat.MonitoringError);
|
throw clientExcp(SignalError.ERROR_011, XmlErrorFormat.MonitoringError);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.getUserId() == null) {
|
|
||||||
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "UserId");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.getPackageName() == null) {
|
if (request.getPackageName() == null) {
|
||||||
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "PackageName");
|
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "PackageName");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!validatePackageName(request.getPackageName())) {
|
||||||
|
throw clientExcp(SignalError.ERROR_008, XmlErrorFormat.MonitoringError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getUserId() == null) {
|
||||||
|
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "UserId");
|
||||||
|
}
|
||||||
|
|
||||||
if (request.getPassword() == null) {
|
if (request.getPassword() == null) {
|
||||||
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Password");
|
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Password");
|
||||||
}
|
}
|
||||||
|
|
@ -41,16 +47,12 @@ public class ValidationUtil {
|
||||||
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Subject");
|
throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Subject");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!validatePackageName(request.getPackageName())) {
|
|
||||||
throw clientExcp(SignalError.ERROR_008, XmlErrorFormat.MonitoringError);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Subject subject : request.getSubjects().getSubject()) {
|
for (Subject subject : request.getSubjects().getSubject()) {
|
||||||
if (!validatePhone(subject.getClientId())) {
|
|
||||||
throw clientExcp(SignalError.ERROR_003, XmlErrorFormat.MonitoringError);
|
|
||||||
}
|
|
||||||
if (!validateNPId(subject.getId())) {
|
if (!validateNPId(subject.getId())) {
|
||||||
throw clientExcp(SignalError.ERROR_010, XmlErrorFormat.MonitoringError);
|
throw clientExcp(SignalError.ERROR_010, XmlErrorFormat.MonitoringError, subject.getId());
|
||||||
|
}
|
||||||
|
if (!validatePhone(subject.getClientId())) {
|
||||||
|
throw clientExcp(SignalError.ERROR_003, XmlErrorFormat.MonitoringError, subject.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ public class ExceptionUtils {
|
||||||
return new SignalClientException(new EnumKeyMessage(enumKeyCode, args), xmlErrorFormat);
|
return new SignalClientException(new EnumKeyMessage(enumKeyCode, args), xmlErrorFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SignalServerException serverExcp(IEnumKeyCode enumKeyCode, XmlErrorFormat xmlErrorFormat, Object... args) {
|
public static SignalServerException serverExcp(IEnumKeyCode enumKeyCode, XmlErrorFormat xmlErrorFormat, Exception cause, Object... args) {
|
||||||
return new SignalServerException(new EnumKeyMessage(enumKeyCode, args), xmlErrorFormat);
|
return new SignalServerException(new EnumKeyMessage(enumKeyCode, args), xmlErrorFormat, cause);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue