o
    i$\                     @   s  d dl mZ d dl mZ d dl mZ d dlZd dlm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Zd dlZd dlmZ d dlZd dlmZ d dlmZ d dlm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/m0Z0 d dl/m1Z1 d dl2m3Z3 d dl4m!Z5 d dl6m!Z7 d dl8m9Z9 d d l:m;Z; d d!l<m=Z= d d"l<m>Z> d d#l<m?Z? d d$l@mAZA d d%l@mBZB d d&l@mCZC e)eDZEd ZFd'ZGd(ZHe; d)ejId*ejJeK fd+d,ZLe; d-eMd*eNfd.d/ZOd0ed*ejJeN fd1d2ZPd3eMd*eQeN fd4d5ZRG d6d7 d7eNeZSeG d8d9 d9ZTG d:d; d;eNeZUeG d<d= d=ZVeG d>d? d?ZWG d@dA dAZXdBed*eKfdCdDZYG dEdF dFe+ZZdS )G    asdict)	dataclass)fieldN)Enum)sha1)
CO_VARARGS)CO_VARKEYWORDS)isasyncgenfunction)iscoroutinefunction)isgeneratorfunction)	signature)chainislice)tee)Path)CodeType)FunctionType)
ModuleType)config)packages)singledispatchmethod)DEFAULT_SERVICE_NAME)
get_logger)BaseModuleWatchdog)origin)Timer)get_ancestor_runtime_id)get_runtime_id)_isinstance)RLock)cached)FormData)	connector)	multipart)linenos)resolved_code_origin)undecoratedii   objreturnc              	   C   sJ   zt tjt| d }|d urt|W S d W S  ttfy$   Y d S w )N
__module__)	r   sysmodulesobject__getattribute__r   is_user_codeAttributeErrorKeyError)r)   path r4   V/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/symbol_db/symbols.pyis_from_user_code8   s   r6   _typec                 C   s   zt | d}W n ty   d}Y nw zt | d}W n ty)   t| }Y nw |tjks7|| dr9|S | d| S )Nr+   z	<unknown>__qualname__.)r.   r/   r1   strintr+   
startswith)r7   modulequalnamer4   r4   r5   type_qualnameA   s   ,r?   fc                 C   s6   z| j j}W n
 ty   Y d S w t| r|S d S N)__code__co_filenamer1   r   exists)r@   filenamer4   r4   r5   func_originP   s   rF   clsc                    s   z	t t| dW S  ty   Y nw z t| dj  fddtdd ttt	 dD  D W S  ty?   t   Y S w )N	__slots____init__c                    s@   h | ]\}}|j d r|jd@ dkr|j dkr j|j qS )	LOAD_FAST   r   
STORE_ATTR)opnamer<   argco_names).0abcoder4   r5   	<setcomp>c   s    

zget_fields.<locals>.<setcomp>c                 s   s     | ]\}}t ||d V  qd S rA   r   )rP   itr4   r4   r5   	<genexpr>e       zget_fields.<locals>.<genexpr>   )
setr.   r/   r1   rB   zip	enumerater   disget_instructions)rG   r4   rS   r5   
get_fieldsX   s   
 
