From 75e3be12c017bc50441e4e364ce7c7ec8da5b501 Mon Sep 17 00:00:00 2001 From: unanchoi Date: Sat, 23 Mar 2024 21:59:43 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[CHORE]=20discord=20alarm=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=97=90=20Content-Type=20=ED=97=A4=EB=8D=94=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smeem-api/build.gradle | 3 +++ .../java/com/smeem/external/discord/DiscordAlarmSender.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/smeem-api/build.gradle b/smeem-api/build.gradle index 26617966..028583cf 100644 --- a/smeem-api/build.gradle +++ b/smeem-api/build.gradle @@ -17,6 +17,9 @@ dependencies { // Swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' + // Sentry + implementation 'io.sentry:sentry-spring-boot-starter-jakarta:7.6.0' + } ext { diff --git a/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java b/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java index f13d4735..b38e29f2 100644 --- a/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java +++ b/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java @@ -11,6 +11,7 @@ import org.springframework.web.client.RestClient; import static org.springframework.http.HttpHeaders.ACCEPT; +import static org.springframework.http.HttpHeaders.CONTENT_TYPE; @Component @RequiredArgsConstructor @@ -26,6 +27,7 @@ public void send(final String content, final DiscordAlarmCase alarmCase) { val restClient = RestClient.create(); restClient.post() .uri(webHookUri(alarmCase)) + .header(CONTENT_TYPE, "application/json; UTF-8") .header(ACCEPT, "application/json; UTF-8") .body(makeRequestBody(content)) .retrieve(); From e43ec622cd4da6422f87ea6c99d98f571911a7d3 Mon Sep 17 00:00:00 2001 From: unanchoi Date: Sat, 23 Mar 2024 22:05:01 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[CHORE]=20Sentry=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smeem/api/common/advicer/ErrorHandler.java | 16 ++++++++++++++-- smeem-api/src/main/resources/application-dev.yml | 8 +++++++- .../src/main/resources/application-prod.yml | 8 +++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/smeem-api/src/main/java/com/smeem/api/common/advicer/ErrorHandler.java b/smeem-api/src/main/java/com/smeem/api/common/advicer/ErrorHandler.java index f36bbdd9..e90e01b8 100644 --- a/smeem-api/src/main/java/com/smeem/api/common/advicer/ErrorHandler.java +++ b/smeem-api/src/main/java/com/smeem/api/common/advicer/ErrorHandler.java @@ -4,6 +4,7 @@ import com.smeem.api.common.dto.FailureResponse; import com.smeem.common.exception.*; import com.smeem.external.discord.DiscordAlarmSender; +import io.sentry.Sentry; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -20,61 +21,72 @@ public class ErrorHandler { @ExceptionHandler(TrainingTimeException.class) public ResponseEntity trainingTimeException(TrainingTimeException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(TokenException.class) public ResponseEntity tokenException(TokenException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(BadgeException.class) public ResponseEntity badgeException(BadgeException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(DiaryException.class) public ResponseEntity diaryException(DiaryException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(MemberException.class) public ResponseEntity memberException(MemberException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(GoalException.class) public ResponseEntity goalException(GoalException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(TopicException.class) public ResponseEntity topicException(TopicException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(AppleException.class) public ResponseEntity appleException(AppleException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(FcmException.class) public ResponseEntity fcmException(FcmException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(AuthException.class) public ResponseEntity authException(AuthException exception) { + Sentry.captureException(exception); return ApiResponseUtil.failure(exception.getFailureCode()); } @ExceptionHandler(RuntimeException.class) public ResponseEntity baseException(RuntimeException exception) { sendDiscordAlarm(exception); + Sentry.captureException(exception); return ApiResponseUtil.failure(SERVER_ERROR); } private void sendDiscordAlarm(RuntimeException exception) { - discordAlarmSender.send(exception.getMessage(), ERROR); + discordAlarmSender.send(exception.getMessage(), ERROR); } -} +} \ No newline at end of file diff --git a/smeem-api/src/main/resources/application-dev.yml b/smeem-api/src/main/resources/application-dev.yml index 88375206..78c77dc1 100644 --- a/smeem-api/src/main/resources/application-dev.yml +++ b/smeem-api/src/main/resources/application-dev.yml @@ -55,4 +55,10 @@ smeem: discord: webhook: error-url: ${DISCORD.WEBHOOK_ERROR_URL} - info-url: ${DISCORD.WEBHOOK_INFO_URL} \ No newline at end of file + info-url: ${DISCORD.WEBHOOK_INFO_URL} + +sentry: + dsn: ${SENTRY.DSN} + environment: dev + enable-tracing: true + exception-resolver-order: -2147483647 \ No newline at end of file diff --git a/smeem-api/src/main/resources/application-prod.yml b/smeem-api/src/main/resources/application-prod.yml index e87111c7..64bfb862 100644 --- a/smeem-api/src/main/resources/application-prod.yml +++ b/smeem-api/src/main/resources/application-prod.yml @@ -56,4 +56,10 @@ smeem: discord: webhook: error-url: ${DISCORD.WEBHOOK_ERROR_URL} - info-url: ${DISCORD.WEBHOOK_INFO_URL} \ No newline at end of file + info-url: ${DISCORD.WEBHOOK_INFO_URL} + +sentry: + dsn: ${SENTRY.DSN} + environment: prod + enable-tracing: true + exception-resolver-order: -2147483647 \ No newline at end of file From 207458ac8033d55edc48e36f197aec932a454e4e Mon Sep 17 00:00:00 2001 From: unanchoi Date: Tue, 26 Mar 2024 22:45:36 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[CHORE]=20header=20value=20=EC=83=81?= =?UTF-8?q?=EC=88=98=EB=A1=9C=20=EC=84=A0=EC=96=B8=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/smeem/external/discord/DiscordAlarmSender.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java b/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java index b38e29f2..8fa0b963 100644 --- a/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java +++ b/smeem-external/src/main/java/com/smeem/external/discord/DiscordAlarmSender.java @@ -18,6 +18,8 @@ @Slf4j public class DiscordAlarmSender { + private static final String APPLICATION_JSON_UTF_8 = "application/json; UTF-8"; + private final ObjectMapper objectMapper; private final ValueConfig valueConfig; private final Environment environment; @@ -27,8 +29,8 @@ public void send(final String content, final DiscordAlarmCase alarmCase) { val restClient = RestClient.create(); restClient.post() .uri(webHookUri(alarmCase)) - .header(CONTENT_TYPE, "application/json; UTF-8") - .header(ACCEPT, "application/json; UTF-8") + .header(CONTENT_TYPE, APPLICATION_JSON_UTF_8) + .header(ACCEPT, APPLICATION_JSON_UTF_8) .body(makeRequestBody(content)) .retrieve(); } catch (RuntimeException | JsonProcessingException e) {