-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSlackApi.java
More file actions
88 lines (72 loc) Β· 3.3 KB
/
Copy pathSlackApi.java
File metadata and controls
88 lines (72 loc) Β· 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package org.runnect.server.config.slack;
import com.slack.api.Slack;
import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.LayoutBlock;
import com.slack.api.model.block.composition.BlockCompositions;
import com.slack.api.webhook.WebhookPayloads;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import static com.slack.api.model.block.composition.BlockCompositions.plainText;
@Component
@RequiredArgsConstructor
@Slf4j
public class SlackApi {
@Value("${slack.webhook.url}")
private String webhookUrl;
private final static String NEW_LINE = "\n";
private final static String DOUBLE_NEW_LINE = "\n\n";
public void sendAlert(Exception error, HttpServletRequest request) throws IOException {
List<LayoutBlock> layoutBlocks = generateLayoutBlock(error, request);
Slack.getInstance().send(webhookUrl, WebhookPayloads
.payload(p ->
p.username("Exception is detected π¨")
.iconUrl("https://yt3.googleusercontent.com/ytc/AGIKgqMVUzRrhoo1gDQcqvPo0PxaJz7e0gqDXT0D78R5VQ=s900-c-k-c0x00ffffff-no-rj")
.blocks(layoutBlocks)));
}
private List<LayoutBlock> generateLayoutBlock(Exception error, HttpServletRequest request) {
return Blocks.asBlocks(
getHeader("μλ² μΈ‘ μ€λ₯λ‘ μμλλ μμΈ μν©μ΄ λ°μνμμ΅λλ€."),
Blocks.divider(),
getSection(generateErrorMessage(error)),
Blocks.divider(),
getSection(generateErrorPointMessage(request)),
Blocks.divider(),
getSection("<https://github.com/Runnect/Runnect-Spring-Boot-Server/issues|μ΄μ μμ±νλ¬ κ°κΈ°>")
);
}
private String generateErrorMessage(Exception error) {
StringBuilder sb = new StringBuilder();
sb.append("*[π₯ Exception]*" + NEW_LINE + error.toString() + DOUBLE_NEW_LINE);
sb.append("*[π© From]*" + NEW_LINE + readRootStackTrace(error) + DOUBLE_NEW_LINE);
return sb.toString();
}
private String generateErrorPointMessage(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
sb.append("*[π§ΎμΈλΆμ 보]*" + NEW_LINE);
sb.append("Request URL : " + request.getRequestURL().toString() + NEW_LINE);
sb.append("Request Method : " + request.getMethod() + NEW_LINE);
sb.append("Request Time : " + new Date() + NEW_LINE);
return sb.toString();
}
private String readRootStackTrace(Exception error) {
if (error.getStackTrace() == null || error.getStackTrace().length == 0) {
return "Unknown";
}
return error.getStackTrace()[0].toString();
}
private LayoutBlock getHeader(String text) {
return Blocks.header(h -> h.text(
plainText(pt -> pt.emoji(true)
.text(text))));
}
private LayoutBlock getSection(String message) {
return Blocks.section(s ->
s.text(BlockCompositions.markdownText(message)));
}
}