o
    hw                     @   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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   b/var/www/html/aiguide_backend/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 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.namer3   r   znet.peer.namer4   znet.peer.portoperation_ids	operationrequestlsididsessionz{} {})opdescriptionr"   )messagecategorytyper<   )"r   currentget_integrationPyMongoIntegrationr	   dictcopydeepcopyr%   popr6   r   r5   DB_OPERATIONcommand_namer8   str	TypeErroroperation_idrF   r   r@   KeyErrorr   r2   format
start_spanitemsset_tagset_dataadd_breadcrumb	__enter__rC   rG   )rD   r;   hubr%   rN   tagsr<   rK   r"   spantagvaluer&   r0   r0   r1   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 )Ninternal_error
r   rS   rT   rU   rC   rY   rG   
set_status__exit__r_   rD   r;   rg   ri   r0   r0   r1   failed      
zCommandTracer.failedc                 C   rm   )Nokro   rr   r0   r0   r1   	succeeded   rt   zCommandTracer.succeededN)__name__
__module____qualname__rE   rG   rl   rs   rv   r0   r0   r0   r1   rA   m   s    7rA   c                   @   s   e Zd ZdZedd ZdS )rU   pymongoc                   C   s   t t  d S rB   )r   registerrA   r0   r0   r0   r1   
setup_once   s   zPyMongoIntegration.setup_onceN)rw   rx   ry   
identifierstaticmethodr|   r0   r0   r0   r1   rU      s    rU   )#
__future__r   rW   
sentry_sdkr   sentry_sdk.constsr   sentry_sdk.hubr   sentry_sdk.integrationsr   r   sentry_sdk.tracingr   sentry_sdk.utilsr	   sentry_sdk._typesr
   rz   r   ImportErrortypingr   r   r   pymongo.monitoringr   r   r   r$   r2   r@   CommandListenerrA   rU   r0   r0   r0   r1   <module>   s,    +[