o
    i,                     @   st  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
 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 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 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# 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) 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/ dd!l-m0Z0 dd"l1m2Z2 dd#l1m3Z3 dd$l1m4Z4 dd%l1m5Z5 dd&l1m6Z6 erd d'l7m8Z8 G d(d) d)e#Z9G d*d+ d+e#Z:G d,d- d-e:Z;G d.d/ d/e:Z<G d0d1 d1e#Z=G d2d3 d3e=Z>G d4d5 d5e=Z?G d6d7 d7e9Z@G d8d9 d9e9ZAG d:d; d;e"ZBdS )<    )RemoteDisconnectedN)TYPE_CHECKING)Optional)config)	SpanTypes)TEST_SESSION_NAME)MODULE_TYPE)SESSION_TYPE)
SUITE_TYPE)	StopWatch)	DogStatsd)__version__   )service)EVP_PROXY_AGENT_ENDPOINT)#EVP_SUBDOMAIN_HEADER_COVERAGE_VALUE)EVP_SUBDOMAIN_HEADER_NAME)get_runtime_id)
HTTPWriter)WriterClientBase   )AGENTLESS_BASE_URL)AGENTLESS_COVERAGE_BASE_URL)AGENTLESS_COVERAGE_ENDPOINT)"AGENTLESS_COVERAGE_REPORT_BASE_URL)AGENTLESS_DEFAULT_SITE)AGENTLESS_ENDPOINT)COVERAGE_REPORT_UPLOAD_ENDPOINT)EVP_PROXY_COVERAGE_ENDPOINT)CIVisibilityCoverageEncoderV02)!CIVisibilityCoverageReportEncoder)CIVisibilityEncoderV01)REQUEST_ERROR_TYPE)record_endpoint_payload_bytes)record_endpoint_payload_request)%record_endpoint_payload_request_error)$record_endpoint_payload_request_time)Responsec                       sL   e Zd Z fddZdedeeef ddfddZd	eddfd
dZ  ZS )CIVisibilityEventClientc              	      sL   t dd}|ddtdtjt ttjrdndd t	t
| | d S )Nr   *python
_CI_DD_ENVtruefalse)languageenvz
runtime-idlibrary_versionz!_dd.test.is_user_provided_service)r!   set_metadataosgetenvr   r/   r   r   _is_user_provided_servicesuperr(   __init__)selfencoder	__class__ Y/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/ci_visibility/writer.pyr6   0   s   

z CIVisibilityEventClient.__init__
event_typemetadatareturnNc                 C   s"   t | jtr| j|| d S d S N)
isinstancer8   r!   r1   )r7   r=   r>   r;   r;   r<   r1   >   s   z$CIVisibilityEventClient.set_metadatatest_session_namec                 C   s(   t tttjfD ]
}| |t|i qd S r@   )r	   r   r
   r   TESTr1   r   )r7   rB   r=   r;   r;   r<   set_test_session_nameB   s   z-CIVisibilityEventClient.set_test_session_name)	__name__
__module____qualname__r6   strdictr1   rD   __classcell__r;   r;   r9   r<   r(   /   s    r(   c                       s   e Zd Zd fdd	Z  ZS )CIVisibilityCoverageClientNFc                    s<   t dd}|r|| || _|r|| _tt| | d S )Nr   )r   _set_itr_suite_skipping_mode_intake_url_headersr5   rK   r6   )r7   
intake_urlheadersitr_suite_skipping_moder8   r9   r;   r<   r6   H   s   

