
    \j                     $   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 	 d dlmZ 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ej>                        Z  G d de	      Z!y# e$ r	  ed      w xY w)    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                    | D ]  }|t         v }|r|dk(  xr d| v}|r|dk(  }|r| |   D ]  }|D ]  }d||<   	  :|dv }|r| |   D ]
  }d| |   |<    S|dk(  }	|	r#| |   D ]  }
d|
v r|
d   ng D ]
  }d|
d   |<     }d| |<    | 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_keys               I/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/pymongo.py
_strip_piir3   -   s    $668ONw0N  [(s| (" (G#'CL((  <<#CL .)-X&.  :-#CL 97?87K(!3QS 9I48HX&y199  I$L N    c                 (   i }d|t         j                  <   d|t         j                  <   | j                  }|||t         j                  <   | j
                  d   }|||t         j                  <   | j
                  d   }|||t         j                  <   |S )Nmongodbpymongor      )r   	DB_SYSTEMDB_DRIVER_NAMEdatabase_nameDB_NAMEconnection_idSERVER_ADDRESSSERVER_PORT)eventdatadb_nameserver_addressserver_ports        r2   _get_db_datarE   W   s    D(D		$-D	 	 !!!G!(X((+N!(6X$$%%%a(K%0X!!"Kr4   c                   <    e Zd Zd
dZdddefdZddZddZdd	Zy)CommandTracerreturnNc                     i | _         y N)_ongoing_operations)selfs    r2   __init__zCommandTracer.__init__m   s
    68 r4   r@   zEUnion[CommandFailedEvent, CommandStartedEvent, CommandSucceededEvent]c                     |j                   S rJ   )
request_id)rL   r@   s     r2   _operation_keyzCommandTracer._operation_keyp   s     r4   c                    t        j                         j                  t              y t	               5  t        t        j                  |j                              }|j                  dd        |j                  dd        |j                  dd        d|j                  t        j                  dt        j                  dt        j                  |j                  t        j                   |j#                  |j                        i}	 |j$                  d   |d<   t'        |j$                  d	         |d
<   di i}|j*                  |d   d<   |j,                  |d   d<   |j/                  t1        |             	 |j                  d      d   }t'        |      |d   d<   t5               st7        |      }t9        j:                  |t&              }t        j<                  t>        j@                  |t        jB                        }|jE                         D ])  \  }}	|jG                  ||	       |jI                  ||	       + |jE                         D ]  \  }
}	|jI                  |
|	        t	               5  t        jJ                  |dt>        j@                  |       d d d        |jM                         | jN                  | jQ                  |      <   d d d        y # t(        $ r Y w xY w# t2        $ r Y Uw xY w# 1 sw Y   ^xY w# 1 sw Y   y xY w)Nz$dbz$clusterTimez
$signaturezdb.namer6   r7   r   znet.peer.namer8   znet.peer.portoperation_ids	operationrequestlsididsession)default)opnameoriginr$   )messagecategorytyperA   ))
sentry_sdk
get_clientget_integrationPyMongoIntegrationr
   dictcopydeepcopyr'   popr;   r   r9   r:   DB_OPERATIONcommand_nameDB_MONGODB_COLLECTIONgetr=   str	TypeErroroperation_idrO   r!   rE   KeyErrorr   r3   jsondumps
start_spanr   DBr[   itemsset_tagset_dataadd_breadcrumb	__enter__rK   rP   )rL   r@   r'   tagsrA   rU   r$   spantagvaluer(   s              r2   startedzCommandTracer.startedv   s     "223EFN(* :	T4==78GKKt$KK-KKd+ 5..""I''%%u'9'9..E<N<N0OD(-(;(;A(>_%(+E,?,?,B(C_% '6r%:D161C1CD!+./4/?/?D!),KKU+,{{6*4036t9_%i0 +,$W-JJw4E((55)00D #jjl *
U S%(c5)* #jjl *
Uc5)* -. ))!G"%%d
 DH>>CSD$$T%8%8%?@u:	T :	T$    . k:	T :	Tsn   CK>-K1AK>4%K"CK>-(K24K>	KK>KK>"	K/+K>.K//K>2K;	7K>>Lc                 ,   t        j                         j                  t              y 	 | j                  j                  | j                  |            }|j                  t        j                         |j                  d d d        y # t        $ r Y y w xY wrJ   )r_   r`   ra   rb   rK   rf   rP   
set_statusr   INTERNAL_ERROR__exit__rn   rL   r@   ry   s      r2   failedzCommandTracer.failed   sz      "223EFN	++//0C0CE0JKDOOJ556MM$d+ 		   AB 	BBc                 ,   t        j                         j                  t              y 	 | j                  j                  | j                  |            }|j                  t        j                         |j                  d d d        y # t        $ r Y y w xY wrJ   )r_   r`   ra   rb   rK   rf   rP   r~   r   OKr   rn   r   s      r2   	succeededzCommandTracer.succeeded   sx      "223EFN	++//0C0CE0JKDOOJMM*MM$d+ 		r   rH   N)r@   r   rH   N)r@   r   rH   N)r@   r   rH   N)	__name__
__module____qualname__rM   intrP   r|   r   r    r4   r2   rG   rG   l   s/    9 V  
 >T@		r4   rG   c                   ,    e Zd ZdZde Zedd       Zy)rb   r7   zauto.db.Nc                  >    t        j                  t                      y rJ   )r   registerrG   r   r4   r2   
setup_oncezPyMongoIntegration.setup_once   s    MO,r4   r   )r   r   r   
identifierr[   staticmethodr   r   r4   r2   rb   rb      s%    J
|$F- -r4   rb   )r'   Dict[str, Any]rH   r   )r@   r   rH   r   )"rd   ro   r_   sentry_sdk.constsr   r   r   sentry_sdk.integrationsr   r   sentry_sdk.scoper   sentry_sdk.tracingr	   sentry_sdk.utilsr
   r7   r   ImportErrortypingr   r   r   r   pymongo.monitoringr   r   r   r&   r3   rE   CommandListenerrG   rb   r   r4   r2   <module>r      s       6 6 = 4 # 80" !''  "'T*^J.. ^B- -A  0
.
//0s   B B