feat: add feature enable/disable flags for notification platforms

- Add MATTERMOST_ENABLED, TELEGRAM_ENABLED, SYNOLOGY_ENABLED, NOTION_ENABLED, GA4_ENABLED flags
- Skip disabled platforms in message_sender.py
- Comment out unused config variables in .env.sample
- Add .vscode settings for virtual environment debugging
This commit is contained in:
2025-12-31 10:20:17 +09:00
parent 4ff5dba4b1
commit dd9564a326
4 changed files with 79 additions and 23 deletions

View File

@ -126,6 +126,7 @@ class Config:
# GA4 설정
self.ga4 = {
'enabled': self._get_bool('GA4_ENABLED', False),
'api_token': self._get_env('GA4_API_TOKEN', ''),
'property_id': self._get_int('GA4_PROPERTY_ID', 0),
'service_account_file': self._get_env('GA4_SERVICE_ACCOUNT_FILE', './conf/service-account-credentials.json'),
@ -183,6 +184,7 @@ class Config:
# Mattermost 설정
self.mattermost = {
'enabled': self._get_bool('MATTERMOST_ENABLED', False),
'url': self._get_env('MATTERMOST_URL', ''),
'token': self._get_env('MATTERMOST_TOKEN', ''),
'channel_id': self._get_env('MATTERMOST_CHANNEL_ID', ''),
@ -191,18 +193,21 @@ class Config:
# Telegram 설정
self.telegram = {
'enabled': self._get_bool('TELEGRAM_ENABLED', False),
'bot_token': self._get_env('TELEGRAM_BOT_TOKEN', ''),
'chat_id': self._get_env('TELEGRAM_CHAT_ID', ''),
}
# Synology Chat 설정
self.synology = {
'enabled': self._get_bool('SYNOLOGY_ENABLED', False),
'chat_url': self._get_env('SYNOLOGY_CHAT_URL', ''),
'chat_token': self._get_env('SYNOLOGY_CHAT_TOKEN', ''),
}
# Notion 설정
self.notion = {
'enabled': self._get_bool('NOTION_ENABLED', False),
'api_secret': self._get_env('NOTION_API_SECRET', ''),
}

View File

@ -52,37 +52,46 @@ class MessageSender:
def __init__(
self,
mattermost_enabled: bool = False,
mattermost_url: str = "",
mattermost_token: str = "",
mattermost_channel_id: str = "",
mattermost_webhook_url: str = "",
telegram_enabled: bool = False,
telegram_bot_token: str = "",
telegram_chat_id: str = "",
synology_enabled: bool = False,
synology_webhook_url: str = ""
):
"""
메시지 발송자 초기화
Args:
mattermost_enabled: Mattermost 사용 여부
mattermost_url: Mattermost 서버 URL (예: https://mattermost.example.com)
mattermost_token: Mattermost Bot 인증 토큰
mattermost_channel_id: 메시지를 보낼 채널 ID
mattermost_webhook_url: 웹훅 URL (웹훅 방식 사용 시)
telegram_enabled: Telegram 사용 여부
telegram_bot_token: Telegram Bot API 토큰
telegram_chat_id: Telegram 채팅방 ID
synology_enabled: Synology Chat 사용 여부
synology_webhook_url: Synology Chat 웹훅 URL
"""
# Mattermost 설정
self.mattermost_enabled = mattermost_enabled
self.mattermost_url = mattermost_url.rstrip('/') if mattermost_url else ""
self.mattermost_token = mattermost_token
self.mattermost_channel_id = mattermost_channel_id
self.mattermost_webhook_url = mattermost_webhook_url
# Telegram 설정
self.telegram_enabled = telegram_enabled
self.telegram_bot_token = telegram_bot_token
self.telegram_chat_id = telegram_chat_id
# Synology Chat 설정
self.synology_enabled = synology_enabled
self.synology_webhook_url = synology_webhook_url
@classmethod
@ -91,6 +100,7 @@ class MessageSender:
설정 파일에서 메시지 발송자 생성
환경변수에서 모든 메시징 설정을 로드하여 인스턴스를 생성합니다.
ENABLED가 false이거나 주석처리된 플랫폼은 비활성화됩니다.
Returns:
설정이 적용된 MessageSender 인스턴스
@ -98,12 +108,15 @@ class MessageSender:
config = get_config()
return cls(
mattermost_enabled=config.mattermost.get('enabled', False),
mattermost_url=config.mattermost.get('url', ''),
mattermost_token=config.mattermost.get('token', ''),
mattermost_channel_id=config.mattermost.get('channel_id', ''),
mattermost_webhook_url=config.mattermost.get('webhook_url', ''),
telegram_enabled=config.telegram.get('enabled', False),
telegram_bot_token=config.telegram.get('bot_token', ''),
telegram_chat_id=config.telegram.get('chat_id', ''),
synology_enabled=config.synology.get('enabled', False),
synology_webhook_url=config.synology.get('chat_url', ''),
)
@ -159,14 +172,23 @@ class MessageSender:
return success
def _get_configured_platforms(self) -> List[str]:
"""설정된 플랫폼 목록 반환"""
"""
활성화되고 설정이 완료된 플랫폼 목록 반환
ENABLED가 true이고 필수 설정이 있는 플랫폼만 반환합니다.
"""
platforms = []
if self.mattermost_url and (self.mattermost_token or self.mattermost_webhook_url):
# Mattermost: enabled=true이고 URL과 (토큰 또는 웹훅) 필요
if self.mattermost_enabled and self.mattermost_url and (self.mattermost_token or self.mattermost_webhook_url):
platforms.append('mattermost')
if self.telegram_bot_token and self.telegram_chat_id:
# Telegram: enabled=true이고 토큰과 chat_id 필요
if self.telegram_enabled and self.telegram_bot_token and self.telegram_chat_id:
platforms.append('telegram')
if self.synology_webhook_url:
# Synology: enabled=true이고 웹훅 URL 필요
if self.synology_enabled and self.synology_webhook_url:
platforms.append('synology')
return platforms
@ -176,6 +198,7 @@ class MessageSender:
Mattermost로 메시지 발송
웹훅 또는 API 방식으로 메시지를 발송합니다.
MATTERMOST_ENABLED가 false이면 건너뜁니다.
Args:
message: 발송할 메시지
@ -184,6 +207,10 @@ class MessageSender:
Returns:
발송 성공 여부
"""
if not self.mattermost_enabled:
logger.debug("Mattermost가 비활성화되어 있습니다. (MATTERMOST_ENABLED=false)")
return True # 비활성화 상태는 성공으로 처리
try:
if use_webhook and self.mattermost_webhook_url:
# 웹훅 방식
@ -240,12 +267,18 @@ class MessageSender:
"""
Telegram으로 메시지 발송
TELEGRAM_ENABLED가 false이면 건너뜁니다.
Args:
message: 발송할 메시지
Returns:
발송 성공 여부
"""
if not self.telegram_enabled:
logger.debug("Telegram이 비활성화되어 있습니다. (TELEGRAM_ENABLED=false)")
return True # 비활성화 상태는 성공으로 처리
if not self.telegram_bot_token or not self.telegram_chat_id:
logger.error("Telegram 설정이 완료되지 않았습니다.")
return False
@ -274,12 +307,18 @@ class MessageSender:
"""
Synology Chat으로 메시지 발송
SYNOLOGY_ENABLED가 false이면 건너뜁니다.
Args:
message: 발송할 메시지
Returns:
발송 성공 여부
"""
if not self.synology_enabled:
logger.debug("Synology Chat이 비활성화되어 있습니다. (SYNOLOGY_ENABLED=false)")
return True # 비활성화 상태는 성공으로 처리
if not self.synology_webhook_url:
logger.error("Synology Chat 웹훅 URL이 설정되지 않았습니다.")
return False