o
    iI%                  
   @   s,  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 edeedeedddd de fddZ!dee e f fddZ"dd Z#dd Z$dd Z%d d! Z&d"d# Z'd$d% Z(d&d' Z)dS )(    N)wrap_function_wrapper)config)Pin)unwrap)SpanKind)azure_eventhubs)azure_servicebus)schematize_service_name)_get_config)asbool)HTTPPropagator   create_contextwrap_function_with_tracingazure_functions&DD_AZURE_FUNCTIONS_DISTRIBUTED_TRACINGT)default)_default_servicedistributed_tracingreturnc                   C   s   t tddS )N__version__ )getattrr    r   r   b/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/azure_functions/patch.pyget_version   s   r   c                   C   s   ddiS )Nazure.functionsz>=1.10.1r   r   r   r   r   _supported_versions    s   r   c                   C   s4   t tddrdS dt_t tj tddt dS )z4
    Patch `azure.functions` module for tracing
    _datadog_patchFNTr   zFunctionApp.get_functions)r   r   r    r   ontoFunctionApp_w_patched_get_functionsr   r   r   r   patch$   s
   r%   c                 C   s   t |}|r| s| |i |S | |i |}|D ]P}| }|s$q| }| }	|j}
| }| }|dkrDt	||||
|_
q|dkrPt||||_
q|dkr^t||||
|	|_
q|dkrkt||||
|	|_
q|S )NhttpTriggertimerTriggerserviceBusTriggereventHubTrigger)r   get_fromenabledget_triggerget_binding_nameget_dict_reprnameget_function_nameget_user_function_wrap_http_trigger_func_wrap_timer_trigger_wrap_service_bus_trigger_wrap_event_hubs_trigger)wrappedinstanceargskwargspin	functionsfunctiontriggertrigger_typetrigger_detailstrigger_arg_namefunction_namefuncr   r   r   r$   1   s.   
r$   c                    4   d fdd} fdd}t |||dS )N	EventHubsc                        d  }t d|S )N z"azure.functions.patched_event_hubsr   r:   resource_namerB   r;   r?   r   r   context_factoryS      z1_wrap_event_hubs_trigger.<locals>.context_factoryc                    sr   d} d}| }|tjjkr^t|tr^t|d tjr^tt|}t	|d di }| di  d}d }t
jjr]| dg D ]}	t|	}
|
jd ur\|
jd ur\| j|
 qEnHt|tjrd }t	|di }| di  d}| di  d	}t
jjrt| d
i }
|
d ur|
jd ur|
jd ur| j|
 nd }d }d }d| t
j tjtjtj||||ffS )NeventHubNamecardinalityr   metadataPartitionContextFullyQualifiedNamespacePropertiesArraySystemPropertiesz
message-id
Propertiesz+azure.functions.event_hubs_trigger_modifier)getr   CardinalityMANY
isinstancelistEventHubEventstrlenr   r   r   r   extracttrace_idspan_idspan	link_spanr   CONSUMERazure_eventhubsxRECEIVESERVICE)ctxr:   entity_namerN   msg_arg_valuebatch_countrO   fully_qualified_namespace
message_id
propertiesparent_contextrB   rA   r@   r?   r   r   pre_dispatchW   s^   





z._wrap_event_hubs_trigger.<locals>.pre_dispatchro   r   r;   rC   rB   rA   r@   rK   ro   r   rB   r;   rA   r@   r?   r   r6   P   s   8r6   c                    s<   dfdd}fdd} fdd}t ||||dS )	NHttpc                    s   |  }td |jdS )Nz%azure.functions.patched_route_request)headers)rU   r   rt   )r:   req)r;   rA   r   r   rK         
z+_wrap_http_trigger.<locals>.context_factoryc                    s   |  }d| tj|ffS )Nz%azure.functions.request_call_modifier)rU   r   r   )rf   r:   ru   )rA   r   r   ro      rv   z(_wrap_http_trigger.<locals>.pre_dispatchc                    s   d| t j| ffS )Nzazure.functions.start_response)r   r   )rf   resrB   r?   r   r   post_dispatch   s   z)_wrap_http_trigger.<locals>.post_dispatch)ro   ry   r   )r;   rC   rB   rA   rK   ro   ry   r   )rB   r;   rA   r?   r   r2      s
   r2   c                    rD   )N
ServiceBusc                    rF   )NrG   z#azure.functions.patched_service_busr   rH   rJ   r   r   rK      rL   z2_wrap_service_bus_trigger.<locals>.context_factoryc           
         sT   dp	 d} d}| }|tjjkr^t|tr^t|d tjr^tt|}t	|d di  di  d}d }t
jjr]|D ]}t|j}	|	jd ur\|	jd ur\| j|	 qDn9t|tjrd }t	|di  di  d}|j}t
jjrt|j}	|	jd ur|	jd ur| j|	 nd }d }d }d| t
j tjtjtj||||ffS )	N	topicName	queueNamerN   r   rO   ClientrQ   z,azure.functions.service_bus_trigger_modifier)rU   r   rV   rW   rX   rY   ServiceBusMessager[   r\   r   r   r   r   r]   application_propertiesr^   r_   r`   ra   rk   r   rb   azure_servicebusxrd   re   )
rf   r:   rg   rN   rh   ri   rj   rk   messagerm   rn   r   r   ro      sZ   

z/_wrap_service_bus_trigger.<locals>.pre_dispatchrp   r   rq   r   rr   r   r5      s   6r5   c                    s0   d fdd} fdd}t |||dS )NTimerc                    rF   )NrG   zazure.functions.patched_timerr   rH   rJ   r   r   rK      rL   z,_wrap_timer_trigger.<locals>.context_factoryc                    s   d| t j tjffS )Nz%azure.functions.trigger_call_modifier)r   r   r   INTERNAL)rf   r:   rx   r   r   ro      s   z)_wrap_timer_trigger.<locals>.pre_dispatchrp   r   )r;   rC   rB   rK   ro   r   rJ   r   r4      s   r4   c                   C   s&   t tddsd S dt_ttjd d S )Nr    Fget_functions)r   r   r    _ur"   r   r   r   r   unpatch   s   r   )*azure.functionsr<   r   wraptr   r#   ddtracer   ddtrace._trace.pinr   $ddtrace.contrib.internal.trace_utilsr   r   ddtrace.extr   r   rc   r   r   ddtrace.internal.schemar	   !ddtrace.internal.settings._configr
   ddtrace.internal.utils.formatsr   ddtrace.propagation.httpr   utilsr   r   _adddictr[   r   r   r%   r$   r6   r2   r5   r4   r   r   r   r   r   <module>   s<    	B@