use super::conventions;
pub(crate) fn record_error_on_current_span(error: &crate::XbergError) {
let span = tracing::Span::current();
span.record(conventions::OTEL_STATUS_CODE, "ERROR");
span.record(conventions::ERROR_TYPE, format!("{:?}", error));
span.record(conventions::ERROR_MESSAGE, error.to_string());
}
pub(crate) fn record_success_on_current_span() {
let span = tracing::Span::current();
span.record(conventions::OTEL_STATUS_CODE, "OK");
}
pub(crate) fn sanitize_path(path: &std::path::Path) -> String {
conventions::sanitize_filename(path).to_owned()
}
pub(crate) fn extractor_span(extractor_name: &str, mime_type: &str, size_bytes: usize) -> tracing::Span {
tracing::info_span!(
"xberg.extract",
{ conventions::EXTRACTOR_NAME } = extractor_name,
{ conventions::DOCUMENT_MIME_TYPE } = mime_type,
{ conventions::DOCUMENT_SIZE_BYTES } = size_bytes,
{ conventions::OTEL_STATUS_CODE } = tracing::field::Empty,
{ conventions::ERROR_TYPE } = tracing::field::Empty,
{ conventions::ERROR_MESSAGE } = tracing::field::Empty,
)
}
pub(crate) fn pipeline_stage_span(stage: &str) -> tracing::Span {
tracing::info_span!("xberg.pipeline", { conventions::PIPELINE_STAGE } = stage,)
}
pub(crate) fn extraction_stage_span(extractor_name: &str, extractor_priority: i32) -> tracing::Span {
tracing::info_span!(
"xberg.pipeline",
{ conventions::PIPELINE_STAGE } = conventions::stages::EXTRACTION,
{ conventions::EXTRACTOR_NAME } = extractor_name,
{ conventions::EXTRACTOR_PRIORITY } = extractor_priority,
)
}
pub(crate) fn batch_span(batch_size: usize) -> tracing::Span {
tracing::info_span!(
"xberg.batch",
{ conventions::OPERATION } = conventions::operations::BATCH_EXTRACT,
{ conventions::BATCH_SIZE } = batch_size,
)
}
pub(crate) fn batch_item_span(batch_index: usize) -> tracing::Span {
tracing::debug_span!(
"xberg.batch.item",
{ conventions::OPERATION } = conventions::operations::BATCH_EXTRACT,
{ conventions::BATCH_INDEX } = batch_index,
)
}
pub(crate) fn pipeline_processor_span(stage: &str, processor_name: &str) -> tracing::Span {
tracing::debug_span!(
"xberg.pipeline.processor",
{ conventions::PIPELINE_STAGE } = stage,
{ conventions::PIPELINE_PROCESSOR_NAME } = processor_name,
)
}
#[cfg(feature = "ocr")]
pub(crate) fn ocr_span(backend: &str, language: &str) -> tracing::Span {
tracing::info_span!(
"xberg.ocr",
{ conventions::OCR_BACKEND } = backend,
{ conventions::OCR_LANGUAGE } = language,
)
}
#[cfg(layout_detection)]
pub(crate) fn model_inference_span(model_name: &str) -> tracing::Span {
tracing::info_span!(
"xberg.model.inference",
{ conventions::MODEL_NAME } = model_name,
{ conventions::MODEL_INFERENCE_MS } = tracing::field::Empty,
)
}