U
    ~fh$                     @  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                   @  s@   e Zd ZdZdddddZddddd	Zd
d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
    zmonitoring.CommandStartedEventNoneeventreturnc                 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   9/tmp/pip-unpacked-wheel-36gvocj8/pymongo/event_loggers.pystarted1   s    zCommandLogger.startedz monitoring.CommandSucceededEventc                 C  s0   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   s    $zCommandLogger.succeededzmonitoring.CommandFailedEventc                 C  s0   t d|j d|j d|j d|j d	 d S )Nr	   r
   r   z failed in r   r   r   r   r   r   failed@   s    $zCommandLogger.failedN__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   '   s   	r   c                   @  s@   e Zd ZdZdddddZddddd	Zd
ddddZdS )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
    zmonitoring.ServerOpeningEventr   r   c                 C  s   t d|j d|j  d S )NServer z added to topology )r   r   server_addresstopology_idr   r   r   r   openedT   s    zServerLogger.openedz(monitoring.ServerDescriptionChangedEventc                 C  sB   |j j}|jj}||kr>td|j d|j j d|jj  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_changedzmonitoring.ServerClosedEventc                 C  s   t d|j d|j  d S )Nr    z removed from topology )r   warningr!   r"   r   r   r   r   closedb   s    zServerLogger.closedNr   r   r   r   r#   r(   r*   r   r   r   r   r   I   s   
r   c                   @  s@   e Zd ZdZdddddZddddd	Zd
ddddZdS )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
    z&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.startedz(monitoring.ServerHeartbeatSucceededEventc                 C  s    t d|j d|jj  d S )NHeartbeat to server z succeeded with reply )r   r   r   replydocumentr   r   r   r   r   t   s    zHeartbeatLogger.succeededz%monitoring.ServerHeartbeatFailedEventc                 C  s   t d|j d|j  d S )Nr-   z failed with error )r   r)   r   r.   r   r   r   r   r   |   s    zHeartbeatLogger.failedNr   r   r   r   r   r,   f   s   
r,   c                   @  s@   e Zd ZdZdddddZddddd	Zd
ddddZdS )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
    zmonitoring.TopologyOpenedEventr   r   c                 C  s   t d|j d d S )NTopology with id z openedr   r   r"   r   r   r   r   r#      s    zTopologyLogger.openedz*monitoring.TopologyDescriptionChangedEventc                 C  s|   t d|j  |jj}|jj}||krPt d|j d|jj d|jj  |j sdt d |j	 sxt d 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_typer'   Ztopology_type_nameZhas_writable_serverr)   Zhas_readable_server)r   r   Zprevious_topology_typeZnew_topology_typer   r   r   r(      s    


z"TopologyLogger.description_changedzmonitoring.TopologyClosedEventc                 C  s   t d|j d d S )Nr1   z closedr2   r   r   r   r   r*      s    zTopologyLogger.closedNr+   r   r   r   r   r0      s   
r0   c                   @  s   e Zd ZdZdddddZddddd	Zd
ddddZdddddZdddddZdddddZ	dddddZ
dddddZdddddZdddd d!Zd"ddd#d$Zd%S )&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
    zmonitoring.PoolCreatedEventr   r   c                 C  s   t d|j d d S )N[pool z] pool createdr   r   addressr   r   r   r   pool_created   s    z!ConnectionPoolLogger.pool_createdzmonitoring.PoolReadyEventc                 C  s   t d|j d d S )Nr4   z] pool readyr5   r   r   r   r   
pool_ready   s    zConnectionPoolLogger.pool_readyzmonitoring.PoolClearedEventc                 C  s   t d|j d d S )Nr4   z] pool clearedr5   r   r   r   r   pool_cleared   s    z!ConnectionPoolLogger.pool_clearedzmonitoring.PoolClosedEventc                 C  s   t d|j d d S )Nr4   z] pool closedr5   r   r   r   r   pool_closed   s    z ConnectionPoolLogger.pool_closedz!monitoring.ConnectionCreatedEventc                 C  s    t d|j d|j d d S )Nr4   ][conn #z] connection createdr   r   r6   r   r   r   r   r   connection_created   s    z'ConnectionPoolLogger.connection_createdzmonitoring.ConnectionReadyEventc                 C  s    t d|j d|j d d S )Nr4   r;   z] connection setup succeededr<   r   r   r   r   connection_ready   s    z%ConnectionPoolLogger.connection_readyz monitoring.ConnectionClosedEventc              	   C  s(   t d|j d|j d|j d d S )Nr4   r;   z] connection closed, reason: "")r   r   r6   r   reasonr   r   r   r   connection_closed   s    z&ConnectionPoolLogger.connection_closedz)monitoring.ConnectionCheckOutStartedEventc                 C  s   t d|j d d S )Nr4   z] connection check out startedr5   r   r   r   r   connection_check_out_started   s    z1ConnectionPoolLogger.connection_check_out_startedz(monitoring.ConnectionCheckOutFailedEventc                 C  s   t d|j d|j  d S )Nr4   z'] connection check out failed, reason: )r   r   r6   r@   r   r   r   r   connection_check_out_failed   s    z0ConnectionPoolLogger.connection_check_out_failedz$monitoring.ConnectionCheckedOutEventc                 C  s    t d|j d|j d d S )Nr4   r;   z ] connection checked out of poolr<   r   r   r   r   connection_checked_out   s    z+ConnectionPoolLogger.connection_checked_outz#monitoring.ConnectionCheckedInEventc                 C  s    t d|j d|j d d S )Nr4   r;   z] connection checked into poolr<   r   r   r   r   connection_checked_in   s    z*ConnectionPoolLogger.connection_checked_inN)r   r   r   r   r7   r8   r9   r:   r=   r>   rA   rB   rC   rD   rE   r   r   r   r   r3      s   r3   )r   
__future__r   r   Zpymongor   ZCommandListenerr   ZServerListenerr   ZServerHeartbeatListenerr,   ZTopologyListenerr0   ZConnectionPoolListenerr3   r   r   r   r   <module>   s   "$