o
    i$4                     @  s   d dl mZ d dlZd dlmZ d dl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 ejr?d dlmZ d d	lmZ eeZejZG d
d deeZG dd deeZG dd deeZG dd dZejG dd dZdS )    )annotationsN)Enum)telemetry_writer)TELEMETRY_NAMESPACE)ITRSkippingLevel)Settings)BackendConnectorSetup)TestRunc                   @  s$   e Zd ZdZdZdZdZdZdZdS )	ErrorTypetimeoutnetworkstatus_code_4xx_responsestatus_code_5xx_responsebad_jsonunknownN)	__name__
__module____qualname__TIMEOUTNETWORKCODE_4XXCODE_5XXBAD_JSONUNKNOWN r   r   V/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/testing/internal/telemetry.pyr
      s    r
   c                   @  s   e Zd ZdZdZdZdZdS )	EventTypetestsuitemodulesessionN)r   r   r   TESTSUITEMODULESESSIONr   r   r   r   r   $   s
    r   c                   @  s(   e Zd ZdZdZdZdZdZdZdZ	dS )	GitTelemetryget_repository
get_branchcheck_shallow	unshallowget_local_commitsget_objectspack_objectsN)
r   r   r   GET_REPOSITORY
GET_BRANCHCHECK_SHALLOW	UNSHALLOWGET_LOCAL_COMMITSGET_OBJECTSPACK_OBJECTSr   r   r   r   r%   +   s    r%   c                   @  sZ  e Zd ZU dZded< drdd	Zedsd
dZdtddZduddZ	dvdwddZ
	dvdxdd Zdyd"d#Zdzd&d'Zdzd(d)Zdud*d+Zd{d-d.Zd|d/d0Zd}d3d4Zd~d7d8Zd~d9d:Zd~d;d<Zdd?d@Zd|dAdBZddGdHZddNdOZddQdRZddTdUZddXdYZdd]d^Zdd_d`ZddadbZddcddZ ddedfZ!ddidjZ"ddldmZ#ddpdqZ$dS )TelemetryAPINzt.Optional[TelemetryAPI]	_instanceconnector_setupr   returnNonec                 C  s   t | _tj| _| t_d S N)r   writerr   CIVISIBILITY	namespacer4   r5   )selfr6   r   r   r   __init__8   s   
zTelemetryAPI.__init__c                 C  s   | j std| j S )Nz<Telemetry API called before being initialized; this is a bug)r5   RuntimeError)clsr   r   r   getD   s   zTelemetryAPI.getcountstrdurationresponse_bytest.Optional[str]errorTelemetryAPIRequestMetricsc                 C  s   t | ||||dS )N)telemetry_apirB   rD   rE   rG   )rH   )r=   rB   rD   rE   rG   r   r   r   with_request_metric_namesJ   s   
z&TelemetryAPI.with_request_metric_namesc                 C  s   | j jdd d S )NT)force_flush)r:   periodicr=   r   r   r   finishQ   s   zTelemetryAPI.finishmetric_namevalueinttagst.Optional[dict[str, t.Any]]c                 C  .   t d||| | j| j||| | d S )Nz5Recording Test Optimization telemetry count: %r %r %r)logdebugr:   add_count_metricr<   
_make_tagsr=   rO   rP   rR   r   r   r   rW   T   s   zTelemetryAPI.add_count_metricfloatc                 C  rT   )Nz<Recording Test Optimization telemetry distribution: %r %r %r)rU   rV   r:   add_distribution_metricr<   rX   rY   r   r   r   r[   X   s   z$TelemetryAPI.add_distribution_metrictuple[tuple[str, str], ...]c                 C  sr   |sdS g }|  D ]*\}}|du s|du rq
|du rd}nt|tr)t|j}nt|}|||f q
t|S )a$  
        Convert a tag dictionary into a tag tuple.

        The boolean tag value `true` is converted to the string "true". Boolean `false` as well as `None` are omitted
        from the final result. Enum items are converted to their values. Everything else is converted to string.
        r   NFTtrue)items
