
    Bvh@                    b   d Z ddlm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 ddl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 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/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD dZEdZFdZGeFeGdZHeeedZIe*e(e'dZJdZKeKZLd ZM ej                  eO      ZPeeee:   ee0   ee1   ee$   f   eeQe
f   f   ZR	 	 	 	 	 	 d3d!ZSd4d"ZTd5d#ZU	 	 	 	 d6d$ZV	 	 	 	 d7d%ZW	 	 	 	 d8	 	 	 	 	 	 	 	 	 d9d&ZX	 	 d:	 	 	 	 	 d;d'ZY	 	 	 d<	 	 	 	 	 	 	 d=d(ZZd) Z[	 	 	 	 	 	 	 	 d>d*Z\	 	 	 	 d?d+Z]d@d,Z^dAd-Z_	 	 	 	 	 	 	 	 	 dB	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dCd.Z` G d/ d0e      Za G d1 d2ea      Zby)DzF
OpenTelemetry SDK Configurator for Easy Instrumentation with Distros
    )annotationsN)ABCabstractmethod)environ)AnyCallableMappingSequenceTypeUnion)Literal)set_event_logger_provider)set_logger_provider)OTEL_LOGS_EXPORTEROTEL_METRICS_EXPORTEROTEL_PYTHON_ID_GENERATOROTEL_TRACES_EXPORTER)set_meter_provider)EventLoggerProvider)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_samplerc                   g }| D ]A  }	 |j                  |t        t        t        ||                  j	                         f       C |S # t
        $ r t        d| d      t        $ r t        d| d| d      w xY w)N)groupnamezRequested entry point 'z' not foundzRequested component 'z' not found in entry point '')appendnextiterr.   loadKeyErrorRuntimeErrorStopIteration)selected_componentsentry_point_namecomponent_implementationsselected_components       S/RAG/venv/lib/python3.12/site-packages/opentelemetry/sdk/_configuration/__init__.py_import_config_componentsrH   i   s     !#1	%,,&(&6=O df	 22 %$  	)*:);;G   	'(:'; <  014 	s   >A3A>c                 6    t        j                  t        d       S N)r   getr        rG   _get_samplerrN      s    ;;*D11rM   c                 >    t        j                  t        t              S rJ   )r   rK   r   _DEFAULT_ID_GENERATORrL   rM   rG   _get_id_generatorrQ      s    ;;/1FGGrM   c                   | t         t        t        fvr| S t        j                  t
        |         xs t        j                  t              }|s| t         k(  rt        S | S |j                         }| t         k(  r |t        vrt        d| d      t        |   S t        j	                  |      }|r| |k7  rt        j                  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   rK   _PROTOCOL_ENV_BY_SIGNAL_TYPEr   strip_EXPORTER_BY_OTLP_PROTOCOLrA   _loggerwarning)exporter_namesignal_typeotlp_protocolexporter_name_by_envs       rG   _get_exporter_entry_pointr_      s     !! 
  KK$[1 2	0	1  N*,,!'')M& ::-m_OL  *-88 699-H1E EJ	
 rM   c                   t        j                  t        j                  | d            }|r!|j                         j	                         dk(  rg S |j                  d      D cg c]  }t        |j	                         |        c}S c c}w )N none,)r   rK   _EXPORTER_ENV_BY_SIGNAL_TYPElowerrW   splitr_   )r\   names	_exporters      rG   _get_exporter_namesri      s|     KK488bIJEEKKM'')V3	 S))I 	")//"3[A)  s   "!Bc           
         t        |||      }t        |       |xs i }| j                         D ]7  \  }}|j                  |i       }|j	                  t         |di |             9 y )N)id_generatorsamplerresourcerL   )r'   r-   itemsrK   add_span_processorr(   )		exportersrk   rl   rm   exporter_args_mapprovider_exporter_classexporter_argss	            rG   _init_tracingrv      sr     !H
 !)/R&__.>)--nbA##~>>?	
 /rM   c           
     (   g }|xs i }| j                         D ]_  \  }}|j                  |i       }t        |t              r|j	                   |di |       @|j	                  t         |di |             a t        ||      }t        |       y )N)rm   metric_readersrL   )rn   rK   
