
    ɯei#                       d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 ddlmZmZ ddlmZ dd	lmZmZ e	rdd
lmZ ddlmZ  ej.                  e      Ze G d de             Z G d d      Z G d d      Z	 	 	 d	 	 	 	 	 	 	 ddZy)    )annotationsN)Enumunique)Lock)TYPE_CHECKINGAny   )CLIENT_NAMESNOWFLAKE_CONNECTOR_VERSION)SecretDetector)ENABLE_TELEMETRY_LOGrt_plain_logger)SnowflakeConnection)SnowflakeRestfulc                      e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8y7)8TelemetryField client_time_consume_first_resultclient_time_consume_last_resultclient_time_downloading_chunksclient_time_parsing_chunksclient_sql_exceptionclient_ocsp_exceptionclient_http_exceptionclient_get_partitions_used'client_pyformat_empty_seq_interpolationclient_fetch_pandas_allclient_fetch_pandas_batchesclient_fetch_arrow_allclient_fetch_arrow_batchesclient_write_pandasclient_imported_packagesmini_core_importclient_multi_statement_querytypesourcequery_id	sql_statedriver_typedriver_versionreasonvalue	exceptionErrorNumberErrorMessage
StacktracedriverversiontelemetryServerDeploymentconnectionStringexceptionMessageerrorMessageexceptionStackTrace	eventType	errorCodesqlStaterequestresponseresponseStatusLineresponseStatusCoderetryTimeout
retryCounteventSubTypesfcPeerHostcertIdocspRequestBase64ocspResponderURLinsecureModefailOpencacheEnabledcacheHitN)9__name__
__module____qualname__TIME_CONSUME_FIRST_RESULTTIME_CONSUME_LAST_RESULTTIME_DOWNLOADING_CHUNKSTIME_PARSING_CHUNKSSQL_EXCEPTIONOCSP_EXCEPTIONHTTP_EXCEPTIONGET_PARTITIONS_USEDEMPTY_SEQ_INTERPOLATIONPANDAS_FETCH_ALLPANDAS_FETCH_BATCHESARROW_FETCH_ALLARROW_FETCH_BATCHESPANDAS_WRITEIMPORTED_PACKAGESCORE_IMPORTMULTI_STATEMENTKEY_TYPE
KEY_SOURCE	KEY_SFQIDKEY_SQLSTATEKEY_DRIVER_TYPEKEY_DRIVER_VERSION
KEY_REASON	KEY_VALUEKEY_EXCEPTIONKEY_ERROR_NUMBERKEY_ERROR_MESSAGEKEY_STACKTRACEKEY_OOB_DRIVERKEY_OOB_VERSION#KEY_OOB_TELEMETRY_SERVER_DEPLOYMENTKEY_OOB_CONNECTION_STRINGKEY_OOB_EXCEPTION_MESSAGEKEY_OOB_ERROR_MESSAGEKEY_OOB_EXCEPTION_STACK_TRACEKEY_OOB_EVENT_TYPEKEY_OOB_ERROR_CODEKEY_OOB_SQL_STATEKEY_OOB_REQUESTKEY_OOB_RESPONSEKEY_OOB_RESPONSE_STATUS_LINEKEY_OOB_RESPONSE_STATUS_CODEKEY_OOB_RETRY_TIMEOUTKEY_OOB_RETRY_COUNTKEY_OOB_EVENT_SUB_TYPEKEY_OOB_SFC_PEER_HOSTKEY_OOB_CERT_IDKEY_OOB_OCSP_REQUEST_BASE64KEY_OOB_OCSP_RESPONDER_URLKEY_OOB_INSECURE_MODEKEY_OOB_FAIL_OPENKEY_OOB_CACHE_ENABLEDKEY_OOB_CACHE_HIT     _/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/connector/telemetry.pyr   r      s5    !C@>6*M,N,N6G08.O6(L2$K4OHJIL#O)JIM$&!NNO*E' 2 2*$9!$$"O!#7 #7 *&+)O"5!3*"*"r   r   c                  V    e Zd ZdZdZdZd	dZe	 	 d
	 	 	 	 	 	 	 dd       ZddZ	ddZ
y)TelemetryDataz>An instance of telemetry data which can be sent to the server.r	   r   c                     || _         || _        y Nmessage	timestamp)selfr   r   s      r   __init__zTelemetryData.__init__^   s    "r   Nc                4     | t        |xs i ||      |      S )ab  
        Generate telemetry data with driver info from given dict and timestamp.
        It takes an optional connection object to read data from.
        It also takes a boolean is_oob_telemetry to indicate whether it's for out-of-band telemetry, as
        naming of keys for driver and version is different from the ones of in-band telemetry.
        	from_dict
connectionis_oob_telemetry)generate_telemetry_data_dict)clsr   r   r   r   s        r   from_telemetry_data_dictz&TelemetryData.from_telemetry_data_dictb   s+     ($?%!1
 
 	
r   c                F    | j                   t        | j                        dS )Nr   )r   strr   r   s    r   to_dictzTelemetryData.to_dicty   s    <<c$..6IJJr   c                4    t        | j                               S r   )r   r   r   s    r   __repr__zTelemetryData.__repr__|   s    4<<>""r   returnNoneNF)r   dictr   intr   SnowflakeConnection | Noner   bool)r   dict[str, Any])r   r   )rI   rJ   rK   __doc__TRUEFALSEr   classmethodr   r   r   r   r   r   r   r   X   sa    HDE# 
 26!&

 
 /	

 
 