z#CIVisibilityCoverageClient.__init__)NF)rE   rF   rG   r6   rJ   r;   r;   r9   r<   rK   G   s    rK   c                   @      e Zd ZeZdS )!CIVisibilityProxiedCoverageClientN)rE   rF   rG   r   ENDPOINTr;   r;   r;   r<   rS   R       rS   c                   @   rR   )#CIVisibilityAgentlessCoverageClientN)rE   rF   rG   r   rT   r;   r;   r;   r<   rV   V   rU   rV   c                       s4   e Zd ZdZd fdd	ZedefddZ  ZS )	 CIVisibilityCoverageReportClientz0Client specifically for coverage report uploads.Nc                    s*   t  }|| _|r|| _tt| | d S r@   )r    rM   rN   r5   rW   r6   )r7   rO   rP   r8   r9   r;   r<   r6   ]   s
   z)CIVisibilityCoverageReportClient.__init__r?   c                 C   s   | j S )z/Get the properly typed coverage report encoder.)r8   )r7   r;   r;   r<   coverage_encoderd   s   z1CIVisibilityCoverageReportClient.coverage_encoderr@   )	rE   rF   rG   __doc__r6   propertyr    rX   rJ   r;   r;   r9   r<   rW   Z   s
    rW   c                   @   rR   ))CIVisibilityAgentlessCoverageReportClientNrE   rF   rG   r   rT   r;   r;   r;   r<   r[   j   rU   r[   c                   @   rR   )'CIVisibilityProxiedCoverageReportClientNr\   r;   r;   r;   r<   r]   n   rU   r]   c                   @   rR   ) CIVisibilityAgentlessEventClientN)rE   rF   rG   r   rT   r;   r;   r;   r<   r^   r   rU   r^   c                   @   rR   )CIVisibilityProxiedEventClientN)rE   rF   rG   r   rT   r;   r;   r;   r<   r_   v   rU   r_   c                       s   e Zd ZdZdZdZ													d"dedee d	ee d
ee	 de
de
dee
 deeeef  de
de
de
de
de
f fddZd# fdd	Zd#dee
 dd fddZdedeeef dede
ddf
 fd d!Z  ZS )$CIVisibilityWriter   POSTzcivisibility.writer NFrO   processing_intervaltimeout	dogstatsd	sync_modereport_metricsreuse_connectionsrP   use_evpcoverage_enabledcoverage_report_upload_enabledrQ   use_gzipc                    sl  |d u rt j}|d u rt j}d }|	r|r|ntj}|}nt jr(|r#|nt j}|}|s4dttdt	f }|	| _
| j
r>t gnt g}|
| _|| _|| _| jrn|sZdttdt	f }||	rgt|tti|dnt||d |r|	ru|}n|rz|}n
dttdt	f }|r| ni }|	rt|t< ||	rt||dnt||d tt| j|||||||||d	 d S )Nz%s.%sDD_SITE)rO   rP   rQ   )rO   rQ   )rO   rP   )	rO   clientsrd   re   rf   rg   ri   rP   rm   )r   _trace_writer_interval_seconds_agent_timeout_secondsagent_configtrace_agent_url_ci_visibility_agentless_urlr   r2   r3   r   _use_evpr_   r^   _coverage_enabled_coverage_report_upload_enabled_itr_suite_skipping_moder   appendrS   r   r   rV   r   copyr]   r[   r5   r`   r6   )r7   rO   rd   re   rf   rg   rh   ri   rP   rj   rk   rl   rQ   rm   intake_cov_urlro   coverage_report_urlcoverage_report_headersr9   r;   r<   r6      s   


zCIVisibilityWriter.__init__c                    s(   | j tjjkrtt| j|d d S d S )N)re   )statusr   ServiceStatusSTOPPEDr5   r`   stop)r7   re   r9   r;   r<   r      s   zCIVisibilityWriter.stopappsec_enabledr?   c                 C   s:   | j | j| j| j| j| j| j| j| j| j	| j
| j| jdS )N)rO   rd   re   rf   rg   rh   ri   rP   rj   rk   rl   rQ   )r:   rO   	_interval_timeoutrf   
_sync_mode_report_metrics_reuse_connectionsrN   ru   rv   rw   rx   )r7   r   r;   r;   r<   recreate   s   zCIVisibilityWriter.recreatedataclientno_tracer'   c           	         s(  d }t  }zSzt ||||}|jdkrtj}W n ttjfy(   tj	}  t
y2   tj} w W t|jtrY|jj}t|t|d t| t|| d |rYt|| n(t|jtr|jj}t|t|d t| t|| d |rt|| w w w W d    |S 1 sw   Y  |S )Ni  )nbytes)seconds)r   r5   _putr~   r"   STATUS_CODETimeoutErrorsocketre   TIMEOUTr   NETWORKrA   r8   r!   ENDPOINT_TYPEr#   lenr$   r&   elapsedr%   )	r7   r   rP   r   r   request_errorswresponseendpointr9   r;   r<   r      sJ   


zCIVisibilityWriter._put)rc   NNNFFNNFFFFFr@   )rE   rF   rG   RETRY_ATTEMPTSHTTP_METHODSTATSD_NAMESPACErH   r   floatr   boolrI   r6   r   r   bytesr   r   rJ   r;   r;   r9   r<   r`   z   s^    	
d2r`   )Chttp.clientr   r2   r   typingr   r   ddtracer   ddtrace.extr   ddtrace.ext.testr   (ddtrace.internal.ci_visibility.constantsr   r	   r
    ddtrace.internal.settings._agentrr   ddtrace.internal.utils.timer   ddtrace.vendor.dogstatsdr   ddtrace.versionr   rc   r   evp_proxy.constantsr   r   r   runtimer   writerr   r   	constantsr   r   r   r   r   r   r   r   r8   r   r    r!   telemetry.payloadr"   r#   r$   r%   r&   ddtrace.internal.utils.httpr'   r(   rK   rS   rV   rW   r[   r]   r^   r_   r`   r;   r;   r;   r<   <module>   sd    