U 췀g @sddlZddlZddlZddlmZmZmZddlmZm Z ddl m Z ddl m Z ddlmZzddlmZWnek redYnXdd lmZerdd lmZmZmZdd lmZmZmZd d dddddddddddg ZddZddZGdddejZ Gdd d e Z!dS)!N) SPANSTATUSSPANDATAOP) DidNotEnable Integration)should_send_default_pii)Span)capture_internal_exceptions) monitoringzPymongo not installed) TYPE_CHECKING)AnyDictUnion)CommandFailedEventCommandStartedEventCommandSucceededEventinsertorderedfindlimitZ singleBatchZ aggregateZ createIndexesZindexesdelete findAndModifyZrenameCollectiontoZdropc Cs|D]}|tk}|rq|dko$d|k}|r,q|dk}|rZ||D]}|D] }d||<qHq@q|dk}|r||D]}d|||<qnq|dk} | r||D]*} d| kr| dngD]} d| d| <qqqd||<q|S)NupdaterZ documentsz%s)filterqueryrpipelinez$match)SAFE_COMMAND_ATTRIBUTES) commandkeyZ is_safe_fieldZupdate_db_commandZ is_documentdocZdoc_keyZ is_dict_fieldZitem_keyZis_pipeline_fieldrZ match_keyr!M/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/pymongo.py _strip_pii-s4     r#cCsbi}d|tj<|j}|dk r&||tj<|jd}|dk rB||tj<|jd}|dk r^||tj<|S)Nmongodbr)r DB_SYSTEM database_nameZDB_NAME connection_idZSERVER_ADDRESSZ SERVER_PORT)eventdataZdb_nameserver_addressZ server_portr!r!r" _get_db_dataXs      r,c@s4eZdZddZddZddZddZd d Zd S) CommandTracercCs i|_dSN)_ongoing_operations)selfr!r!r"__init__nszCommandTracer.__init__cCs|jSr.) request_id)r0r)r!r!r"_operation_keyrszCommandTracer._operation_keyc CsttdkrdSttt|j}| dd| dd| ddd|j t j dt j |jt j||ji}z$|jd|d<t|jd|d <Wntk rYnXd ii}|j|d d <|j|d d <|t|z"| d d}t||d d<Wntk rYnXts0t|}tj|td}tjtj|tj d}|!D]"\}} |"|| |#|| qZ|!D]\} } |#| | qttj$|dtj|dW5QRX|%|j&|'|<W5QRXdS)Nz$dbz $clusterTimez $signaturezdb.namer$rz net.peer.namer%z net.peer.portZ operation_idsZ operationrequestlsididsession)default)opnameoriginr)messagecategorytyper*)( sentry_sdk get_clientget_integrationPyMongoIntegrationr dictcopydeepcopyrpopr'rr&Z DB_OPERATION command_nameZDB_MONGODB_COLLECTIONgetr(str TypeErrorZ operation_idr2rr,KeyErrorrr#jsondumpsZ start_spanrZDBr;itemsZset_tagset_dataZadd_breadcrumb __enter__r/r3) r0r)rtagsr*r5rspantagvaluerr!r!r"startedvsf      zCommandTracer.startedcCsbttdkrdSz0|j||}|tj | dddWnt k r\YdSXdSr.) r?r@rArBr/rFr3 set_statusrINTERNAL_ERROR__exit__rKr0r)rRr!r!r"faileds zCommandTracer.failedcCs`ttdkrdSz0|j||}|tj | dddWnt k rZYnXdSr.) r?r@rArBr/rFr3rVrOKrXrKrYr!r!r" succeededs zCommandTracer.succeededN)__name__ __module__ __qualname__r1r3rUrZr\r!r!r!r"r-ms @ r-c@s&eZdZdZdeZeddZdS)rBpymongozauto.db.cCsttdSr.)r registerr-r!r!r!r" setup_onceszPyMongoIntegration.setup_onceN)r]r^r_ identifierr; staticmethodrbr!r!r!r"rBs rB)"rDrLr?Zsentry_sdk.constsrrrZsentry_sdk.integrationsrrZsentry_sdk.scoperZsentry_sdk.tracingrZsentry_sdk.utilsr r`r ImportErrortypingr r r rZpymongo.monitoringrrrrr#r,ZCommandListenerr-rBr!r!r!r"sB    +b