o
    h                     @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ zd dlmZ W n eyC   edw d d	lmZ er`d d
lmZmZmZ d dlmZmZmZ g dZdd Zdd ZG dd dejZ G dd de	Z!dS )    N)
SPANSTATUSSPANDATAOP)DidNotEnableIntegration)should_send_default_pii)Span)capture_internal_exceptions)
monitoringzPymongo not installed)TYPE_CHECKING)AnyDictUnion)CommandFailedEventCommandStartedEventCommandSucceededEvent)insertorderedfindlimitsingleBatch	aggregatecreateIndexesindexesdeletefindAndModifyrenameCollectiontodropc                 C   s   | D ]d}|t v }|rq|dkod| v}|rq|dk}|r-| | D ]}|D ]}d||< q$q q|dv }|rA| | D ]}d| | |< q7q|dk}	|	rb| | D ]}
d|
v rU|
d ng D ]}d|
d |< qWqKqd| |< q| S )Nupdater   	documentsz%s)filterqueryr   pipelinez$match)SAFE_COMMAND_ATTRIBUTES)commandkeyis_safe_fieldupdate_db_commandis_documentdocdoc_keyis_dict_fielditem_keyis_pipeline_fieldr#   	match_key r0   a/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/pymongo.py
_strip_pii-   s8   

r2   c                 C   sb   i }d|t j< | j}|d ur||t j< | jd }|d ur!||t j< | jd }|d ur/||t j< |S )Nmongodbr      )r   	DB_SYSTEMdatabase_nameDB_NAMEconnection_idSERVER_ADDRESSSERVER_PORT)eventdatadb_nameserver_addressserver_portr0   r0   r1   _get_db_dataX   s   





r@   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )CommandTracerc                 C   s
   i | _ d S N)_ongoing_operations)selfr0   r0   r1   __init__n   s   
zCommandTracer.__init__c                 C   s   |j S rB   )
request_id)rD   r;   r0   r0   r1   _operation_keyr   s   zCommandTracer._operation_keyc                 C   s  t  td u rd S t  tt|j}|	dd  |	dd  |	dd  d|j
tjdtj|jtj||ji}z|jd |d< t|jd |d	< W n	 tyW   Y nw d
i i}|j|d
 d< |j|d
 d< |t| z|	dd }t||d
 d< W n	 ty   Y nw t st|}tj|td}t jtj|tj d}|! D ]\}}	|"||	 |#||	 q|! D ]
\}
}	|#|
|	 qt  t j$|dtj|d W d    n1 sw   Y  |% | j&| '|< W d    d S 1 sw   Y  d S )Nz$dbz$clusterTimez
$signaturezdb.namer3   r   znet.peer.namer4   znet.peer.portoperation_ids	operationrequestlsididsession)default)opnameoriginr"   )messagecategorytyper<   )(
sentry_sdk
get_clientget_integrationPyMongoIntegrationr	   dictcopydeepcopyr%   popr6   r   r5   DB_OPERATIONcommand_nameDB_MONGODB_COLLECTIONgetr8   str	TypeErroroperation_idrF   r   r@   KeyErrorr   r2   jsondumps
start_spanr   DBrQ   itemsset_tagset_dataadd_breadcrumb	__enter__rC   rG   )rD   r;   r%   tagsr<   rK   r"   spantagvaluer&   r0   r0   r1   startedv   s`   
"zCommandTracer.startedc                 C   ^   t  td u rd S z| j| |}|tj	 |
d d d  W d S  ty.   Y d S w rB   )rU   rV   rW   rX   rC   r\   rG   
set_statusr   INTERNAL_ERROR__exit__rd   rD   r;   ro   r0   r0   r1   failed      zCommandTracer.failedc                 C   rs   rB   )rU   rV   rW   rX   rC   r\   rG   rt   r   OKrv   rd   rw   r0   r0   r1   	succeeded   ry   zCommandTracer.succeededN)__name__
__module____qualname__rE   rG   rr   rx   r{   r0   r0   r0   r1   rA   m   s    @rA   c                   @   s&   e Zd ZdZde Zedd ZdS )rX   pymongozauto.db.c                   C   s   t t  d S rB   )r
   registerrA   r0   r0   r0   r1   
setup_once   s   zPyMongoIntegration.setup_onceN)r|   r}   r~   
identifierrQ   staticmethodr   r0   r0   r0   r1   rX      s
    
rX   )"rZ   re   rU   sentry_sdk.constsr   r   r   sentry_sdk.integrationsr   r   sentry_sdk.scoper   sentry_sdk.tracingr   sentry_sdk.utilsr	   r   r
   ImportErrortypingr   r   r   r   pymongo.monitoringr   r   r   r$   r2   r@   CommandListenerrA   rX   r0   r0   r0   r1   <module>   s,    +b