import { metrics, type Tracer, trace } from "@opentelemetry/api"; const meter = metrics.getMeter("@suaveplan/bitpacker-compressed"); export function getBitPackerCompressedTracer(): Tracer { return trace.getTracer("@suaveplan/bitpacker-compressed"); } /** * Counter incremented per top-level compress / decompress call. Labels: * `op` (`compress` | `decompress`), `algorithm` (e.g. `gzip`, `deflate`, * `none`, `rle`), and `success`. */ export const compressionOpsTotal = meter.createCounter( "bitpacker_compressed.ops.total", { description: "Total compression / decompression operations", unit: "{ops}", } ); /** * Histogram of operation duration in milliseconds. */ export const compressionOpDurationMs = meter.createHistogram( "bitpacker_compressed.op.duration_ms", { description: "Duration of compression / decompression in milliseconds", unit: "ms", } ); /** * Histogram of compression ratio (compressed bytes / input bytes), labelled * by `algorithm`. Recorded only on successful `compress` calls. */ export const compressionRatio = meter.createHistogram( "bitpacker_compressed.compression.ratio", { description: "Compression ratio (output_bytes / input_bytes) per successful compress", unit: "1", } ); export const BITPACKER_COMPRESSED_SPAN_NAMES = { compress: "bitpacker_compressed.compress", decompress: "bitpacker_compressed.decompress", pack: "bitpacker_compressed.pack", unpack: "bitpacker_compressed.unpack", } as const;