106 lines
4.3 KiB
Python
106 lines
4.3 KiB
Python
from pymongo import MongoClient
|
||
import config
|
||
|
||
from pymongo.monitoring import (CommandListener, ServerListener, ConnectionPoolListener,
|
||
CommandSucceededEvent, CommandFailedEvent,
|
||
ServerHeartbeatStartedEvent, ServerHeartbeatSucceededEvent, ServerHeartbeatFailedEvent,
|
||
ConnectionCreatedEvent, ConnectionClosedEvent, ConnectionCheckOutStartedEvent,
|
||
ConnectionCheckedOutEvent, ConnectionCheckOutFailedEvent, ConnectionCheckedInEvent)
|
||
|
||
# 命令事件监听器
|
||
class MyCommandListener(CommandListener):
|
||
def started(self, event):
|
||
# print(f"Command {event.command_name} started on {event.connection_id}")
|
||
pass
|
||
|
||
def succeeded(self, event: CommandSucceededEvent):
|
||
# print(f"Command {event.command_name} succeeded in {event.duration_micros} microseconds")
|
||
pass
|
||
|
||
def failed(self, event: CommandFailedEvent):
|
||
print(f"Command {event.command_name} failed with error: {event.failure}")
|
||
|
||
# 服务器事件监听器
|
||
class MyServerListener(ServerListener):
|
||
def opened(self, event):
|
||
print(f"Server {event.server_address} opened")
|
||
|
||
def description_changed(self, event):
|
||
# print(f"Server {event.previous_description.address} description changed to {event.new_description.address}")
|
||
pass
|
||
|
||
def closed(self, event):
|
||
print(f"Server {event.server_address} closed")
|
||
|
||
def heartbeat_started(self, event: ServerHeartbeatStartedEvent):
|
||
# print(f"Heartbeat started on server with id: {event.connection_id}")
|
||
pass
|
||
|
||
def heartbeat_succeeded(self, event: ServerHeartbeatSucceededEvent):
|
||
# print(f"Heartbeat succeeded on server with id: {event.connection_id}")
|
||
pass
|
||
|
||
def heartbeat_failed(self, event: ServerHeartbeatFailedEvent):
|
||
print(f"Heartbeat failed on server with id: {event.connection_id} with error: {event.reply}")
|
||
|
||
# 连接池事件监听器
|
||
class MyPoolListener(ConnectionPoolListener):
|
||
def pool_created(self, event):
|
||
print(f"Connection pool created for {event.address}")
|
||
|
||
def pool_cleared(self, event):
|
||
print(f"Connection pool cleared for {event.address}")
|
||
|
||
def pool_closed(self, event):
|
||
print(f"Connection pool closed for {event.address}")
|
||
|
||
def connection_created(self, event: ConnectionCreatedEvent):
|
||
print(f"Connection {event.connection_id} created for {event.address}")
|
||
|
||
def connection_ready(self, event):
|
||
print(f"Connection {event.connection_id} ready for {event.address}")
|
||
|
||
def pool_ready(self, event):
|
||
print(f"Connection pool ready for {event.address}")
|
||
|
||
def connection_closed(self, event: ConnectionClosedEvent):
|
||
print(f"Connection {event.connection_id} closed for {event.address}, reason: {event.reason}")
|
||
|
||
def connection_check_out_started(self, event: ConnectionCheckOutStartedEvent):
|
||
# print(f"Connection check out started for {event.address}")
|
||
pass
|
||
|
||
def connection_check_out_failed(self, event: ConnectionCheckOutFailedEvent):
|
||
print(f"Connection check out failed for {event.address}, reason: {event.reason}")
|
||
|
||
def connection_checked_out(self, event: ConnectionCheckedOutEvent):
|
||
# print(f"Connection {event.connection_id} checked out for {event.address}")
|
||
pass
|
||
|
||
def connection_checked_in(self, event: ConnectionCheckedInEvent):
|
||
# print(f"Connection {event.connection_id} checked in for {event.address}")
|
||
pass
|
||
|
||
|
||
# 实例化监听器
|
||
command_listener = MyCommandListener()
|
||
server_listener = MyServerListener()
|
||
pool_listener = MyPoolListener()
|
||
|
||
all_event_listeners = [command_listener, server_listener, pool_listener]
|
||
|
||
MONGO_URI = config.MONGO_URI
|
||
DB_NAME = config.MONGO_MAIN_DB_NAME
|
||
|
||
# 创建MongoDB客户端连接
|
||
try:
|
||
# 实例化MongoClient时传入事件监听器
|
||
client = MongoClient(MONGO_URI, event_listeners=all_event_listeners, serverSelectionTimeoutMS=5000) # 设置5秒超时
|
||
mainDB = client[DB_NAME]
|
||
# 主动检查连接状态
|
||
client.admin.command('ping')
|
||
success_message = f"\033[92m成功连接到MongoDB: {DB_NAME},事件监听器已激活。\033[0m"
|
||
print(success_message)
|
||
except Exception as e:
|
||
error_message = f"\033[91m数据库连接失败: {MONGO_URI},请检查MongoDB服务是否已启动。\033[0m"
|
||
print(error_message) |