Skip to content

Commit 9d7e614

Browse files
committed
abstract exporter headers and service_name
1 parent c9611a2 commit 9d7e614

File tree

1 file changed

+49
-14
lines changed

1 file changed

+49
-14
lines changed

src/langtrace_python_sdk/langtrace.py

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
4141
LANGTRACE_REMOTE_URL,
4242
)
43-
from langtrace_python_sdk.extensions.langtrace_exporter import LangTraceExporter
4443
from langtrace_python_sdk.instrumentation import (
4544
AnthropicInstrumentation,
4645
ChromaInstrumentation,
@@ -65,6 +64,8 @@
6564
VertexAIInstrumentation,
6665
WeaviateInstrumentation,
6766
)
67+
from opentelemetry.util.re import parse_env_headers
68+
6869
from langtrace_python_sdk.types import DisableInstrumentations, InstrumentationMethods
6970
from langtrace_python_sdk.utils import (
7071
check_if_sdk_is_outdated,
@@ -80,7 +81,7 @@
8081

8182
class LangtraceConfig:
8283
def __init__(self, **kwargs):
83-
self.api_key = kwargs.get("api_key")
84+
self.api_key = kwargs.get("api_key") or os.environ.get("LANGTRACE_API_KEY")
8485
self.batch = kwargs.get("batch", True)
8586
self.write_spans_to_console = kwargs.get("write_spans_to_console", False)
8687
self.custom_remote_exporter = kwargs.get("custom_remote_exporter")
@@ -89,7 +90,11 @@ def __init__(self, **kwargs):
8990
self.disable_tracing_for_functions = kwargs.get("disable_tracing_for_functions")
9091
self.service_name = kwargs.get("service_name")
9192
self.disable_logging = kwargs.get("disable_logging", False)
92-
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+
)
9398

9499

95100
def get_host(config: LangtraceConfig) -> str:
@@ -102,30 +107,51 @@ def get_host(config: LangtraceConfig) -> str:
102107
)
103108

104109

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+
105127
def setup_tracer_provider(config: LangtraceConfig, host: str) -> TracerProvider:
106128
sampler = LangtraceSampler(disabled_methods=config.disable_tracing_for_functions)
107-
resource = Resource.create(
108-
attributes={
109-
SERVICE_NAME: os.environ.get("OTEL_SERVICE_NAME")
110-
or config.service_name
111-
or sys.argv[0]
112-
}
113-
)
129+
resource = Resource.create(attributes={SERVICE_NAME: get_service_name(config)})
114130
return TracerProvider(resource=resource, sampler=sampler)
115131

116132

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+
117145
def get_exporter(config: LangtraceConfig, host: str):
118146
if config.custom_remote_exporter:
119147
return config.custom_remote_exporter
120148

121-
headers = {
122-
"x-api-key": config.api_key or os.environ.get("LANGTRACE_API_KEY"),
123-
}
149+
headers = get_headers(config)
124150
if "http" in host.lower() or "https" in host.lower():
125151
return HTTPExporter(endpoint=host, headers=headers)
126152
else:
127153
return GRPCExporter(endpoint=host, headers=headers)
128-
154+
129155

130156
def add_span_processor(provider: TracerProvider, config: LangtraceConfig, exporter):
131157
if config.write_spans_to_console:
@@ -212,6 +238,15 @@ def init(
212238
+ Fore.RESET
213239
)
214240

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+
215250
provider = setup_tracer_provider(config, host)
216251
exporter = get_exporter(config, host)
217252

0 commit comments

Comments
 (0)