r`   c                   @      e Zd ZdZdZdZdZdS )
SymbolTypeFIELDSTATIC_FIELDARGLOCALN)__name__r+   r8   rc   rd   re   rf   r4   r4   r4   r5   rb   m   
    rb   c                   @   sV   e Zd ZU dZeed< eed< eed< dZej	e ed< e
deded  fd	d
ZdS )Symbolz A symbol available from a scope.symbol_typenamelineNtyperT   r*   c                    sx   |j t|jt@  t|jt@  }|jd | }|j|d  }tt|tt	 fdd|D  fdd|D S )Nc                 3        | ]} t j|d V  qdS rj   rk   rl   N)rb   re   rP   rk   rG   
start_liner4   r5   rX      rY   z#Symbol.from_code.<locals>.<genexpr>c                 3   rn   ro   )rb   rf   rq   rr   r4   r5   rX      rY   )
co_argcountboolco_flagsr   r	   co_varnamesminr&   listr   )rG   rT   nargs	arg_nameslocals_namesr4   rr   r5   	from_code}   s   "zSymbol.from_code)rg   r+   r8   __doc__r:   __annotations__r;   rm   rW   Optionalclassmethodr   ry   r}   r4   r4   r4   r5   ri   t   s   
 ri   c                   @   ra   )	ScopeTypeMODULECLASSFUNCTIONCLOSUREN)rg   r+   r8   r   r   r   r   r4   r4   r4   r5   r      rh   r   c                   @   s$   e Zd ZU eed< eej ed< dS )	ScopeDatar   seenN)rg   r+   r8   r   r   r[   rW   Anyr4   r4   r4   r5   r      s   
 r   c                   @   s
  e Zd ZU dZeed< eed< eed< eed< eed< ee ed< ed  ed< e	e
d	Ze
ed
< de
fddZeed%dejdededejd  fddZeeed%dedededejd  fddZeeed%dedededejd  fddZeeed%dedededejd  fddZeeed%dedededejd  fddZeeed%dedededejd  fddZeeed%dedededejd  fddZeeed%d edededejd  fd!dZed%dededd fd"d#Zd$S )&Scopez#A scope is a collection of symbols.
scope_typerk   source_filers   end_linesymbolsscopes)default_factorylanguage_specificsr*   c                 C   s   t | S rA   r   selfr4   r4   r5   to_json   s   zScope.to_jsonT_data	recursivec                 C   s   d S rA   r4   )rG   r   r   r   r4   r4   r5   	_get_from   s   zScope._get_fromr=   c                    st  ||j v rd S |j | t|}|d u rd S g }g }|rot|d D ]I\}}t|tr/q%z,t|tr;t	|||}t
||}	|	d urK||	 nt|sZ|ttj|dd W q% tyn   tjd||jdd Y q%w t }
|
d| j d  |d	 t fd
ddD ]}|
| qW d    n1 sw   Y  t
tj|jt|dd||d|
 idS )N__dict__r   rp   z'Cannot get child scope %r for module %sTexc_infozblob  rbc                      s
     dS )Ni    )readr4   r@   r4   r5   <lambda>   s   
 zScope._.<locals>.<lambda>    	file_hashr   rk   r   rs   r   r   r   r   ) r   addr   r.   r/   itemsr    r   r   r(   r   r   appendcallableri   rb   rd   	Exceptionlogdebugrg   r   updatestatst_sizeencodeopeniterr   r   r:   	hexdigest)rG   r=   r   r   module_originr   r   aliaschildscopesource_git_hashchunkr4   r   r5   r      s^   



zScope._r)   c              
      s&   |j v rd S |j   t sd S g }g }zttjt d }|d u s,||jkr/W d S W n tt	fy<   Y d S w t d
 D ]T\}}z't |}t|tr[t|||}z
|jdkrdW W qEW n	 t	yn   Y nw W n	 t	yy   Y qEw t||}	|	d ur||	 qEt|s|ttj|dd qEt D ]}
|ttj|
dd q|rztdd |D }W n ty   t}Y nw ztdd |D }W n ty   t}Y nw t }}z fd	d
 jD }W n ty   tj d dd g }Y nw tt!j"t# t$|||||d|idS )Nr+   r   builtinsr   rp   c                 s   s     | ]}|j tkr|j V  qd S rA   )rs   SOFrP   r   r4   r4   r5   rX   *  rY   Scope._.<locals>.<genexpr>c                 s   s     | ]}|j tk r|j V  qd S rA   )r   EOFr   r4   r4   r5   rX   .  rY   c                    s$   g | ]}|t ur| urt|qS r4   )r.   r?   r   r)   r4   r5   
<listcomp>6  s   $ Scope._.<locals>.<listcomp>zCannot get super-classes for %rTr   super_classesr   )%r   r   r6   r   r,   r-   r.   r/   r2   r1   r   r    r   r(   r+   r   r   r   r   ri   rb   rd   r`   rc   rx   
ValueErrorr   maxr   __mro__r   r   r   r   r   r?   r:   )rG   r)   r   r   r   r   type_originrk   r   r   r@   rs   r   r   r4   r   r5   r      s   


		rT   c           	         s   dt | }|jv rd S j| t| }jkrd S t|}|s'd S t|}t|}tt	j
|jt|||t|dd  fdd|jD D dS )Nzcode-c                 S      g | ]}|d ur|qS rA   r4   r   r4   r4   r5   r   b  s    r   c                 3   s&    | ]}t |tr |V  qd S rA   )
isinstancer   r   r   rG   r   r4   r5   rX   c  s   $ r   )r   rk   r   rs   r   r   r   )idr   r   r'   r   r&   rx   r   r   r   r   co_namer:   ri   r}   	co_consts)	rG   rT   r   r   code_idcode_originlsrs   r   r4   r   r5   r   F  s,   
r@   c           	         s*  ||j v rd S |j | t|sd S t|dr|jjn|j}ttjt	 | 
||}|d u r2d S tj|_t|j  fdd|jD D ]} |j j}t|trW|nt||_qHjjurtj}t|trm|nt||jd< d }t|r}d}nt|rd}nt|rd}|d ur||jd< |S )	N__dd_wrapped__c                 3   s2    | ]}|j tjkr |j jjur|V  qd S rA   )rj   rb   re   rk   
annotationemptyr   paramssigr4   r5   rX   ~  s    r   return_typeasyncgen	generator	coroutinefunction_type)r   r   r6   hasattrr   rB   rW   castr   r   r   r   r   r   r   
parametersr   rk   r   r   r:   r?   rm   return_annotationr   r   r
   r   r   )	rG   r@   r   r   rT   
