Files
suaveplan/packages/foundation/bitpacker/bitpacker-compressed/src/otel/instruments.ts
2026-05-27 23:47:53 +01:00

52 lines
1.5 KiB
TypeScript

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;