o
    0 i                     @   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)insertZorderedfindlimitZsingleBatchZ	aggregateZcreateIndexesZindexesdeletefindAndModifyZrenameCollectiontoZ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   Z	documentsz%s)filterqueryr   pipelinez$match)SAFE_COMMAND_ATTRIBUTES)commandkeyZis_safe_fieldZupdate_db_commandZis_documentdocZdoc_keyZis_dict_fieldZitem_keyZis_pipeline_fieldr   Z	match_key r    k/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/integrations/pymongo.py
_strip_pii-   s8   

r"   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_nameZDB_NAMEconnection_idZSERVER_ADDRESSZSERVER_PORT)eventdataZdb_nameserver_addressZserver_portr    r    r!   _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)selfr    r    r!   __init__n   s   
zCommandTracer.__init__c                 C   s   |j S r-   )
request_id)r/   r(   r    r    r!   _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.namer#   r   znet.peer.namer$   znet.peer.portZoperation_idsZ	operationrequestlsididsession)default)opnameoriginr   )messagecategorytyper)   )(
sentry_sdk
get_clientget_integrationPyMongoIntegrationr	   dictcopydeepcopyr   popr&   r   r%   ZDB_OPERATIONZcommand_nameZDB_MONGODB_COLLECTIONgetr'   str	TypeErrorZoperation_idr1   r   r+   KeyErrorr   r"   jsondumpsZ
start_spanr   ZDBr:   itemsZset_tagset_dataZadd_breadcrumb	__enter__r.   r2   )r/   r(   r   tagsr)   r4   r   spantagvaluer   r    r    r!   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 r-   )r>   r?   r@   rA   r.   rE   r2   
set_statusr   INTERNAL_ERROR__exit__rI   r/   r(   rP   r    r    r!   failed      zCommandTracer.failedc                 C   rT   r-   )r>   r?   r@   rA   r.   rE   r2   rU   r   OKrW   rI   rX   r    r    r!   	succeeded   rZ   zCommandTracer.succeededN)__name__
__module____qualname__r0   r2   rS   rY   r\   r    r    r    r!   r,   m   s    @r,   c                   @   s&   e Zd ZdZde Zedd ZdS )rA   pymongozauto.db.c                   C   s   t t  d S r-   )r
   registerr,   r    r    r    r!   
setup_once   s   zPyMongoIntegration.setup_onceN)r]   r^   r_   
identifierr:   staticmethodrb   r    r    r    r!   rA      s
    
rA   )"rC   rJ   r>   Zsentry_sdk.constsr   r   r   Zsentry_sdk.integrationsr   r   Zsentry_sdk.scoper   Zsentry_sdk.tracingr   Zsentry_sdk.utilsr	   r`   r
   ImportErrortypingr   r   r   r   Zpymongo.monitoringr   r   r   r   r"   r+   ZCommandListenerr,   rA   r    r    r    r!   <module>   s,    +b