,K#r   r   c                  l    e Zd ZdZdZdZdddZddZddZdddZ	e
dd	       Zddd
ZddZd Zd Zy)TelemetryClientzFClient to enqueue and send metrics to the telemetry endpoint in batch.z/telemetry/sendd   Nc                ~    || _         g | _        |xs t        j                  | _        t               | _        d| _        y )NT)_rest
_log_batchr   DEFAULT_FORCE_FLUSH_SIZE_flush_sizer   _lock_enabled)r   rest
flush_sizes      r   r   zTelemetryClient.__init__   s3    .2
%Q)Q)QV
r   c                T   | j                   rt        d      | j                  st        j	                  d       y | j
                  5  | j                  j                  |       d d d        t        | j                        | j                  k\  r| j                          y y # 1 sw Y   =xY w)Nz3Attempted to add log when TelemetryClient is closedz'TelemetryClient disabled. Ignoring log.)	is_closed	Exceptionr   loggerdebugr   r   appendlenr   
send_batchr   telemetry_datas     r   add_log_to_batchz TelemetryClient.add_log_to_batch   s    >>QRRLLBCZZ 	3OO"">2	3 t4#3#33OO 4	3 	3s   BB'c                t    	 | j                  |       y # t        $ r t        j                  dd       Y y w xY w)NzFailed to add log to telemetry.Texc_info)r   r   r   warningr   s     r   try_add_log_to_batchz$TelemetryClient.try_add_log_to_batch   s8    	M!!.1 	MNN<tNL	Ms     77c           	     R   | j                   rt        d      | j                  st        j	                  d       y | j
                  5  | j                  }g | _        d d d        st        j	                  d       y d|D cg c]  }|j                          c}i}t        j	                  dt        |      t        j                  t        |            d          t        rt        j                  d|        	 | j                  j                  t         j"                  |dd d	| 
      }|d   s't        j%                  dt        |             d| _        y t        j	                  d       y # 1 sw Y   xY wc c}w # t        $ r! d| _        t        j	                  dd       Y y w xY w)Nz6Attempted to send batch when TelemetryClient is closedz+TelemetryClient disabled. Not sending logs.zNothing to send to telemetry.logsz)Sending %d logs to telemetry. Data is %s.r	   z$Inband telemetry data being sent is post   )bodymethodclienttimeout	_no_retrysuccesszDNon-success response from telemetry server: %s. Disabling telemetry.Fz,Successfully uploading metrics to telemetry.z&Failed to upload metrics to telemetry.Tr   )r   r   r   r   r   r   r   r   r   r   mask_secretsr   r   r   r   r:   r   SF_PATH_TELEMETRYinfo)r   retryto_sendxr   rets         r   r   zTelemetryClient.send_batch   sp   >>TUULLFGZZ 	!ooG DO	! LL89g6677I''D	215	

  !!$H"OP	R**$$11#) % C y>+H
 !&KLE	! 	! 76  	R!DMLLADLQ	Rs+   E*?E78AE< E< *E4<'F&%F&c                    | j                   d u S r   )r   r   s    r   r   zTelemetryClient.is_closed   s    zzT!!r   c                z    | j                   s/t        j                  d       | j                  |       d | _        y y )NzClosing telemetry client.)r   )r   r   r   r   r   )r   r   s     r   closezTelemetryClient.close   s0    ~~LL45OO%O(DJ r   c                    d| _         y r   r   r   s    r   disablezTelemetryClient.disable   s	    r   c                    | j                   S r   r   r   s    r   
is_enabledzTelemetryClient.is_enabled   s    }}r   c                ,    t        | j                        S r   )r   r   r   s    r   buffer_sizezTelemetryClient.buffer_size   s    4??##r   r   )r   r   r   r   )r   r   r   r   )F)r   r   r   r   )r   r   r   )rI   rJ   rK   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r      sP    P)"M,R\ " "$r   r   c                p   | xs i } |sot         j                  j                  t        t         j                  j                  t
        t         j                  j                  |r|j                  i| S t        i| S t         j                  j                  t        t         j                  j                  t
        i| S )a^  
    Generate telemetry data with driver info.
    The method also takes an optional dict to update from and optional connection object to read data from.
    It also takes a boolean is_oob_telemetry to indicate whether it's for out-of-band telemetry, as
    naming of keys for driver and version is different from the ones of in-band telemetry.
    )
r   ra   r+   r
   rb   r   r^   applicationri   rj   r   s      r   r   r      s     RI   **00+--335P%%++*4
&&		
 	

 ;F		
 	
 ))//**002M
 
r   )NNF)r   zdict | Noner   r   r   r   r   r   )
__future__r   loggingenumr   r   	threadingr   typingr   r   descriptionr
   r   secret_detectorr   	test_utilr   r   r   r   networkr   	getLoggerrI   r   r   r   r   r   r   r   r   <module>r      s    "    % A + </)			8	$ @#T @# @#F%# %#P_$ _$F "-1"*  	r   