First Commit

This commit is contained in:
2026-04-28 05:54:55 -03:00
parent 8810f2e2e8
commit 6c574c8929
3 changed files with 466 additions and 51 deletions

View File

@@ -1,21 +1,64 @@
import os
from contextlib import contextmanager
_TRACING_ENABLED=os.getenv("ENABLE_TRACING","false").lower()=="true"
try:
if _TRACING_ENABLED:
_TRACING_ENABLED = os.getenv("ENABLE_TRACING", "false").lower() == "true"
tracer = None
if _TRACING_ENABLED:
try:
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
provider=TracerProvider(); endpoint=os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT","http://localhost:6006/v1/traces")
provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint=endpoint)))
trace.set_tracer_provider(provider); tracer=trace.get_tracer("nemo_guardrails_governed_project")
else: tracer=None
except Exception: tracer=None
endpoint = os.getenv(
"OTEL_EXPORTER_OTLP_ENDPOINT",
"http://localhost:6006/v1/traces"
)
# ✅ Define metadata do serviço (IMPORTANTE pro Phoenix)
resource = Resource.create({
"service.name": "nemo_guardrails_governed_project"
})
provider = TracerProvider(resource=resource)
exporter = OTLPSpanExporter(
endpoint=endpoint,
timeout=5 # evita travamentos
)
span_processor = BatchSpanProcessor(exporter)
provider.add_span_processor(span_processor)
# ✅ Evita sobrescrever provider existente
if not isinstance(trace.get_tracer_provider(), TracerProvider):
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(__name__)
except Exception as e:
print(f"[Tracing Disabled] Error initializing tracing: {e}")
tracer = None
@contextmanager
def span(name:str, **attrs):
def span(name: str, **attrs):
if tracer is None:
yield None; return
with tracer.start_as_current_span(name) as sp:
for k,v in attrs.items(): sp.set_attribute(k,str(v))
yield sp
yield None
return
try:
with tracer.start_as_current_span(name) as sp:
for k, v in attrs.items():
# ✅ mantém tipo quando possível
if isinstance(v, (str, int, float, bool)):
sp.set_attribute(k, v)
else:
sp.set_attribute(k, str(v))
yield sp
except Exception as e:
print(f"[Tracing Error] Span '{name}' failed: {e}")
yield None