isinstancer   rC   rP   appendtuple)r=   rR   tag_listkeyrP   string_valuer   r   r   rX   ^   s   
zTelemetryAPI._make_tagstest_frameworkcoverage_libraryc                 C     ||d}|  dd| d S )Nlibraryre   code_coverage_started   rW   r=   re   rf   rR   r   r   r   record_coverage_startedx      
z$TelemetryAPI.record_coverage_startedc                 C  rg   )Nrh   code_coverage_finishedrk   rl   rm   r   r   r   record_coverage_finished|   ro   z%TelemetryAPI.record_coverage_finishedc                 C  s   |  dd d S )Nzcode_coverage.is_emptyrk   rl   rM   r   r   r   record_coverage_is_empty      z%TelemetryAPI.record_coverage_is_emptycount_filesc                 C     |  d| d S )Nzcode_coverage.filesr[   )r=   rt   r   r   r   record_coverage_files   rs   z"TelemetryAPI.record_coverage_filesc                 C  ru   )Nzknown_tests.response_testsrv   r=   rB   r   r   r   record_known_tests_count   rs   z%TelemetryAPI.record_known_tests_countlevelr   c                 C  s"   |t jkrdnd}| || d S )Nz#itr_skippable_tests.response_suitesz"itr_skippable_tests.response_tests)r   r"   rW   )r=   rB   rz   skippable_count_metricr   r   r   record_skippable_count   s
   
z#TelemetryAPI.record_skippable_count
event_typer   c                 C     |  ddd|ji d S )Nitr_skippedrk   r}   rW   rP   r=   r}   r   r   r   record_itr_skipped      zTelemetryAPI.record_itr_skippedc                 C  r~   )Nitr_unskippablerk   r}   r   r   r   r   r   record_itr_unskippable   r   z#TelemetryAPI.record_itr_unskippablec                 C  r~   )Nitr_forced_runrk   r}   r   r   r   r   r   record_itr_forced_run   r   z"TelemetryAPI.record_itr_forced_runsettingsr   c              	   C  s>   |j |j|j|j|j|jj|jj|jjd}| 	dd| d S )N)coverage_enableditrskip_enabledrequire_gititr_enabledknown_tests_enabledflaky_test_retries_enabledearly_flake_detection_enabledtest_management_enabledzgit_requests.settings_responserk   )
r   skipping_enabledr   r   r   auto_test_retriesenabledearly_flake_detectiontest_managementrW   )r=   r   rR   r   r   r   record_settings   s   zTelemetryAPI.record_settingsc                 C  ru   )Nz$test_management_tests.response_testsrv   rx   r   r   r   "record_test_management_tests_count   rs   z/TelemetryAPI.record_test_management_tests_countcommandr%   elapsed_seconds	exit_codec                 C  sP   d|j i}| dd| | d|d | |r&| dd|j t|d d S d S )Nr   zgit.commandrk   zgit.command_ms  zgit.command_errors)r   r   )rP   rW   r[   rC   )r=   r   r   r   rR   r   r   r   record_git_command   s   
zTelemetryAPI.record_git_commandendpointpayload_sizerequest_secondsevents_countt.Optional[ErrorType]c                 C  s\   d|i}|  d|| | dd| |  d|d | |  d|| |r,| || d S d S )Nr   zendpoint_payload.byteszendpoint_payload.requestsrk   zendpoint_payload.requests_msr   zendpoint_payload.events_count)r[   rW   record_event_payload_error)r=   r   r   r   r   rG   rR   r   r   r   record_event_payload   s   z!TelemetryAPI.record_event_payloadserialization_secondsc                 C  s   d|i}|  d|d | d S )Nr   z(endpoint_payload.events_serialization_msr   rv   )r=   r   r   rR   r   r   r   *record_event_payload_serialization_seconds   s   z7TelemetryAPI.record_event_payload_serialization_secondsr
   c                 C  sF   |t jkrd}n|t jt jfv rd}nd}||d}| dd| d S )Nr   status_coder   )r   
error_typez endpoint_payload.requests_errorsrk   )r
   r   r   r   rW   )r=   r   rG   endpoint_errorrR   r   r   r   r      s   

