1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import time
- import requests
- from msg_send_save import send_feishu
- # 服务状态检查间隔(秒)
- CHECK_INTERVAL = 120 # 2分钟
- # 心跳超时时间(秒)
- HEARTBEAT_TIMEOUT = 120 # 2分钟
- # 服务状态跟踪变量
- is_service_online = True # 初始假设服务在线
- last_status_change_time = time.time() # 上次状态变更时间
- def check_service_status():
- """
- 检查服务状态
- Returns:
- bool: True表示服务在线,False表示服务离线
- """
- try:
- response = requests.get('http://127.0.0.1:3100/stat', timeout=10)
- if response.status_code == 200:
- data = response.json()
- last_heartbeat = data.get('heartbeat', 0)
- # 检查最近一次心跳时间是否在超时范围内
- if time.time() - last_heartbeat <= HEARTBEAT_TIMEOUT:
- return True
- else:
- return False
- else:
- return False
- except Exception as e:
- print(f"检查服务状态时出错: {e}")
- return False
- def notify_status_change(online):
- """
- 通知服务状态变更
- Args:
- online (bool): True表示服务上线,False表示服务下线
- """
- if online:
- message = "【服务状态通知】QQ机器人服务已重新上线"
- else:
- message = "【服务状态通知】QQ机器人服务已下线,请及时处理"
-
- send_feishu(message)
- print(message)
- def main():
- """
- 主循环,定时检查服务状态
- """
- global is_service_online, last_status_change_time
-
- print("开始监控服务状态...")
- while True:
- try:
- # 检查当前服务状态
- current_status = check_service_status()
-
- # 如果状态发生变化
- if current_status != is_service_online:
- # 更新状态和变更时间
- is_service_online = current_status
- last_status_change_time = time.time()
-
- # 通知状态变更
- notify_status_change(current_status)
- else:
- # 状态未变化,打印当前状态
- status_text = "在线" if is_service_online else "离线"
- print(f"服务状态: {status_text}")
-
- # 等待下次检查
- time.sleep(CHECK_INTERVAL)
-
- except KeyboardInterrupt:
- print("监控程序已退出")
- break
- except Exception as e:
- print(f"监控过程中发生错误: {e}")
- time.sleep(CHECK_INTERVAL)
- if __name__ == "__main__":
- main()
|