Files
mongo/buildscripts/resmokelib/utils/file_span_exporter.py
2023-08-28 16:58:13 +00:00

40 lines
1.2 KiB
Python

from typing import Optional, Callable, Sequence
from os import linesep
from logging import getLogger
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
from opentelemetry.sdk.trace import ReadableSpan
logger = getLogger(__name__)
class FileSpanExporter(SpanExporter):
"""Implementation of :class:`SpanExporter` that sends spans to a file."""
def __init__(
self,
file_name: str,
service_name: Optional[str] = None,
formatter: Callable[[ReadableSpan], str] = lambda span: span.to_json() + linesep,
):
self.formatter = formatter
self.service_name = service_name
self.out = open(file_name, mode='w')
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
try:
for span in spans:
self.out.write(self.formatter(span))
self.out.flush()
except:
logger.exception("Failed to write OTEL metrics to file %s", self.out.name)
return SpanExportResult.FAILURE
return SpanExportResult.SUCCESS
def shutdown(self) -> None:
self.out.close()
def force_flush(self, timeout_millis: int = 30000) -> bool:
return True