o
    QDi9                     @   s  d Z ddlZddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ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"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ dZAdZBdZCeBeCdZDeeedZEe&e$e#dZFdZGeGZHdZIeJeKZLde
eM deMd eeeMeNf  fd!d"ZOd eeM fd#d$ZPd eMfd%d&ZQd'eMd(ed fd)d*ZRd(ed d eeM fd+d,ZS			dNd-e	eMee6 f d.e8d/e:d0e1fd1d2ZT	dOd3e	eMeee, ee- f f d0e1fd4d5ZU	dOd-e	eMee  f d0e1fd6d7ZVd8eeM d9eeM d:eeM d ee	eMee6 f e	eMeee, ee- f f e	eMee  f f fd;d<ZWd=eMd eeMge:f fd>d?ZXd=eMd ee: fd@dAZYdBeMd e8fdCdDZZ								dPdEeeM d8ee
eM  d9ee
eM  d:ee
eM  d/ee: dFee0 d.e8dGee[ fdHdIZ\G dJdK dKeZ]G dLdM dMe]Z^dS )QzF
OpenTelemetry SDK Configurator for Easy Instrumentation with Distros
    N)ABCabstractmethod)environ)CallableDictListOptionalSequenceTupleTypeUnion)Literal)set_logger_provider)OTEL_LOGS_EXPORTEROTEL_METRICS_EXPORTEROTEL_PYTHON_ID_GENERATOROTEL_TRACES_EXPORTER)set_meter_provider)LoggerProviderLoggingHandler)BatchLogRecordProcessorLogExporter)1_OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED OTEL_EXPORTER_OTLP_LOGS_PROTOCOL#OTEL_EXPORTER_OTLP_METRICS_PROTOCOLOTEL_EXPORTER_OTLP_PROTOCOL"OTEL_EXPORTER_OTLP_TRACES_PROTOCOLOTEL_TRACES_SAMPLEROTEL_TRACES_SAMPLER_ARG)MeterProvider)MetricExporterMetricReaderPeriodicExportingMetricReader)
AttributesResource)TracerProvider)BatchSpanProcessorSpanExporter)IdGenerator)Sampler)ResourceAttributes)set_tracer_provider)entry_pointsotlpotlp_proto_grpcotlp_proto_http)grpczhttp/protobuf)tracesmetricslogsrandomopentelemetry_traces_samplerselected_componentsentry_point_namereturnc              
   C   sx   g }| D ]5}z| |ttt||d f W q ty(   td| d ty9   td| d| dw |S )N)groupnamezRequested entry point 'z' not foundzRequested component 'z' not found in entry point '')appendnextiterr,   loadKeyErrorRuntimeErrorStopIteration)r6   r7   component_implementationsselected_component rE   b/var/www/Datamplify/venv/lib/python3.10/site-packages/opentelemetry/sdk/_configuration/__init__.py_import_config_components[   s6   
rG   c                   C   s   t td S N)r   getr   rE   rE   rE   rF   _get_sampler      rJ   c                   C   s   t ttS rH   )r   rI   r   _DEFAULT_ID_GENERATORrE   rE   rE   rF   _get_id_generator   rK   rM   exporter_namesignal_typec                 C   s   | t ttfvr	| S tt| ptt}|s| t krtS | S | }| t kr7|tvr3t	d| dt| S t|}|rI| |krIt
d||  | S )NzUnsupported OTLP protocol 'z' is configuredz<Conflicting values for %s OTLP exporter protocol, using '%s')_EXPORTER_OTLP_EXPORTER_OTLP_PROTO_GRPC_EXPORTER_OTLP_PROTO_HTTPr   rI   _PROTOCOL_ENV_BY_SIGNAL_TYPEr   strip_EXPORTER_BY_OTLP_PROTOCOLrA   _loggerwarning)rN   rO   otlp_protocolexporter_name_by_envrE   rE   rF   _get_exporter_entry_point   s<   

