import {Gauge, GaugeConfiguration, Registry, HistogramConfiguration, CounterConfiguration, Counter} from "prom-client"; import {AvgMinMax} from "./avgMinMax.js"; import {GaugeExtra} from "./gauge.js"; import {HistogramExtra} from "./histogram.js"; type StaticConfiguration = { name: GaugeConfiguration["name"]; help: GaugeConfiguration["help"]; value: Record; }; export class RegistryMetricCreator extends Registry { gauge(configuration: GaugeConfiguration): GaugeExtra { return new GaugeExtra({...configuration, registers: [this]}); } histogram(configuration: HistogramConfiguration): HistogramExtra { return new HistogramExtra({...configuration, registers: [this]}); } avgMinMax(configuration: GaugeConfiguration): AvgMinMax { return new AvgMinMax({...configuration, registers: [this]}); } /** Static metric to send string-based data such as versions, config params, etc */ static({name, help, value}: StaticConfiguration): void { new Gauge({name, help, labelNames: Object.keys(value), registers: [this]}).set(value, 1); } counter(configuration: CounterConfiguration): Counter { return new Counter({...configuration, registers: [this]}); } }