o
    h$                     @  s   d Z ddlmZ ddlZddlmZ G dd dejZG dd dejZ	G d	d
 d
ej
ZG dd dejZG dd dejZdS )aa  Example 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()])``

.. seealso:: This module is compatible with both the synchronous and asynchronous PyMongo APIs.

    )annotationsN)
monitoringc                   @  .   e Zd ZdZdddZdd	d
ZdddZdS )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
    eventmonitoring.CommandStartedEventreturnNonec                 C  s&   t d|j d|j d|j  d S )NCommand  with request id z started on server )logginginfocommand_name
request_idconnection_idselfr    r   H/var/www/html/venv/lib/python3.10/site-packages/pymongo/event_loggers.pystarted1   s   
zCommandLogger.started monitoring.CommandSucceededEventc                 C  0   t d|j d|j d|j d|j d	 d S )Nr
   r    on server z succeeded in  microsecondsr   r   r   r   r   Zduration_microsr   r   r   r   	succeeded8      
zCommandLogger.succeededmonitoring.CommandFailedEventc                 C  r   )Nr
   r   r   z failed in r   r   r   r   r   r   failed@   r   zCommandLogger.failedN)r   r   r   r	   )r   r   r   r	   )r   r   r   r	   __name__
__module____qualname____doc__r   r   r   r   r   r   r   r   '   s
    
	
r   c                   @  r   )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
    r   monitoring.ServerOpeningEventr   r	   c                 C     t d|j d|j  d S )NServer z added to topology )r   r   server_addresstopology_idr   r   r   r   openedT      zServerLogger.opened(monitoring.ServerDescriptionChangedEventc                 C  sF   |j j}|jj}||kr!td|j d|j j d|jj  d S d S )Nr'    changed type from  to )previous_descriptionZserver_typenew_descriptionr   r   r(   Zserver_type_name)r   r   Zprevious_server_typeZnew_server_typer   r   r   description_changedW   s   
z ServerLogger.description_changedmonitoring.ServerClosedEventc                 C  r&   )Nr'   z removed from topology )r   warningr(   r)   r   r   r   r   closedb   r+   zServerLogger.closedN)r   r%   r   r	   )r   r,   r   r	   )r   r2   r   r	   r    r!   r"   r#   r*   r1   r4   r   r   r   r   r$   I   s
    


r$   c                   @  r   )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
    r   &monitoring.ServerHeartbeatStartedEventr   r	   c                 C  s   t d|j  d S )NzHeartbeat sent to server )r   r   r   r   r   r   r   r   q   s   zHeartbeatLogger.started(monitoring.ServerHeartbeatSucceededEventc                 C  s    t d|j d|jj  d S )NHeartbeat to server z succeeded with reply )r   r   r   replyZdocumentr   r   r   r   r   t   s
   
zHeartbeatLogger.succeeded%monitoring.ServerHeartbeatFailedEventc                 C  r&   )Nr9   z failed with error )r   r3   r   r:   r   r   r   r   r   |   s   zHeartbeatLogger.failedN)r   r7   r   r	   )r   r8   r   r	   )r   r;   r   r	   r   r   r   r   r   r6   f   s
    


r6   c                   @  r   )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
    r   monitoring.TopologyOpenedEventr   r	   c                 C     t d|j d d S )NTopology with id z openedr   r   r)   r   r   r   r   r*         zTopologyLogger.opened*monitoring.TopologyDescriptionChangedEventc                 C  s   t d|j  |jj}|jj}||kr(t d|j d|jj d|jj  |j s2t d |j	 s>t d d S d S )Nz-Topology description updated for topology id z	Topology r-   r.   zNo writable servers available.zNo readable servers available.)
r   r   r)   r/   Ztopology_typer0   Ztopology_type_nameZhas_writable_serverr3   Zhas_readable_server)r   r   Zprevious_topology_typeZnew_topology_typer   r   r   r1      s    



z"TopologyLogger.description_changedmonitoring.TopologyClosedEventc                 C  r>   )Nr?   z closedr@   r   r   r   r   r4      rA   zTopologyLogger.closedN)r   r=   r   r	   )r   rB   r   r	   )r   rC   r   r	   r5   r   r   r   r   r<      s
    


r<   c                   @  s~   e Zd ZdZd'ddZd(d	d
Zd)ddZd*ddZd+ddZd,ddZ	d-ddZ
d.ddZd/ddZd0d!d"Zd1d$d%Zd&S )2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
    r   monitoring.PoolCreatedEventr   r	   c                 C  r>   )N[pool z] pool createdr   r   addressr   r   r   r   pool_created   rA   z!ConnectionPoolLogger.pool_createdmonitoring.PoolReadyEventc                 C  r>   )NrF   z] pool readyrG   r   r   r   r   
pool_ready   rA   zConnectionPoolLogger.pool_readymonitoring.PoolClearedEventc                 C  r>   )NrF   z] pool clearedrG   r   r   r   r   pool_cleared   rA   z!ConnectionPoolLogger.pool_clearedmonitoring.PoolClosedEventc                 C  r>   )NrF   z] pool closedrG   r   r   r   r   pool_closed   rA   z ConnectionPoolLogger.pool_closed!monitoring.ConnectionCreatedEventc                 C      t d|j d|j d d S )NrF   ][conn #z] connection createdr   r   rH   r   r   r   r   r   connection_created   s    z'ConnectionPoolLogger.connection_createdmonitoring.ConnectionReadyEventc                 C  rQ   )NrF   rR   z] connection setup succeededrS   r   r   r   r   connection_ready      z%ConnectionPoolLogger.connection_ready monitoring.ConnectionClosedEventc              	   C  s(   t d|j d|j d|j d d S )NrF   rR   z] connection closed, reason: "")r   r   rH   r   reasonr   r   r   r   connection_closed   s
   z&ConnectionPoolLogger.connection_closed)monitoring.ConnectionCheckOutStartedEventc                 C  r>   )NrF   z] connection check out startedrG   r   r   r   r   connection_check_out_started   s   z1ConnectionPoolLogger.connection_check_out_started(monitoring.ConnectionCheckOutFailedEventc                 C  r&   )NrF   z'] connection check out failed, reason: )r   r   rH   rZ   r   r   r   r   connection_check_out_failed   r+   z0ConnectionPoolLogger.connection_check_out_failed$monitoring.ConnectionCheckedOutEventc                 C  rQ   )NrF   rR   z ] connection checked out of poolrS   r   r   r   r   connection_checked_out   rW   z+ConnectionPoolLogger.connection_checked_out#monitoring.ConnectionCheckedInEventc                 C  rQ   )NrF   rR   z] connection checked into poolrS   r   r   r   r   connection_checked_in   rW   z*ConnectionPoolLogger.connection_checked_inN)r   rE   r   r	   )r   rJ   r   r	   )r   rL   r   r	   )r   rN   r   r	   )r   rP   r   r	   )r   rU   r   r	   )r   rX   r   r	   )r   r\   r   r	   )r   r^   r   r	   )r   r`   r   r	   )r   rb   r   r	   )r    r!   r"   r#   rI   rK   rM   rO   rT   rV   r[   r]   r_   ra   rc   r   r   r   r   rD      s    









rD   )r#   
__future__r   r   Zpymongor   ZCommandListenerr   ZServerListenerr$   ZServerHeartbeatListenerr6   ZTopologyListenerr<   ZConnectionPoolListenerrD   r   r   r   r   <module>   s   "$