rZ   c                    sB   t t d}|r|  dkrg S  fdd|dD S )N nonec                    s   g | ]	}t |  qS rE   )rZ   rT   ).0	_exporterrO   rE   rF   
<listcomp>   s    z'_get_exporter_names.<locals>.<listcomp>,)r   rI   _EXPORTER_ENV_BY_SIGNAL_TYPElowerrT   split)rO   namesrE   r_   rF   _get_exporter_names   s   
rf   	exportersid_generatorsamplerresourcec                 C   sH   t |||d}t| |  D ]\}}i }|t|di | qd S )N)rh   ri   rj   rE   )r%   r+   itemsadd_span_processorr&   )rg   rh   ri   rj   provider_exporter_classexporter_argsrE   rE   rF   _init_tracing   s   rq   exporters_or_readersc                 C   sj   g }|   D ]"\}}i }t|tr||di | q|t|di | qt||d}t| d S )N)rj   metric_readersrE   )rk   
issubclassr!   r<   r"   r   r   )rr   rj   rs   rn   exporter_or_reader_classrp   rm   rE   rE   rF   _init_metrics   s   
rv   c                 C   s`   t |d}t| |  D ]\}}i }|t|di | qttj|d}t 	| d S )N)rj   )levellogger_providerrE   )
r   r   rk   add_log_record_processorr   r   loggingNOTSET	getLogger
addHandler)rg   rj   rm   rn   ro   rp   handlerrE   rE   rF   _init_logging   s   
r   trace_exporter_namesmetric_exporter_nameslog_exporter_namesc                 C   s   i }i }i }t | dD ]\}}t|tr|||< qt| dt |dD ]\}}t|ttfr5|||< q%t| dt |dD ]\}}t|trO|||< qAt| d|||fS )Nopentelemetry_traces_exporterz is not a trace exporteropentelemetry_metrics_exporterz is not a metric exporteropentelemetry_logs_exporterz is not a log exporter)rG   rt   r'   rA   r    r!   r   )r   r   r   trace_exportersmetric_exporterslog_exportersrN   exporter_implrE   rE   rF   _import_exporters   s>   	





r   sampler_namec                 C   s   t |  gtd \}}|S )Nr   )rG   rT   _OTEL_SAMPLER_ENTRY_POINT_GROUP)r   rn   sampler_implrE   rE   rF   _import_sampler_factory2  s   
r   c              
   C   s   | sd S zLt | }d }| dv r.z	ttt}W n ttfy*   td d}Y nw |}ntt}||}t	|t
sNd| d| d}t| t||W S  tyj } ztd| | W Y d }~d S d }~ww )N)traceidratioparentbased_traceidratiozGCould not convert TRACES_SAMPLER_ARG to float. Using default value 1.0.g      ?zSampler factory, z, produced output, z, which is not a Sampler.z;Using default sampler. Failed to initialize sampler, %s: %s)r   floatosgetenvr   
ValueError	TypeErrorrV   rW   
isinstancer)   	Exception)r   sampler_factoryargrateri   messageexcrE   rE   rF   _import_sampler9  s>   


r   id_generator_namec                 C   s6   t |  gdd \} }t|tr| S t|  d)Nopentelemetry_id_generatorr   z is not an IdGenerator)rG   rT   rt   r(   rA   )r   id_generator_implrE   rE   rF   _import_id_generatorZ  s   

r   auto_instrumentation_versionresource_attributeslogging_enabledc                 C   s   |d u rg }|d u rg }|d u rg }t |td |td |td \}}	}
|d u r2t }t|}|d u r=t }t|}|d u rCi }| rJ| |tj< t	|}t
||||d t|	| |d u rlttd  dk}|rut|
| d S d S )Nr1   r2   r3   )rg   rh   ri   rj   falsetrue)r   rf   rJ   r   rM   r   r*   TELEMETRY_AUTO_VERSIONr$   createrq   rv   r   r   r   rT   rc   r   )r   r   r   r   ri   r   rh   r   span_exportersr   r   r   r   rj   rE   rE   rF   _initialize_componentse  sT   






r   c                   @   s4   e Zd ZdZdZdZdd Zedd Zdd	 Z	dS )
_BaseConfiguratorzAn ABC for configurators

    Configurators are used to configure
    SDKs (i.e. TracerProvider, MeterProvider, Processors...)
    to reduce the amount of manual configuration required.
    NFc                 O   s*   | j d u rtj| g|R i || _ | j S rH   )	_instanceobject__new__)clsargskwargsrE   rE   rF   r     s   
z_BaseConfigurator.__new__c                 K   s   dS )Configure the SDKNrE   selfr   rE   rE   rF   
_configure  s    z_BaseConfigurator._configurec                 K   s   | j di | dS )r   NrE   )r   r   rE   rE   rF   	configure  s   z_BaseConfigurator.configure)
__name__
__module____qualname____doc__r   _is_instrumentedr   r   r   r   rE   rE   rE   rF   r     s    
r   c                   @   s   e Zd ZdZdd ZdS )_OTelSDKConfiguratora  A basic Configurator by OTel Python for initializing OTel SDK components

    Initializes several crucial OTel SDK components (i.e. TracerProvider,
    MeterProvider, Processors...) according to a default implementation. Other
    Configurators can subclass and slightly alter this initialization.

    NOTE: This class should not be instantiated nor should it become an entry
    point on the `opentelemetry-sdk` package. Instead, distros should subclass
    this Configurator and enhance it as needed.
    c                 K   s   t di | d S )NrE   )r   r   rE   rE   rF   r     s   z_OTelSDKConfigurator._configureN)r   r   r   r   r   rE   rE   rE   rF   r     s    r   )NNNrH   )NNNNNNNN)_r   rz   r   abcr   r   r   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   opentelemetry._logsr   #opentelemetry.environment_variablesr   r   r   r   opentelemetry.metricsr   opentelemetry.sdk._logsr   r   opentelemetry.sdk._logs.exportr   r   'opentelemetry.sdk.environment_variablesr   r   r   r   r   r   r   opentelemetry.sdk.metricsr    opentelemetry.sdk.metrics.exportr    r!   r"   opentelemetry.sdk.resourcesr#   r$   opentelemetry.sdk.tracer%   opentelemetry.sdk.trace.exportr&   r'   $opentelemetry.sdk.trace.id_generatorr(    opentelemetry.sdk.trace.samplingr)   opentelemetry.semconv.resourcer*   opentelemetry.tracer+   &opentelemetry.util._importlib_metadatar,   rP   rQ   rR   rU   rb   rS   _RANDOM_ID_GENERATORrL   r   r|   r   rV   strr   rG   rJ   rM   rZ   rf   rq   rv   r   r   r   r   r   boolr   r   r   rE   rE   rE   rF   <module>   s  ($	

$
,




3!



: