
    h}                          d Z ddlZddlmZ  G d dej                        Z G d dej                        Z G d d	ej                        Z	 G d
 dej                        Z G d dej                        Zy)zExample event logger classes.

.. versionadded:: 3.11

These loggers can be registered using :func:`register` or
:class:`~pymongo.mongo_client.MongoClient`.

``monitoring.register(CommandLogger())``

or

``MongoClient(event_listeners=[CommandLogger()])``
    N)
monitoringc                   "    e Zd ZdZd Zd Zd Zy)CommandLoggeraI  A simple listener that logs command events.

    Listens for :class:`~pymongo.monitoring.CommandStartedEvent`,
    :class:`~pymongo.monitoring.CommandSucceededEvent` and
    :class:`~pymongo.monitoring.CommandFailedEvent` events and
    logs them at the `INFO` severity level using :mod:`logging`.
    .. versionadded:: 3.11
    c                 L    t        j                  dj                  |             y )Nz[Command {0.command_name} with request id {0.request_id} started on server {0.connection_id}logginginfoformatselfevents     X/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/pymongo/event_loggers.pystartedzCommandLogger.started-   s     ))/	8    c                 L    t        j                  dj                  |             y )NzCommand {0.command_name} with request id {0.request_id} on server {0.connection_id} succeeded in {0.duration_micros} microsecondsr   r   s     r   	succeededzCommandLogger.succeeded2        $ %+F5M	3r   c                 L    t        j                  dj                  |             y )Nz~Command {0.command_name} with request id {0.request_id} on server {0.connection_id} failed in {0.duration_micros} microsecondsr   r   s     r   failedzCommandLogger.failed8   r   r   N__name__
