3131 SimpleSpanProcessor ,
3232)
3333
34+ from opentelemetry .exporter .otlp .proto .grpc .trace_exporter import (
35+ OTLPSpanExporter as GRPCExporter ,
36+ )
37+ from opentelemetry .exporter .otlp .proto .http .trace_exporter import (
38+ OTLPSpanExporter as HTTPExporter ,
39+ )
3440from langtrace_python_sdk .constants .exporter .langtrace_exporter import (
3541 LANGTRACE_REMOTE_URL ,
3642)
37- from langtrace_python_sdk .extensions .langtrace_exporter import LangTraceExporter
3843from langtrace_python_sdk .instrumentation import (
3944 AnthropicInstrumentation ,
4045 ChromaInstrumentation ,
5964 VertexAIInstrumentation ,
6065 WeaviateInstrumentation ,
6166)
67+ from opentelemetry .util .re import parse_env_headers
68+
6269from langtrace_python_sdk .types import DisableInstrumentations , InstrumentationMethods
6370from langtrace_python_sdk .utils import (
6471 check_if_sdk_is_outdated ,
7481
7582class LangtraceConfig :
7683 def __init__ (self , ** kwargs ):
77- self .api_key = kwargs .get ("api_key" )
84+ self .api_key = kwargs .get ("api_key" ) or os . environ . get ( "LANGTRACE_API_KEY" )
7885 self .batch = kwargs .get ("batch" , True )
7986 self .write_spans_to_console = kwargs .get ("write_spans_to_console" , False )
8087 self .custom_remote_exporter = kwargs .get ("custom_remote_exporter" )
@@ -83,7 +90,11 @@ def __init__(self, **kwargs):
8390 self .disable_tracing_for_functions = kwargs .get ("disable_tracing_for_functions" )
8491 self .service_name = kwargs .get ("service_name" )
8592 self .disable_logging = kwargs .get ("disable_logging" , False )
86- self .headers = kwargs .get ("headers" , {})
93+ self .headers = (
94+ kwargs .get ("headers" )
95+ or os .environ .get ("LANGTRACE_HEADERS" )
96+ or os .environ .get ("OTEL_EXPORTER_OTLP_HEADERS" )
97+ )
8798
8899
89100def get_host (config : LangtraceConfig ) -> str :
@@ -96,23 +107,50 @@ def get_host(config: LangtraceConfig) -> str:
96107 )
97108
98109
110+ def get_service_name (config : LangtraceConfig ):
111+ service_name = os .environ .get ("OTEL_SERVICE_NAME" )
112+ if service_name :
113+ return service_name
114+
115+ resource_attributes = os .environ .get ("OTEL_RESOURCE_ATTRIBUTES" )
116+ if resource_attributes :
117+ attrs = dict (attr .split ("=" ) for attr in resource_attributes .split ("," ))
118+ if "service.name" in attrs :
119+ return attrs ["service.name" ]
120+
121+ if config .service_name :
122+ return config .service_name
123+
124+ return sys .argv [0 ]
125+
126+
99127def setup_tracer_provider (config : LangtraceConfig , host : str ) -> TracerProvider :
100128 sampler = LangtraceSampler (disabled_methods = config .disable_tracing_for_functions )
101- resource = Resource .create (
102- attributes = {
103- SERVICE_NAME : os .environ .get ("OTEL_SERVICE_NAME" )
104- or config .service_name
105- or sys .argv [0 ]
106- }
107- )
129+ resource = Resource .create (attributes = {SERVICE_NAME : get_service_name (config )})
108130 return TracerProvider (resource = resource , sampler = sampler )
109131
110132
133+ def get_headers (config : LangtraceConfig ):
134+ if not config .headers :
135+ return {
136+ "x-api-key" : config .api_key ,
137+ }
138+
139+ if isinstance (config .headers , str ):
140+ return parse_env_headers (config .headers , liberal = True )
141+
142+ return config .headers
143+
144+
111145def get_exporter (config : LangtraceConfig , host : str ):
112146 if config .custom_remote_exporter :
113147 return config .custom_remote_exporter
114148
115- return LangTraceExporter (host , config .api_key , config .disable_logging )
149+ headers = get_headers (config )
150+ if "http" in host .lower () or "https" in host .lower ():
151+ return HTTPExporter (endpoint = host , headers = headers )
152+ else :
153+ return GRPCExporter (endpoint = host , headers = headers )
116154
117155
118156def add_span_processor (provider : TracerProvider , config : LangtraceConfig , exporter ):
@@ -200,6 +238,15 @@ def init(
200238 + Fore .RESET
201239 )
202240
241+ if host == LANGTRACE_REMOTE_URL and not config .api_key :
242+ print (Fore .RED )
243+ print (
244+ "Missing Langtrace API key, proceed to https://langtrace.ai to create one"
245+ )
246+ print ("Set the API key as an environment variable LANGTRACE_API_KEY" )
247+ print (Fore .RESET )
248+ return
249+
203250 provider = setup_tracer_provider (config , host )
204251 exporter = get_exporter (config , host )
205252
0 commit comments