code_scoperN   annr   r4   r   r5   r   g  s<   


methodc                 C   $   |  |j|}|d urd|jd< |S )Nclassmethod_typer   __func__r   rG   r   r   r   r   r4   r4   r5   r        
c                 C   r   )Nstaticr   r   r   r4   r4   r5   r     r   prc                    s   |j jv rd S j|j  |j d u st|j sd S ttt|j }|d u r*d S tt	j
|j j|ttg dd  fdd|j |j|jfD D ddidS )Nc                 S   r   rA   r4   r   r4   r4   r5   r     s
    r   c                 3   s$    | ]}|d ur  |V  qd S rA   )r   r   r   r4   r5   rX     s   " r   r   propertyr   )fgetr   r   r6   rF   rW   r   r   r   r   r   rg   r   fsetfdel)rG   r   r   r   r3   r4   r   r5   r     s(   c              	   C   s@   t |}|du rtd|j dtt| |t|t |S )zLGet the scope of a module.

        The module must have an origin.
        Nz+Cannot get scope of module with no origin '')	r   r   rg   rW   r   r   r   r   r[   )rG   r=   r   r   r4   r4   r5   from_module  s   zScope.from_moduleNT)rg   r+   r8   r~   r:   r   r;   ry   ri   r   dictr   r   r   r   rW   r   r   ru   r   r   registerr   r   rm   r   r   staticmethodr   r   r4   r4   r4   r5   r      sJ   
 (	&4&X&&.&&&r   c                   @   s   e Zd ZU dZeed< ddejee	  ddfddZ
ddd	Zd
e	ddfddZdefddZdddZdefddZdefddZdS )ScopeContexti  __scope_limit__Nr   r*   c                 C   sH   |d ur|ng | _ t | _dtjptt t dd| _d | _	t | _
d S )Npythonsymdb)ddsourceservice	runtimeIdparentIdrm   )_scopesr!   _scopes_lockr   r   r   r   r   _event_data_timer_timer_lock)r   r   r4   r4   r5   rI     s   zScopeContext.__init__c                    sz    j 0  jd u rG  fdddt}|d _ j  n j  W d    d S W d    d S 1 s6w   Y  d S )Nc                       s   e Zd Zd fddZdS )z+ScopeContext._set_timer.<locals>.BatchTimerr*   Nc                    sR   t dt t j     j d  _W d    d S 1 s"w   Y  d S )NzA[PID %d] SymDB: Flushing batch of %d module scopes due to timeout)	r   r   osgetpidlenr   uploadr   r   )r   r   r4   r5   timeout  s   "z3ScopeContext._set_timer.<locals>.BatchTimer.timeoutr*   N)rg   r+   r8   r  r4   r   r4   r5   
BatchTimer  s    r  g      ?)r   r   r   startreset)r   r  r4   r   r5   
_set_timer  s   

"zScopeContext._set_timerr   c                 C   sn   | j * t| j }| jkrtdt | |   | j	| | 
  W d    d S 1 s0w   Y  d S )NzD[PID %d] SymDB: Flushing batch of %d module scopes due to size limit)r   r  r   r   r   r   r   r  r  r   r	  )r   r   nr4   r4   r5   	add_scope  s   
"zScopeContext.add_scopec                 C   sZ   | j   dtjp	ttjpdtjpdddd | jD dW  d    S 1 s&w   Y  d S )N    r   c                 S   s   g | ]}|  qS r4   )r   r   r4   r4   r5   r     s    z(ScopeContext.to_json.<locals>.<listcomp>)schema_versionr   envversionlanguager   )r   r   r   r   r  r  r   r   r4   r4   r5   r     s   $zScopeContext.to_jsonc              	   C   sj  t tddt| jddtddt  ddd	dgd
\}}| j |  }t	| j
}| j
  W d    n1 s;w   Y  |dtt|d}ttjdd T}tdt  |dd|| z tdt | |  }jd dkrtdt |j W n ty   tdt | Y n	w W d    d S W d    d S 1 sw   Y  d S )Neventz
