自動化排程
bot的其中一個功能就是自動化的每週檢查排程,設定每周一早上九點發送檢查結果,而這背後的運作原理來自於 Task 系統讓 Bot 能夠在背景執行定期任務
@tasks.loop(hours=24)
async def check_new_prs_task():
# 檢查是否達到設定的間隔天數
time_since_last_check = datetime.now() - last_check_time
if time_since_last_check.days < CHECK_INTERVAL_DAYS:
return
print(f"🔍 進行手動每週檢查...")
prs, error = await get_merged_prs_since(since_date)
# 處理 PR 資料並發送報告
透過非同步設計,它不會阻塞其他指令的處理,在等待間隔時間時,Bot仍然可以即時回應使用者的指令
錯誤處理與恢復
在分散式系統中,錯誤是不可避免的,Bot會透過非同步錯誤處理機制確保單點故障不影響整體服務
多層錯誤處理策略:
async def execute_scheduled_check():
try:
prs, error = await get_merged_prs_since(since_date)
if error:
# 非同步發送錯誤通知
await send_changelog_to_channel(f"❌ 自動檢查失敗: {error}")
return
# 正常處理流程...
except Exception as e:
# 非同步錯誤記錄
logger.error("scheduled_check_failed", error=str(e))
# 不拋出異常,避免崩潰