Source code for taimoe.platform.resources.observability
"""Observability resource for uploading runtime spans."""
from __future__ import annotations
from typing import TYPE_CHECKING
from taimoe.platform.types.observability import SpanBatch, SpanEvent
if TYPE_CHECKING:
from taimoe.platform.client.client import TaimoeClient
[docs]
class ObservabilityResource:
"""Resource for interacting with /api/v1/observability endpoints."""
def __init__(self, client: TaimoeClient) -> None:
self._client = client
[docs]
def submit_spans(self, batch: SpanBatch) -> None:
"""Synchronously upload a batch of runtime spans."""
self._client._request(
"POST",
"/api/v1/observability/spans/batch",
json=batch.model_dump(mode="json"),
)
[docs]
async def submit_spans_async(self, batch: SpanBatch) -> None:
"""Asynchronously upload a batch of runtime spans."""
await self._client._request_async(
"POST",
"/api/v1/observability/spans/batch",
json=batch.model_dump(mode="json"),
)
[docs]
def submit_span(self, span: SpanEvent) -> None:
"""Upload one span as a single-span batch."""
self.submit_spans(_single_span_batch(span))
[docs]
async def submit_span_async(self, span: SpanEvent) -> None:
"""Asynchronously upload one span as a single-span batch."""
await self.submit_spans_async(_single_span_batch(span))
def _single_span_batch(span: SpanEvent) -> SpanBatch:
return SpanBatch(
runtime_id=span.runtime_id,
trace_id=span.trace_id,
session_id=span.session_id,
spans=(span,),
)