issubclassr#   r<   r$   r!   r   )exporters_or_readersrm   rq   rx   rs   exporter_or_reader_classru   rr   s           rG   _init_metricsr|      s     N)/R';'A'A'C##)--.FK.=!!":"K]"KL!!-,=}= (D h~NHx rM   c           
        t        |      }t        |       |xs i }| j                         D ]7  \  }}|j                  |i       }|j	                  t         |di |             9 t        |      }t        |       |rIt                t        t        j                  |      }	t        j                         j                  |	       y y )N)rm   )logger_provider)levelr~   rL   )r   r   rn   rK   add_log_record_processorr   r   r   _patch_basic_configr   loggingNOTSET	getLogger
addHandler)
rp   rm   setup_logging_handlerrq   rr   rs   rt   ru   event_logger_providerhandlers
             rG   _init_loggingr      s     x0H!)/R&__.>)--nbA))#N$C]$CD	
 / 0I34 !..(
 	&&w/ rM   c                 F    t         j                  fd} | t         _        y )Nc                    t        j                         }t        |j                        dk(  xr t	        |j                  d   t
              }|r4|j                  j                         } | i | |j                  |       y  | i | y )N   r   )r   r   lenhandlers
isinstancer   popr   )argskwargsroothas_only_otelotel_handleroriginal_basic_configs        rG   patched_basic_configz1_patch_basic_config.<locals>.patched_basic_config  s{      "DMM*a/ 
JMM!n5
 ==,,.L!4262OOL)!4262rM   )r   basicConfig)r   r   s    @rG   r   r     s    #//
3 /GrM   c                n   i }i }i }t        | d      D ](  \  }}t        |t              r|||<   t        | d       t        |d      D ].  \  }}t        |t        t
        f      r|||<   "t        | d       t        |d      D ](  \  }}t        |t              r|||<   t        | 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)rH   ry   r)   rA   r"   r#   r   )trace_exporter_namesmetric_exporter_nameslog_exporter_namestrace_exportersmetric_exporterslog_exportersr[   exporter_impls           rG   _import_exportersr   *  s    OM
 
#=
	 m\2-:OM*-0HIJJ
 
#?
	 mnl%CD.;]+-0IJKK
 
#9
	 m[1+8M-(-0FGHH
 ,m;;rM   c                P    t        | j                         gt              d   \  }}|S )Nr   )rH   rW   _OTEL_SAMPLER_ENTRY_POINT_GROUP)sampler_namers   sampler_impls      rG   _import_sampler_factoryr   ]  s4     0				 ?	OA| rM   c                   | sy 	 t        |       }d }| dv r'	 t        t        j                  t        d            }|}nt        j                  t              } ||      }t        |t              s)d| d| d}t        j                  |       t        |      |S # t
        t        f$ r t        j                  d       d}Y w xY w# t        $ r!}t        j                  d| |       Y d }~y d }~ww xY w)	N)traceidratioparentbased_traceidratiora   zGCould 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	TypeErrorrY   rZ   r   r+   	Exception)r   sampler_factoryargraterl   messageexcs          rG   _import_samplerr   f  s    1,?GGRYY'>CD C))34C!#&'7+)/)::MgYVopGOOG$W%% 	* ] 	  I	

 s:   C #B AC &C?C CC 	C/C**C/c                    t        | j                         gd      d   \  } }t        |t              r |       S t	        |  d      )Nopentelemetry_id_generatorr   z is not an IdGenerator)rH   rW   ry   r*   rA   )id_generator_nameid_generator_impls     rG   _import_id_generatorr     sX    +D		 	 	"#%A,,	(( #[1 ""
