UNPKG

@lodestar/utils

Version:

Utilities required across multiple lodestar packages

59 lines 3.27 kB
import { NonEmptyArray } from "./types.js"; export type NoLabels = Record<string, never>; export type LabelsGeneric = Record<string, string | number>; export type LabelKeys<Labels extends LabelsGeneric> = Extract<keyof Labels, string>; export type CollectFn<Labels extends LabelsGeneric> = (metric: Gauge<Labels>) => void; export interface Gauge<Labels extends LabelsGeneric = NoLabels> { inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void; dec: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void; set: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void; collect?(): void; reset(): void; } export interface GaugeExtra<Labels extends LabelsGeneric = NoLabels> extends Omit<Gauge<Labels>, "collect"> { addCollect(collectFn: CollectFn<Labels>): void; } export interface Histogram<Labels extends LabelsGeneric = NoLabels> { startTimer(): NoLabels extends Labels ? () => number : (labels: Labels) => number; startTimer<L extends Partial<Labels>>(labels?: NoLabels extends Labels ? never : L): keyof Omit<Labels, keyof L> extends never ? () => number : (labels: Omit<Labels, keyof L>) => number; observe: NoLabels extends Labels ? (value: number) => void : (labels: Labels, value: number) => void; reset(): void; } export interface AvgMinMax<Labels extends LabelsGeneric = NoLabels> { addGetValuesFn(getValuesFn: () => number[]): void; set: NoLabels extends Labels ? (values: number[]) => void : (labels: Labels, values: number[]) => void; } export interface Counter<Labels extends LabelsGeneric = NoLabels> { inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void; } export type GaugeConfig<Labels extends LabelsGeneric> = { name: string; help: string; } & (NoLabels extends Labels ? { labelNames?: never; } : { labelNames: NonEmptyArray<LabelKeys<Labels>>; }); export type HistogramConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels> & { buckets: number[]; }; export type AvgMinMaxConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels>; export type CounterConfig<Labels extends LabelsGeneric> = GaugeConfig<Labels>; export type StaticConfig<Labels extends LabelsGeneric> = { name: GaugeConfig<Labels>["name"]; help: GaugeConfig<Labels>["help"]; value: Record<LabelKeys<Labels>, string>; }; export interface MetricsRegister { gauge<Labels extends LabelsGeneric = NoLabels>(config: GaugeConfig<Labels>): Gauge<Labels>; histogram<Labels extends LabelsGeneric = NoLabels>(config: HistogramConfig<Labels>): Histogram<Labels>; counter<Labels extends LabelsGeneric = NoLabels>(config: CounterConfig<Labels>): Counter<Labels>; } export interface MetricsRegisterExtra extends MetricsRegister { gauge<Labels extends LabelsGeneric = NoLabels>(config: GaugeConfig<Labels>): GaugeExtra<Labels>; } export interface MetricsRegisterCustom extends MetricsRegisterExtra { avgMinMax<Labels extends LabelsGeneric = NoLabels>(config: AvgMinMaxConfig<Labels>): AvgMinMax<Labels>; static<Labels extends LabelsGeneric = NoLabels>(config: StaticConfig<Labels>): void; } //# sourceMappingURL=metrics.d.ts.map