event.jsonjson)rk   rE   r   content_typefilesymbols_z.json.gzz[symbols_placeholder]gzip)partss   [symbols_placeholder]zutf-8g      @)r  z)[PID %d] SymDB: Uploading symbols payloadPOSTz/symdb/v1/inputz8[PID %d] SymDB: Uploading symbols context with %d scopesd   rZ   z8[PID %d] SymDB: Bad response while uploading symbols: %sz?[PID %d] SymDB: Failed to upload symbols context with %d scopes)r%   r#   r  dumpsr   r   r  r   r   r  r   clearreplacer  compressr   r$   agent_configtrace_agent_urlr   r   requestgetresponsestatuserrorr   	exception)r   bodyheaderspayloadr
  connresultr4   r4   r5   r    sH   


	"zScopeContext.uploadc                 C   4   | j  t| jW  d    S 1 sw   Y  d S rA   )r   ru   r   r   r4   r4   r5   __bool__@     $zScopeContext.__bool__c                 C   r+  rA   )r   r  r   r   r4   r4   r5   __len__D  r-  zScopeContext.__len__rA   r  )rg   r+   r8   r   r;   r   rW   r   ry   r   rI   r	  r  r   r   r  ru   r,  r.  r4   r4   r4   r5   r     s   
 

'r   r=   c                 C   s   t jrt j| jrdS t| }|d u s| sdS | jt	kr#dS t
|r*dS t jr?t
|}|d ur?t j|jr?dS dS )NTF)symdb_configincludes_includes_rematchrg   r   rD   r   r   MAX_FILE_SIZEr   r0   filename_to_packagerk   )r=   r   packager4   r4   r5   is_module_includedI  s   

r6  c                       s~   e Zd ZU dZeed< dZeed< d fddZdd	d
Z	de
ddfddZedddZeddeddf fddZ  ZS )SymbolDatabaseUploaderi'  __file_number_limit__Tshallowr*   Nc                    s2   t    t | _d| _d| _t | _|   d S )NFr   )	superrI   r[   _seen_modules_update_called_processed_files_countr   _context_process_unseen_loaded_modulesr   	__class__r4   r5   rI   h  s   
zSymbolDatabaseUploader.__init__c              	   C   s   | j  }ttj D ]p\}}| j| jkr"tdt	
 | j  d S z|jjr)W qW n	 ty3   Y nw || jv r:q| j| t|sEqzt||}W n ty_   tjd|jdd Y qw |d ur{tdt	
 |j | j| |  jd7  _qd S )N([PID %d] SymDB: Reached file limit of %dz%Cannot get symbol scope for module %sTr   z0[PID %d] SymDB: Adding Symbol DB module scope %rr  )r9  ry   r,   r-   r   r=  r8  r   r   r   r  __spec___initializingr1   r;  r   r6  r   r   r   rg   rk   r>  r  )r   r   rk   r=   r   r4   r4   r5   r?  s  s:   
z5SymbolDatabaseUploader._process_unseen_loaded_modulesr=   c                 C   s   | j | jkrtdt | j d S t|s"tdt |j d S tj	|| j
 d }d ur>| j| |  j d7  _ d S d S )NrB  zA[PID %d] SymDB: Excluding imported module %s from symbol database)r   r  )r=  r8  r   r   r   r  r6  rg   r   r   r9  r>  r  )r   r=   r   r4   r4   r5   after_import  s   z#SymbolDatabaseUploader.after_importc                 C   s6   t t| j}|d u rd S |jrd S |  d|_d S )NT)rW   r   r7  	_instancer<  r?  )rG   instancer4   r4   r5   r     s   
zSymbolDatabaseUploader.updatec                    s   || _ t  S rA   )r9  r:  install)rG   r9  r@  r4   r5   rH    s   
zSymbolDatabaseUploader.installr  r   )rg   r+   r8   r8  r;   r   r9  ru   rI   r?  r   rE  r   r   rH  __classcell__r4   r4   r@  r5   r7  c  s   
 
%"r7  )[dataclassesr   r   r   r^   enumr   r  hashlibr   inspectr   r	   r
   r   r   r   	itertoolsr   r   r   r  r   pathlibr   r,   typesr   r   r   typingrW   ddtracer   ddtrace.internalr   ddtrace.internal.compatr   ddtrace.internal.constantsr   ddtrace.internal.loggerr   ddtrace.internal.moduler   r   ddtrace.internal.periodicr   ddtrace.internal.runtimer   r   ddtrace.internal.safetyr     ddtrace.internal.settings._agentr  #ddtrace.internal.settings.symbol_dbr/  ddtrace.internal.threadsr!   ddtrace.internal.utils.cacher"   ddtrace.internal.utils.httpr#   r$   r%   !ddtrace.internal.utils.inspectionr&   r'   r(   rg   r   r   r   r3  r   r   ru   r6   rm   r:   r?   rF   r[   r`   rb   ri   r   r   r   r   r6  r7  r4   r4   r4   r5   <module>   s      @p