__module____qualname____doc__r   r   r    r   r   r   r   $   s    8
33r   r   c                   "    e Zd ZdZd Zd Zd Zy)ServerLoggeraZ  A simple listener that logs server discovery events.

    Listens for :class:`~pymongo.monitoring.ServerOpeningEvent`,
    :class:`~pymongo.monitoring.ServerDescriptionChangedEvent`,
    and :class:`~pymongo.monitoring.ServerClosedEvent`
    events and logs them at the `INFO` severity level using :mod:`logging`.

    .. versionadded:: 3.11
    c                 L    t        j                  dj                  |             y )Nz;Server {0.server_address} added to topology {0.topology_id}r   r   s     r   openedzServerLogger.openedI   s     ''-ve}	6r   c                     |j                   j                  }|j                  j                  }||k7  r%t        j                  dj                  |             y y )Nz}Server {0.server_address} changed type from {0.previous_description.server_type_name} to {0.new_description.server_type_name})previous_descriptionserver_typenew_descriptionr   r	   r
   )r   r   previous_server_typenew_server_types       r   description_changedz ServerLogger.description_changedM   sN    $99EE//;;22LL77=ve}F 3r   c                 L    t        j                  dj                  |             y )Nz?Server {0.server_address} removed from topology {0.topology_id}r   warningr
   r   s     r   closedzServerLogger.closedW   s     **0&-	9r   Nr   r   r   r   r   r&   r*   r   r   r   r   r   ?   s    6F9r   r   c                   "    e Zd ZdZd Zd Zd Zy)HeartbeatLoggeral  A simple listener that logs server heartbeat events.

    Listens for :class:`~pymongo.monitoring.ServerHeartbeatStartedEvent`,
    :class:`~pymongo.monitoring.ServerHeartbeatSucceededEvent`,
    and :class:`~pymongo.monitoring.ServerHeartbeatFailedEvent`
    events and logs them at the `INFO` severity level using :mod:`logging`.

    .. versionadded:: 3.11
    c                 L    t        j                  dj                  |             y )Nz*Heartbeat sent to server {0.connection_id}r   r   s     r   r   zHeartbeatLogger.startedf   s     ))/	8r   c                 L    t        j                  dj                  |             y )NzMHeartbeat to server {0.connection_id} succeeded with reply {0.reply.document}r   r   s     r   r   zHeartbeatLogger.succeededj   s     **0&-	9r   c                 L    t        j                  dj                  |             y )NzAHeartbeat to server {0.connection_id} failed with error {0.reply}r(   r   s     r   r   zHeartbeatLogger.failedp   s     66<fUm	Er   Nr   r   r   r   r-   r-   \   s    89Er   r-   c                   "    e Zd ZdZd Zd Zd Zy)TopologyLoggera^  A simple listener that logs server topology events.

    Listens for :class:`~pymongo.monitoring.TopologyOpenedEvent`,
    :class:`~pymongo.monitoring.TopologyDescriptionChangedEvent`,
    and :class:`~pymongo.monitoring.TopologyClosedEvent`
    events and logs them at the `INFO` severity level using :mod:`logging`.

    .. versionadded:: 3.11
    c                 L    t        j                  dj                  |             y )Nz'Topology with id {0.topology_id} openedr   r   s     r   r   zTopologyLogger.opened        $fUm	-r   c                    t        j                  dj                  |             |j                  j                  }|j
                  j                  }||k7  r$t        j                  dj                  |             |j
                  j                         st        j                  d       |j
                  j                         st        j                  d       y y )Nz<Topology description updated for topology id {0.topology_id}zTopology {0.topology_id} changed type from {0.previous_description.topology_type_name} to {0.new_description.topology_type_name}zNo writable servers available.zNo readable servers available.)	r   r	   r
   r!   topology_typer#   has_writable_serverr)   has_readable_server)r   r   previous_topology_typenew_topology_types       r   r&   z"TopologyLogger.description_changed   s     3396%=	B!&!;!;!I!I!11?? 66LL99?H $$88:OO<=$$88:OO<= ;r   c                 L    t        j                  dj                  |             y )Nz'Topology with id {0.topology_id} closedr   r   s     r   r*   zTopologyLogger.closed   r4   r   Nr+   r   r   r   r2   r2   u   s    ->$-r   r2   c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)ConnectionPoolLoggera  A simple listener that logs server connection pool events.

    Listens for :class:`~pymongo.monitoring.PoolCreatedEvent`,
    :class:`~pymongo.monitoring.PoolClearedEvent`,
    :class:`~pymongo.monitoring.PoolClosedEvent`,
    :~pymongo.monitoring.class:`ConnectionCreatedEvent`,
    :class:`~pymongo.monitoring.ConnectionReadyEvent`,
    :class:`~pymongo.monitoring.ConnectionClosedEvent`,
    :class:`~pymongo.monitoring.ConnectionCheckOutStartedEvent`,
    :class:`~pymongo.monitoring.ConnectionCheckOutFailedEvent`,
    :class:`~pymongo.monitoring.ConnectionCheckedOutEvent`,
    and :class:`~pymongo.monitoring.ConnectionCheckedInEvent`
    events and logs them at the `INFO` severity level using :mod:`logging`.

    .. versionadded:: 3.11
    c                 L    t        j                  dj                  |             y )Nz[pool {0.address}] pool createdr   r   s     r   pool_createdz!ConnectionPoolLogger.pool_created       6==eDEr   c                 L    t        j                  dj                  |             y )Nz[pool {0.address}] pool clearedr   r   s     r   pool_clearedz!ConnectionPoolLogger.pool_cleared   r@   r   c                 L    t        j                  dj                  |             y )Nz[pool {0.address}] pool closedr   r   s     r   pool_closedz ConnectionPoolLogger.pool_closed   s    5<<UCDr   c                 L    t        j                  dj                  |             y )Nz>[pool {0.address}][conn #{0.connection_id}] connection createdr   r   s     r   connection_createdz'ConnectionPoolLogger.connection_created   s     **0&-	9r   c                 L    t        j                  dj                  |             y )NzF[pool {0.address}][conn #{0.connection_id}] connection setup succeededr   r   s     r   connection_readyz%ConnectionPoolLogger.connection_ready        228&-	Ar   c                 L    t        j                  dj                  |             y )NzQ[pool {0.address}][conn #{0.connection_id}] connection closed, reason: {0.reason}r   r   s     r   connection_closedz&ConnectionPoolLogger.connection_closed   s     ""(&-	1r   c                 L    t        j                  dj                  |             y )Nz/[pool {0.address}] connection check out startedr   r   s     r   connection_check_out_startedz1ConnectionPoolLogger.connection_check_out_started   s     %ve}	.r   c                 L    t        j                  dj                  |             y )NzB[pool {0.address}] connection check out failed, reason: {0.reason}r   r   s     r   connection_check_out_failedz0ConnectionPoolLogger.connection_check_out_failed   rI   r   c                 L    t        j                  dj                  |             y )NzJ[pool {0.address}][conn #{0.connection_id}] connection checked out of poolr   r   s     r   connection_checked_outz+ConnectionPoolLogger.connection_checked_out   s     66<fUm	Er   c                 L    t        j                  dj                  |             y )NzH[pool {0.address}][conn #{0.connection_id}] connection checked into poolr   r   s     r   connection_checked_inz*ConnectionPoolLogger.connection_checked_in   s     44:F5M	Cr   N)r   r   r   r   r?   rB   rD   rF   rH   rK   rM   rO   rQ   rS   r   r   r   r=   r=      s@     FFE9A1
.AECr   r=   )r   r   pymongor   CommandListenerr   ServerListenerr   ServerHeartbeatListenerr-   TopologyListenerr2   ConnectionPoolListenerr=   r   r   r   <module>rZ      sq      3J.. 369:,, 9:Ej88 E2"-Z00 "-J5C:<< 5Cr   