o
    Zhw                     @   s   d dl mZ d dlZd dlmZ d dlmZ d dl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yI   e
dw 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 )    )absolute_importN)Hub)SPANDATA)_should_send_default_pii)DidNotEnableIntegration)Span)capture_internal_exceptions)TYPE_CHECKING)
monitoringzPymongo not installed)AnyDictUnion)CommandFailedEventCommandStartedEventCommandSucceededEvent)insert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!   V/var/www/html/lang_env/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)r0   r)   r!   r!   r"   _operation_keyr   s   zCommandTracer._operation_keyc              	   C   s  t j}|td u rd S t  tt|j}|	dd  |	dd  |	dd  d}d|j
tjdtj|ji}z|jd |d< t|jd	 |d
< W n	 tyS   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|}d|j|}|j||d}	| D ]
\}
}|	|
| q| D ]
\}}|	|| qt  |j|d||d W d    n1 sw   Y  |	 | j | !|< W d    d S 1 sw   Y  d S )Nz$dbz$clusterTimez
$signaturezdb.queryzdb.namer$   r   znet.peer.namer%   znet.peer.portZoperation_idsZ	operationrequestlsididsessionz{} {})opdescriptionr   )messagecategorytyper*   )"r   currentget_integrationPyMongoIntegrationr	   dictcopydeepcopyr   popr'   r   r&   ZDB_OPERATIONZcommand_namer(   str	TypeErrorZoperation_idr2   r   r,   KeyErrorr   r#   formatZ
start_spanitemsZset_tagset_dataZadd_breadcrumb	__enter__r/   r3   )r0   r)   hubr   r8   tagsr*   r5   r   spantagvaluer   r!   r!   r"   startedv   sT   "zCommandTracer.startedc                 C   ^   t j}|td u rd S z| j| |}|d |d d d  W d S  t	y.   Y d S w )NZinternal_error
r   r=   r>   r?   r/   rC   r3   Z
set_status__exit__rF   r0   r)   rK   rM   r!   r!   r"   failed      
zCommandTracer.failedc                 C   rQ   )NokrR   rT   r!   r!   r"   	succeeded   rV   zCommandTracer.succeededN)__name__
__module____qualname__r1   r3   rP   rU   rX   r!   r!   r!   r"   r-   m   s    7r-   c                   @   s   e Zd ZdZedd ZdS )r?   pymongoc                   C   s   t t  d S r.   )r   registerr-   r!   r!   r!   r"   
setup_once   s   zPyMongoIntegration.setup_onceN)rY   rZ   r[   
identifierstaticmethodr^   r!   r!   r!   r"   r?      s    r?   )#
__future__r   rA   Z
sentry_sdkr   Zsentry_sdk.constsr   Zsentry_sdk.hubr   Zsentry_sdk.integrationsr   r   Zsentry_sdk.tracingr   Zsentry_sdk.utilsr	   Zsentry_sdk._typesr
   r\   r   ImportErrortypingr   r   r   Zpymongo.monitoringr   r   r   r   r#   r,   ZCommandListenerr-   r?   r!   r!   r!   r"   <module>   s,    +[