"실시간_설정_감시_Watchdog_기능_구현"
This commit is contained in:
@@ -10,14 +10,40 @@ from app.services.telegram_service import telegram_service
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
async def check_kis_connectivity(db_session, settings_obj):
|
||||
if not settings_obj.appKey or not settings_obj.appSecret:
|
||||
logger.warning(">> [KIS] Credentials NOT FOUND in DB.")
|
||||
return False
|
||||
|
||||
logger.info(">> [KIS] Attempting Authentication...")
|
||||
try:
|
||||
token = await kis_auth.get_access_token(db_session)
|
||||
masked_token = token[:10] + "..." if token else "None"
|
||||
logger.info(f" [OK] Access Token Valid ({masked_token})")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f" [FAILED] KIS Auth Failed: {e}")
|
||||
return False
|
||||
|
||||
async def check_telegram_connectivity(settings_obj, is_startup=False):
|
||||
if settings_obj.useTelegram and settings_obj.telegramToken and settings_obj.telegramChatId:
|
||||
logger.info(">> [Telegram] Integration Enabled.")
|
||||
if is_startup:
|
||||
msg = "🚀 <b>BatchuKis 배취키스</b> 시스템이 시작되었습니다.\n자동매매 엔진이 가동 중입니다."
|
||||
await telegram_service.send_message(settings_obj.telegramToken, settings_obj.telegramChatId, msg)
|
||||
return True
|
||||
else:
|
||||
# logger.debug(">> [Telegram] Disabled or missing config.")
|
||||
return False
|
||||
|
||||
async def run_startup_sequence():
|
||||
"""
|
||||
Executes the Phase 1~4 startup sequence defined in ReadMe.md.
|
||||
Executes the Phase 1~4 startup sequence.
|
||||
"""
|
||||
logger.info("=== Starting System Initialization Sequence ===")
|
||||
|
||||
async with SessionLocal() as db_session:
|
||||
# Phase 1: DB & Settings Load
|
||||
# Phase 1: Load Settings
|
||||
stmt = select(ApiSettings).where(ApiSettings.id == 1)
|
||||
result = await db_session.execute(stmt)
|
||||
settings_obj = result.scalar_one_or_none()
|
||||
@@ -28,48 +54,15 @@ async def run_startup_sequence():
|
||||
await db_session.commit()
|
||||
logger.info("Created Default ApiSettings.")
|
||||
|
||||
# Phase 2: KIS Connectivity
|
||||
if not settings_obj.appKey or not settings_obj.appSecret:
|
||||
logger.warning(">> [Phase 2] KIS Credentials (appKey/Secret) NOT FOUND in DB.")
|
||||
logger.warning(" Please configure them via the Settings Page.")
|
||||
logger.warning(" Skipping Token Issue & Realtime Connection.")
|
||||
else:
|
||||
logger.info(">> [Phase 2] KIS Credentials Found. Attempting Authentication...")
|
||||
try:
|
||||
# 1. Access Token
|
||||
token = await kis_auth.get_access_token(db_session)
|
||||
masked_token = token[:10] + "..." if token else "None"
|
||||
logger.info(f" [OK] Access Token Valid (Starts with: {masked_token})")
|
||||
|
||||
# 2. Approval Key (Optional, lazy load usually, but good to check)
|
||||
# approval_key = await kis_auth.get_approval_key(db_session)
|
||||
# logger.info(" [OK] WebSocket Approval Key Issued.")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f" [FAILED] Authentication Failed: {e}")
|
||||
logger.error(" Please check your AppKey/Secret and ensure KIS API Server is reachable.")
|
||||
# Phase 2: KIS & Telegram
|
||||
await check_kis_connectivity(db_session, settings_obj)
|
||||
await check_telegram_connectivity(settings_obj, is_startup=True)
|
||||
|
||||
# Phase 2.5: Telegram Integration
|
||||
if settings_obj.useTelegram and settings_obj.telegramToken and settings_obj.telegramChatId:
|
||||
logger.info(">> [Phase 2.5] Telegram Integration Enabled. Sending Startup Notification...")
|
||||
msg = "🚀 <b>BatchuKis 배취키스</b> 시스템이 시작되었습니다.\n자동매매 엔진이 가동 중입니다."
|
||||
await telegram_service.send_message(
|
||||
settings_obj.telegramToken,
|
||||
settings_obj.telegramChatId,
|
||||
msg
|
||||
)
|
||||
else:
|
||||
logger.info(">> [Phase 2.5] Telegram Disabled or Token/ChatID missing.")
|
||||
|
||||
# Phase 3: Data Sync (Master Stocks & Account)
|
||||
logger.info(">> [Phase 3-1] Syncing Account Data...")
|
||||
# Phase 3: Data Sync
|
||||
logger.info(">> [Phase 3] Syncing Account & Master Data...")
|
||||
await sync_service.sync_account(db_session)
|
||||
|
||||
logger.info(">> [Phase 3-2] Syncing Master Data (This may take a while)...")
|
||||
from app.services.master_service import master_service
|
||||
await master_service.sync_master_data(db_session)
|
||||
|
||||
# Phase 4: Scheduler
|
||||
# (Scheduler is started in main.py)
|
||||
|
||||
logger.info("=== System Initialization Complete ===")
|
||||
|
||||
Reference in New Issue
Block a user