Files
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

78 lines
2.4 KiB
Python

"""Unified Tracer API client module."""
import os
from config.config import get_tracer_base_url
from integrations.tracer.aws_batch_jobs import AWSBatchJobResult
from integrations.tracer.client import TracerClient
from integrations.tracer.tracer_integrations import (
GrafanaIntegrationCredentials,
)
from integrations.tracer.tracer_logs import LogResult
from integrations.tracer.tracer_pipelines import (
PipelineRunSummary,
PipelineSummary,
TracerRunResult,
)
from integrations.tracer.tracer_tools import TracerTaskResult
from platform.auth.jwt_auth import extract_org_id_from_jwt
__all__ = [
"AWSBatchJobResult",
"GrafanaIntegrationCredentials",
"LogResult",
"PipelineRunSummary",
"PipelineSummary",
"TracerClient",
"TracerRunResult",
"TracerTaskResult",
"get_tracer_client",
"get_tracer_client_for_org",
"get_tracer_web_client",
]
_tracer_client: TracerClient | None = None
def _clean_jwt(raw: str) -> str:
token = raw.strip()
if token.lower().startswith("bearer "):
token = token.split(None, 1)[1].strip()
return "".join(token.split())
def get_tracer_client() -> TracerClient:
"""Get unified Tracer client singleton. Extracts org_id from JWT."""
global _tracer_client
if _tracer_client is None:
jwt_token = _clean_jwt(os.getenv("JWT_TOKEN", ""))
if not jwt_token:
raise ValueError("JWT_TOKEN environment variable is required")
org_id = extract_org_id_from_jwt(jwt_token)
if not org_id:
raise ValueError("JWT_TOKEN must contain organization claim")
_tracer_client = TracerClient(get_tracer_base_url(), org_id, jwt_token)
return _tracer_client
def get_tracer_web_client() -> TracerClient:
"""Alias for get_tracer_client()."""
return get_tracer_client()
def get_tracer_client_for_org(org_id: str, auth_token: str) -> TracerClient:
"""Create a TracerClient for a specific org using the user's auth token.
Unlike get_tracer_client() which uses the JWT_TOKEN env var,
this creates a client using the per-request auth token from state.
Args:
org_id: Organization ID from the authenticated user.
auth_token: Raw JWT token from state._auth_token.
Returns:
TracerClient configured for the user's org.
"""
token = _clean_jwt(auth_token)
return TracerClient(get_tracer_base_url(), org_id, token)