File size: 1,962 Bytes
6a07cb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import requests
from slack_sdk import WebClient


class Alarm:
    def __init__(self, slack):
        self.url = slack.url
        self.username = slack.username
        self.icon_emoji = slack.icon_emoji
        self.channel_id = slack.channel_id
        self.bot_token = slack.bot_token
        self.client = WebClient(self.bot_token)

    def _get_color(self, level) -> str:
        if level == "ignore":
            color = "#36A64F"  # Green
        elif level == "warning":
            color = "#F08080"  # Red
        return color

    def send(self, level, text):
        color = self._get_color(level)
        message = {
            "attachments": [{"text": text, "color": color}],
            "username": self.username,
            "icon_emoji": self.icon_emoji,
        }

        requests.post(self.url, json=message)

    def send_sdk(self, level, text):
        color = self._get_color(level)

        re = self.client.chat_postMessage(
            channel=self.channel_id,
            attachments=[{"fallback": "fallback", "text": text, "color": color}],
            icon_emoji=self.icon_emoji,
            user_name=self.username,
        )

        return re.data["ts"]

    def post_reply_to_thread(self, level, thread_ts, text):
        color = self._get_color(level)

        self.client.chat_postMessage(
            channel=self.channel_id,
            attachments=[{"fallback": "fallback", "text": text, "color": color}],
            icon_emoji=self.icon_emoji,
            thread_ts=thread_ts,
            user_name=self.username,
        )

    def post_reaction(self, thread_ts, emoji_name):
        # emoji_name ex. "x", "완료"
        self.client.reactions_add(
            channel=self.channel_id, name=emoji_name, timestamp=thread_ts
        )


class AlertLevel:
    IGNORE = "ignore"
    WARNING = "warning"
    MAJOR = "major"

    @classmethod
    def get_levels(self):
        return [self.IGNORE, self.WARNING, self.MAJOR]