o
    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dZd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dropcommandDict[str, Any]returnc                 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)r   keyis_safe_fieldupdate_db_commandis_documentdocdoc_keyis_dict_fielditem_keyis_pipeline_fieldr&   	match_key r2   \/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/integrations/pymongo.py
_strip_pii-   s8   

r4   eventr   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)r5   datadb_nameserver_addressserver_portr2   r2   r3   _get_db_dataW   s   





rB   c                   @   sF   e Zd ZdddZdddefddZdd
dZdddZdddZdS )CommandTracerr!   Nc                 C   s
   i | _ d S N)_ongoing_operations)selfr2   r2   r3   __init__l   s   
zCommandTracer.__init__r5   zEUnion[CommandFailedEvent, CommandStartedEvent, CommandSucceededEvent]c                 C   s   |j S rD   )
request_id)rF   r5   r2   r2   r3   _operation_keyo   s   zCommandTracer._operation_keyr   c                 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.namer6   r   znet.peer.namer7   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   popr9   r   r8   DB_OPERATIONcommand_nameDB_MONGODB_COLLECTIONgetr;   str	TypeErroroperation_idrH   r"   rB   KeyErrorr   r4   jsondumps
start_spanr   DBrS   itemsset_tagset_dataadd_breadcrumb	__enter__rE   rI   )rF   r5   r   tagsr>   rM   r%   spantagvaluer(   r2   r2   r3   startedu   s`   
"zCommandTracer.startedr   c                 C   ^   t  td u rd S z| j| |}|tj	 |
d d d  W d S  ty.   Y d S w rD   )rW   rX   rY   rZ   rE   r^   rI   
set_statusr   INTERNAL_ERROR__exit__rf   rF   r5   rq   r2   r2   r3   failed      zCommandTracer.failedr   c                 C   ru   rD   )rW   rX   rY   rZ   rE   r^   rI   rv   r   OKrx   rf   ry   r2   r2   r3   	succeeded   r{   zCommandTracer.succeededr!   N)r5   r   r!   N)r5   r   r!   N)r5   r   r!   N)	__name__
__module____qualname__rG   intrI   rt   rz   r}   r2   r2   r2   r3   rC   k   s    



?rC   c                   @   s(   e Zd ZdZde ZedddZdS )rZ   pymongozauto.db.r!   Nc                   C   s   t t  d S rD   )r
   registerrC   r2   r2   r2   r3   
setup_once   s   zPyMongoIntegration.setup_oncer~   )r   r   r   
identifierrS   staticmethodr   r2   r2   r2   r3   rZ      s
    
rZ   )r   r    r!   r    )r5   r   r!   r    )"r\   rg   rW   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'   r4   rB   CommandListenerrC   rZ   r2   r2   r2   r3   <module>   s,    

*`