From dd9564a326b0d202805b1624e0b3b5999c145ccd Mon Sep 17 00:00:00 2001 From: KWON Date: Wed, 31 Dec 2025 10:20:17 +0900 Subject: [PATCH] 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 --- .env.sample | 33 +++++++++++++++++++---------- core/config.py | 5 +++++ core/message_sender.py | 47 ++++++++++++++++++++++++++++++++++++++---- requirements.txt | 17 ++++++++------- 4 files changed, 79 insertions(+), 23 deletions(-) diff --git a/.env.sample b/.env.sample index 2028e7f..c17dd07 100644 --- a/.env.sample +++ b/.env.sample @@ -37,7 +37,8 @@ AIR_STATION_NAMES=운정 WEATHER_STN_IDS=99 # ===== Google Analytics 4 설정 ===== -# GA4 API를 통한 웹사이트 방문자 데이터 수집 +# GA4 기능 사용 여부 (true/false) +GA4_ENABLED=false GA4_API_TOKEN=your_ga4_api_token GA4_PROPERTY_ID=384052726 GA4_SERVICE_ACCOUNT_FILE=./conf/service-account-credentials.json @@ -85,24 +86,34 @@ BOARD_CONTENT=게시판 기본 내용 BOARD_MB_ID=admin BOARD_NICKNAME=관리자 -# ===== Mattermost 알림 설정 ===== -# 메시지 알림 서비스 연동 +# ===== 알림 서비스 설정 ===== +# 각 플랫폼별로 ENABLED 설정이 false이거나 주석처리되어 있으면 해당 기능을 건너뜁니다. + +# ----- Mattermost 알림 설정 ----- +# 사용 여부 (true/false) +MATTERMOST_ENABLED=false MATTERMOST_URL=https://mattermost.example.com MATTERMOST_TOKEN=your_bot_token MATTERMOST_CHANNEL_ID=your_channel_id -MATTERMOST_WEBHOOK_URL=https://mattermost.example.com/hooks/xxx +# MATTERMOST_WEBHOOK_URL=https://mattermost.example.com/hooks/xxx -# ===== Telegram 알림 설정 (선택) ===== -TELEGRAM_BOT_TOKEN=your_telegram_bot_token -TELEGRAM_CHAT_ID=your_chat_id +# ----- Telegram 알림 설정 ----- +# 사용 여부 (true/false) +TELEGRAM_ENABLED=false +# TELEGRAM_BOT_TOKEN=your_telegram_bot_token +# TELEGRAM_CHAT_ID=your_chat_id -# ===== Synology Chat 설정 (선택) ===== -SYNOLOGY_CHAT_URL=https://your-synology.com/webapi/entry.cgi -SYNOLOGY_CHAT_TOKEN=your_token +# ----- Synology Chat 설정 ----- +# 사용 여부 (true/false) +SYNOLOGY_ENABLED=false +# SYNOLOGY_CHAT_URL=https://your-synology.com/webapi/entry.cgi +# SYNOLOGY_CHAT_TOKEN=your_token # ===== Notion API 설정 ===== # Notion 웹훅 알림 연동 -NOTION_API_SECRET=your_notion_api_secret +# 사용 여부 (true/false) +NOTION_ENABLED=false +# NOTION_API_SECRET=your_notion_api_secret # ===== Flask 설정 ===== FLASK_SECRET_KEY=your_secret_key_here diff --git a/core/config.py b/core/config.py index 7b457a2..744fbd2 100644 --- a/core/config.py +++ b/core/config.py @@ -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', ''), } diff --git a/core/message_sender.py b/core/message_sender.py index fe34aad..acab9fe 100644 --- a/core/message_sender.py +++ b/core/message_sender.py @@ -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 diff --git a/requirements.txt b/requirements.txt index 4b100bc..e9c5d43 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -# =================================================================== +# =================================================================== # requirements.txt -# FGTools 통합 프로젝트 의존성 +# FGTools ?듯빀 ?꾨줈?앺듃 ?섏〈?? # =================================================================== -# 모든 서비스에서 사용하는 패키지들의 통합 목록입니다. +# 紐⑤뱺 ?쒕퉬?ㅼ뿉???ъ슜?섎뒗 ?⑦궎吏€?ㅼ쓽 ?듯빀 紐⑸줉?낅땲?? # pip install -r requirements.txt # =================================================================== @@ -34,29 +34,30 @@ python-dateutil>=2.8.2 google-analytics-data>=0.18.5 # ===== Forecasting (Optional) ===== -# 방문객 예측 기능 사용 시 설치 +# 諛⑸Ц媛??덉륫 湲곕뒫 ?ъ슜 ???ㅼ튂 # prophet>=1.1.5 # statsmodels>=0.14.0 # scikit-learn>=1.3.2 # ===== Visualization (Optional) ===== -# 데이터 시각화 사용 시 설치 +# ?곗씠???쒓컖???ъ슜 ???ㅼ튂 # matplotlib>=3.8.2 # ===== Web Automation (Optional) ===== -# 날씨 캡처 기능 사용 시 설치 +# ?좎뵪 罹≪쿂 湲곕뒫 ?ъ슜 ???ㅼ튂 # selenium>=4.0.0 # pillow>=10.0.0 # ===== FTP (Optional) ===== -# 파일 업로드 기능 사용 시 설치 +# ?뚯씪 ?낅줈??湲곕뒫 ?ъ슜 ???ㅼ튂 # ftputil>=5.0.0 # ===== GUI (Optional) ===== -# GUI 도구 사용 시 설치 +# GUI ?꾧뎄 ?ъ슜 ???ㅼ튂 # customtkinter>=5.2.0 # tkcalendar>=1.6.1 # ===== Utilities ===== tabulate>=0.9.0 watchdog>=3.0.0 +