Skip to content

Commit

Permalink
chore: improve dsn
Browse files Browse the repository at this point in the history
  • Loading branch information
vmihailenco committed Nov 6, 2023
1 parent 8cf9715 commit aca7cd4
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 30 deletions.
6 changes: 4 additions & 2 deletions src/uptrace/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,7 @@ def _get_tracer(self):
def trace_url(self, span: Optional[trace.Span] = None) -> str:
if span is None:
span = trace.get_current_span()
trace_id = span.get_span_context().trace_id
return f"{self._dsn.app_addr}/traces/{trace_id:0{32}x}"
span_ctx = span.get_span_context()
trace_id = span_ctx.trace_id
span_id = span_ctx.span_id
return f"{self._dsn.site_url}/traces/{trace_id:0{32}x}?span_id={span_id}"
43 changes: 26 additions & 17 deletions src/uptrace/dsn.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,46 @@
from urllib.parse import urlparse
from urllib.parse import urlparse, parse_qs

from .util import remove_prefix


class DSN:
# pylint:disable=too-many-arguments
def __init__(self, dsn="", scheme="", host="", port="", project_id="", token=""):
def __init__(
self, dsn="", scheme="", host="", http_port="", grpc_port="", token=""
):
self.str = dsn
self.scheme = scheme
self.host = host
self.port = port
self.project_id = project_id
self.http_port = http_port
self.grpc_port = grpc_port
self.token = token

def __str__(self):
return self.str

@property
def app_addr(self):
def site_url(self):
if self.host == "uptrace.dev":
return f"{self.scheme}://app.uptrace.dev"
return f"{self.scheme}://{self.host}:14318"
return "https://app.uptrace.dev"
if self.http_port:
return f"{self.scheme}://{self.host}:{self.http_port}"
return f"{self.scheme}://{self.host}"

@property
def otlp_http_addr(self):
def otlp_http_endpoint(self):
if self.host == "uptrace.dev":
return "https://otlp.uptrace.dev"
return f"{self.scheme}://{self.host}:{self.port}"
if self.http_port:
return f"{self.scheme}://{self.host}:{self.http_port}"
return f"{self.scheme}://{self.host}"

@property
def otlp_grpc_addr(self):
def otlp_grpc_endpoint(self):
if self.host == "uptrace.dev":
return "https://otlp.uptrace.dev:4317"
return f"{self.scheme}://{self.host}:{self.port}"
if self.grpc_port:
return f"{self.scheme}://{self.host}:{self.grpc_port}"
return f"{self.scheme}://{self.host}"


def parse_dsn(dsn: str) -> DSN:
Expand All @@ -49,17 +57,18 @@ def parse_dsn(dsn: str) -> DSN:
if host == "api.uptrace.dev":
host = "uptrace.dev"

if host != "uptrace.dev":
return DSN(dsn=dsn, scheme=o.scheme, host=host, port=o.port)

project_id = remove_prefix(o.path, "/")
token = o.username
grpc_port = "14317"
if o.query:
query = parse_qs(o.query)
if "grpc" in query:
grpc_port = query["grpc"][0]

return DSN(
dsn=dsn,
scheme=o.scheme,
host=host,
port=o.port,
project_id=project_id,
http_port=o.port,
grpc_port=grpc_port,
token=token,
)
2 changes: 1 addition & 1 deletion src/uptrace/logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def configure_logs(dsn: DSN, resource: Resource, level=logging.NOTSET):
set_logger_provider(logger_provider)

exporter = OTLPLogExporter(
endpoint=dsn.otlp_grpc_addr,
endpoint=dsn.otlp_grpc_endpoint,
headers=(("uptrace-dsn", dsn.str),),
timeout=5,
compression=grpc.Compression.Gzip,
Expand Down
2 changes: 1 addition & 1 deletion src/uptrace/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def configure_metrics(
resource: Resource,
):
exporter = OTLPMetricExporter(
endpoint=dsn.otlp_grpc_addr,
endpoint=dsn.otlp_grpc_endpoint,
headers=(("uptrace-dsn", dsn.str),),
timeout=5,
compression=grpc.Compression.Gzip,
Expand Down
2 changes: 1 addition & 1 deletion src/uptrace/traces.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def configure_traces(
trace.set_tracer_provider(provider)

exporter = OTLPSpanExporter(
endpoint=dsn.otlp_grpc_addr,
endpoint=dsn.otlp_grpc_endpoint,
headers=(("uptrace-dsn", dsn.str),),
timeout=5,
compression=grpc.Compression.Gzip,
Expand Down
6 changes: 3 additions & 3 deletions src/uptrace/uptrace.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

logger = logging.getLogger(__name__)

_CLIENT = Client(parse_dsn("https://<token>@uptrace.dev/<project_id>"))
_CLIENT = Client(parse_dsn("https://<token>@api.uptrace.dev"))


# pylint: disable=too-many-arguments
Expand Down Expand Up @@ -52,11 +52,11 @@ def configure_opentelemetry(
logger.warning("can't parse Uptrace DSN: %s (Uptrace is disabled)", exc)
return

if dsn.token == "<token>" or dsn.project_id == "<project_id>":
if dsn.token == "<token>":
logger.warning("dummy Uptrace DSN detected: %s (Uptrace is disabled)", dsn)
return

if dsn.port == "14318":
if dsn.grpc_port == "14318":
logger.warning(
"uptrace-python uses OTLP/gRPC exporter, but got port %s", dsn.port
)
Expand Down
16 changes: 11 additions & 5 deletions test/test_uptrace.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,16 @@ def test_trace_url():

def test_dsn():
dsn = uptrace.parse_dsn("http://localhost:14318")
assert dsn.app_addr == "http://localhost:14318"
assert dsn.otlp_http_addr == "http://localhost:14318"
assert dsn.otlp_grpc_addr == "http://localhost:14318"
assert dsn.site_url == "http://localhost:14318"
assert dsn.otlp_http_endpoint == "http://localhost:14318"
assert dsn.otlp_grpc_endpoint == "http://localhost:14317"

dsn = uptrace.parse_dsn("https://localhost?grpc=123")
assert dsn.site_url == "https://localhost"
assert dsn.otlp_http_endpoint == "https://localhost"
assert dsn.otlp_grpc_endpoint == "https://localhost:123"

dsn = uptrace.parse_dsn("https://<token>@uptrace.dev/<project_id>")
assert dsn.app_addr == "https://app.uptrace.dev"
assert dsn.otlp_grpc_addr == "https://otlp.uptrace.dev:4317"
assert dsn.site_url == "https://app.uptrace.dev"
assert dsn.otlp_http_endpoint == "https://otlp.uptrace.dev"
assert dsn.otlp_grpc_endpoint == "https://otlp.uptrace.dev:4317"

0 comments on commit aca7cd4

Please sign in to comment.