+,,BC
DDrM   c	                   |g }|g }|g }t        |t        d      z   |t        d      z   |t        d      z         \  }	}
}|t               }t        |      }|t	               }t        |      }|i }| r| |t        j                  <   t        j                  |      }t        |	||||       t        |
||       |9t        j                  t        d      j                         j!                         dk(  }t#        ||||       y )Nr3   r4   r5   )rp   rk   rl   rm   rq   )rq   falsetrue)r   ri   rN   r   rQ   r   r,   TELEMETRY_AUTO_VERSIONr&   createrv   r|   r   r   r   rW   re   r   )auto_instrumentation_versionr   r   r   rl   resource_attributesrk   r   rq   span_exportersr   r   r   r   rm   s                  rG   _initialize_componentsr     s?    #!$ "!6G28<< 3I >>08873N$m
 #~!,/-/+,=>" #( 	.EEF
 23H !+ (6G $IIA7 UWUW 	 +	rM   c                  4    e Zd ZdZdZdZd Zed        Zd Z	y)_BaseConfiguratorzAn ABC for configurators

    Configurators are used to configure
    SDKs (i.e. TracerProvider, MeterProvider, Processors...)
    to reduce the amount of manual configuration required.
    NFc                n    | j                   t        j                  | g|i || _         | j                   S rJ   )	_instanceobject__new__)clsr   r   s      rG   r   z_BaseConfigurator.__new__  s0    == "NN3@@@CM}}rM   c                     y)Configure the SDKNrL   selfr   s     rG   
_configurez_BaseConfigurator._configure  s    rM   c                (     | j                   di | y)r   NrL   )r   r   s     rG   	configurez_BaseConfigurator.configure  s    !&!rM   )
__name__
__module____qualname____doc__r   _is_instrumentedr   r   r   r   rL   rM   rG   r   r     s2     I    "rM   r   c                      e Zd ZdZd Zy)_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                    t        di | y )NrL   )r   r   s     rG   r   z_OTelSDKConfigurator._configure  s    ((rM   N)r   r   r   r   r   rL   rM   rG   r   r     s    	)rM   r   )rC   Sequence[str]rD   strreturnzlist[tuple[str, Type]])r   
str | None)r   r   )r[   r   r\   $Literal['traces', 'metrics', 'logs'])r\   r   r   z	list[str])NNNN)
rp   zdict[str, Type[SpanExporter]]rk   IdGenerator | Nonerl   Sampler | Nonerm   Resource | Nonerq   ExporterArgsMap | None)NN)rz   z:dict[str, Union[Type[MetricExporter], Type[MetricReader]]]rm   r   rq   r   )NTN)rp   zdict[str, Type[LogExporter]]rm   r   r   boolrq   r   )r   r   r   r   r   r   r   z~tuple[dict[str, Type[SpanExporter]], dict[str, Union[Type[MetricExporter], Type[MetricReader]]], dict[str, Type[LogExporter]]])r   r   r   z'Callable[[float | str | None], Sampler])r   r   r   r   )r   r   r   r*   )	NNNNNNNNN)r   r   r   list[str] | Noner   r   r   r   rl   r   r   zAttributes | Nonerk   r   r   zbool | Nonerq   r   )cr   
__future__r   r   r   abcr   r   r   typingr   r   r	   r
   r   r   typing_extensionsr   opentelemetry._eventsr   opentelemetry._logsr   #opentelemetry.environment_variablesr   r   r   r   opentelemetry.metricsr   opentelemetry.sdk._eventsr   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.   rS   rT   rU   rX   rd   rV   _RANDOM_ID_GENERATORrP   r   r   r   rY   r   ExporterArgsMaprH   rN   rQ   r_   ri   rv   r|   r   r   r   r   r   r   r   r   r   rL   rM   rG   <module>r      s    #  	 #  @ @ % ; 3  5 9 B O   4 
 = 2 K < 4 = 3 ?- -  &.  #$   12,     , "@ 
'

H
%	\^\[	 CH%&%:=%%B2H))%I)X5  (," $04
,
$
 
 	

 .
4 !%04!! 	!
 .!6 !%"&04	0+00  0 .	0:/$0<'0<(0< &0<	0<f,BE 04-1.2+/"-1'+)-04?",?*? ,? )	?
 ? +? %? '? .?D" "4), )rM   