z'TelemetryAPI.record_event_payload_errortest_runr	   c                 C  s&   t jj|| d}| dd| d S )N)r}   re   is_benchmarkevent_createdrk   )r   r!   rP   r   rW   )r=   re   r   rR   r   r   r   record_test_created   s
   z TelemetryAPI.record_test_createdci_provider_nameis_auto_injectedboolc                 C  sj   t jj|| |j | | | |j	 |j
 |j |j | ||d}| dd| d S )N)r}   re   r   is_newis_retryis_rumbrowser_driver"early_flake_detection_abort_reasonis_quarantinedis_disabledis_attempt_to_fixhas_failed_all_retriesprovider_nameauto_injectedevent_finishedrk   )r   r!   rP   r   r   r   r   r   get_browser_driver&get_early_flake_detection_abort_reasonr   r   r   r   rW   )r=   re   r   r   r   rR   r   r   r   record_test_finished   s    z!TelemetryAPI.record_test_finishedc                 C      t jj|d}| dd| d S Nr}   re   r   rk   r   r"   rP   rW   r=   re   rR   r   r   r   record_suite_created      z!TelemetryAPI.record_suite_createdc                 C  r   Nr   r   rk   r   r   r   r   r   record_suite_finished   r   z"TelemetryAPI.record_suite_finishedc                 C  r   r   r   r#   rP   rW   r   r   r   r   record_module_created  r   z"TelemetryAPI.record_module_createdc                 C  r   r   r   r   r   r   r   record_module_finished  r   z#TelemetryAPI.record_module_finishedhas_codeownersis_unsupported_cic                 C  s$   t jj|||d}| dd| d S )N)r}   re   r   r   r   rk   r   r$   rP   rW   )r=   re   r   r   rR   r   r   r   record_session_created	  s   z#TelemetryAPI.record_session_createdefd_abort_reasonc                 C  s&   t jj||||d}| dd| d S )N)r}   re   r   r   r   r   rk   r   )r=   re   r   r   r   rR   r   r   r   record_session_finished  s   z$TelemetryAPI.record_session_finisheduploaded_filesuploaded_bytesc                 C  s   |  d| |  d| d S )Nzgit_requests.objects_pack_fileszgit_requests.objects_pack_bytesrv   )r=   r   r   r   r   r   record_git_pack_data   s   z!TelemetryAPI.record_git_pack_data)r6   r   r7   r8   )r7   r4   )
rB   rC   rD   rC   rE   rF   rG   rC   r7   rH   )r7   r8   r9   )rO   rC   rP   rQ   rR   rS   r7   r8   )rO   rC   rP   rZ   rR   rS   r7   r8   )rR   rS   r7   r\   )re   rC   rf   rC   r7   r8   )rt   rQ   r7   r8   )rB   rQ   r7   r8   )rB   rQ   rz   r   r7   r8   )r}   r   r7   r8   )r   r   r7   r8   )r   r%   r   rZ   r   rQ   r7   r8   )r   rC   r   rQ   r   rZ   r   rQ   rG   r   r7   r8   )r   rC   r   rZ   r7   r8   )r   rC   rG   r
   r7   r8   )re   rC   r   r	   r7   r8   )
re   rC   r   r	   r   rF   r   r   r7   r8   )re   rC   r7   r8   )re   rC   r   r   r   r   r7   r8   )
re   rC   r   r   r   r   r   rF   r7   r8   )r   rQ   r   rQ   r7   r8   )%r   r   r   r5   __annotations__r>   classmethodrA   rJ   rN   rW   r[   rX   rn   rq   rr   rw   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   5   sF   
 




























r4   c                   @  sJ   e Zd ZU ded< ded< ded< ded< ded< dddZdddZdS )rH   r4   rI   rC   rB   rD   rF   rE   rG   secondsrZ   t.Optional[int]compressed_responser   r   r7   r8   c                 C  sf   | j | jd | j | j| |d ur&| jd ur&d|i}| j | j|| |d ur1| | d S d S )Nrk   rs_compressed)rI   rW   rB   r[   rD   rE   record_error)r=   r   rE   r   rG   response_tagsr   r   r   record_request-  s   z)TelemetryAPIRequestMetrics.record_requestr
   c                 C  s   | j | jdd|i d S )Nrk   r   )rI   rW   rG   )r=   rG   r   r   r   r   ;  s   z'TelemetryAPIRequestMetrics.record_errorN)
r   rZ   rE   r   r   r   rG   r   r7   r8   )rG   r
   r7   r8   )r   r   r   r   r   r   r   r   r   r   rH   %  s   
 
rH   ) 
__future__r   dataclassesenumr   loggingtypingtddtrace.internal.telemetryr   $ddtrace.internal.telemetry.constantsr   "ddtrace.testing.internal.constantsr   &ddtrace.testing.internal.settings_datar   TYPE_CHECKINGddtrace.testing.internal.httpr   "ddtrace.testing.internal.test_datar	   	getLoggerr   rU   r;   rC   r
   r   r%   r4   	dataclassrH   r   r   r   r   <module>   s*   
	
 q