From ee23dd64a1e46b08d35ec1fc553583df669e874a Mon Sep 17 00:00:00 2001 From: devmizz Date: Sun, 16 Feb 2025 00:26:09 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20environment=20=EC=9D=B8=EC=9E=90?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EC=B6=94=EC=96=B4=20=EC=9B=B9=ED=9B=85=20?= =?UTF-8?q?=EC=B1=84=EB=84=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yappu-world-server-lambda-cd.yaml | 1 + .../yappu-world-server-lambda-ci.yaml | 3 +- src/main/kotlin/discord/DiscordClient.kt | 2 +- .../handler/SentryDiscordWebhookHandler.kt | 41 +++++++++++-------- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/.github/workflows/yappu-world-server-lambda-cd.yaml b/.github/workflows/yappu-world-server-lambda-cd.yaml index d26b3fb..8847258 100644 --- a/.github/workflows/yappu-world-server-lambda-cd.yaml +++ b/.github/workflows/yappu-world-server-lambda-cd.yaml @@ -27,6 +27,7 @@ jobs: run: | mkdir -p src/main/resources echo "DISCORD_SERVER_ALERT_WEBHOOK=${{ secrets.DISCORD_SERVER_ALERT_WEBHOOK }}" > src/main/resources/.env + echo "DISCORD_SERVER_TEST_WEBHOOK=${{ secrets.DISCORD_SERVER_TEST_WEBHOOK }}" >> src/main/resources/.env cat src/main/resources/.env - name: Build ShadowJar diff --git a/.github/workflows/yappu-world-server-lambda-ci.yaml b/.github/workflows/yappu-world-server-lambda-ci.yaml index c95c8a9..2c84a19 100644 --- a/.github/workflows/yappu-world-server-lambda-ci.yaml +++ b/.github/workflows/yappu-world-server-lambda-ci.yaml @@ -26,7 +26,8 @@ jobs: - name: Create .env file run: | mkdir -p src/main/resources - echo "DISCORD_SERVER_ALERT_WEBHOOK=${{ secrets.DISCORD_SERVER_TEST_WEBHOOK }}" > src/main/resources/.env + echo "DISCORD_SERVER_ALERT_WEBHOOK=${{ secrets.DISCORD_SERVER_ALERT_WEBHOOK }}" > src/main/resources/.env + echo "DISCORD_SERVER_TEST_WEBHOOK=${{ secrets.DISCORD_SERVER_TEST_WEBHOOK }}" >> src/main/resources/.env cat src/main/resources/.env - name: Compile and run test diff --git a/src/main/kotlin/discord/DiscordClient.kt b/src/main/kotlin/discord/DiscordClient.kt index 8f5fc3e..bc0f400 100644 --- a/src/main/kotlin/discord/DiscordClient.kt +++ b/src/main/kotlin/discord/DiscordClient.kt @@ -9,7 +9,7 @@ import io.ktor.client.request.* import io.ktor.http.* class DiscordClient { - suspend fun send(message: DiscordMessage): DiscordWebhookResponse { + suspend fun sendAlertServer(message: DiscordMessage, serverWebhook: String): DiscordWebhookResponse { val dotenv = Dotenv.load() val response = HttpClient(CIO).use { client -> client.post(dotenv["DISCORD_SERVER_ALERT_WEBHOOK"]) { diff --git a/src/main/kotlin/handler/SentryDiscordWebhookHandler.kt b/src/main/kotlin/handler/SentryDiscordWebhookHandler.kt index 19f53e4..2aaca82 100644 --- a/src/main/kotlin/handler/SentryDiscordWebhookHandler.kt +++ b/src/main/kotlin/handler/SentryDiscordWebhookHandler.kt @@ -8,6 +8,7 @@ import com.amazonaws.services.lambda.runtime.Context import com.amazonaws.services.lambda.runtime.RequestHandler import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import io.github.cdimascio.dotenv.Dotenv import kotlinx.coroutines.runBlocking class SentryDiscordWebhookHandler( @@ -16,24 +17,13 @@ class SentryDiscordWebhookHandler( override fun handleRequest(input: Any, context: Context): APIGatewayProxyResponseEvent { val event = parseEvent(input) - val fields = mutableListOf().apply { - listOf("environment", "level", "type", "location", "issue_id").forEach { element -> - if (event[element] != null) { - add(DiscordEmbedField(element, event[element] as String)) - } - } + val message = makeDiscordMessageBy(event) + val discordWebhook = when (event["environment"]) { + "prod" -> Dotenv.load()["DISCORD_SERVER_ALERT_WEBHOOK"] + else -> Dotenv.load()["DISCORD_SERVER_TEST_WEBHOOK"] } - val message = DiscordMessage.of( - DiscordEmbed.error( - event["title"] as String, - event["message"] as String, - event["web_url"] as String, - fields - ) - ) - - return runBlocking { discordClient.send(message) } + return runBlocking { discordClient.sendAlertServer(message, discordWebhook) } .let { APIGatewayProxyResponseEvent() .withStatusCode(200) @@ -49,4 +39,23 @@ class SentryDiscordWebhookHandler( } return data["event"] as Map<*, *> } + + private fun makeDiscordMessageBy(event: Map<*, *>): DiscordMessage { + val fields = mutableListOf().apply { + listOf("environment", "level", "type", "location", "issue_id").forEach { element -> + if (event[element] != null) { + add(DiscordEmbedField(element, event[element] as String)) + } + } + } + + return DiscordMessage.of( + DiscordEmbed.error( + event["title"] as String, + event["message"] as String, + event["web_url"] as String, + fields + ) + ) + } }