Skip to content

Commit

Permalink
Default to NoLabels to fix type issues
Browse files Browse the repository at this point in the history
  • Loading branch information
nflaig committed Dec 19, 2023
1 parent 3250368 commit 2a14a4b
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 14 deletions.
11 changes: 6 additions & 5 deletions packages/beacon-node/src/metrics/utils/registryMetricCreator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,31 @@ import {
LabelKeys,
LabelsGeneric,
MetricsRegisterCustom,
NoLabels,
StaticConfig,
} from "@lodestar/utils";
import {AvgMinMax} from "./avgMinMax.js";
import {GaugeExtra} from "./gauge.js";

export class RegistryMetricCreator extends Registry implements MetricsRegisterCustom {
gauge<Labels extends LabelsGeneric>(configuration: GaugeConfig<Labels>): IGaugeExtra<Labels> {
gauge<Labels extends LabelsGeneric = NoLabels>(configuration: GaugeConfig<Labels>): IGaugeExtra<Labels> {
return new GaugeExtra<Labels>({...configuration, registers: [this]});
}

histogram<Labels extends LabelsGeneric>(configuration: HistogramConfig<Labels>): IHistogram<Labels> {
histogram<Labels extends LabelsGeneric = NoLabels>(configuration: HistogramConfig<Labels>): IHistogram<Labels> {
return new Histogram<LabelKeys<Labels>>({...configuration, registers: [this]});
}

avgMinMax<Labels extends LabelsGeneric>(configuration: AvgMinMaxConfig<Labels>): IAvgMinMax<Labels> {
avgMinMax<Labels extends LabelsGeneric = NoLabels>(configuration: AvgMinMaxConfig<Labels>): IAvgMinMax<Labels> {
return new AvgMinMax<Labels>({...configuration, registers: [this]});
}

/** Static metric to send string-based data such as versions, config params, etc */
static<Labels extends LabelsGeneric>({name, help, value}: StaticConfig<Labels>): void {
static<Labels extends LabelsGeneric = NoLabels>({name, help, value}: StaticConfig<Labels>): void {
new Gauge({name, help, labelNames: Object.keys(value), registers: [this]}).set(value, 1);
}

counter<Labels extends LabelsGeneric>(configuration: CounterConfig<Labels>): ICounter<Labels> {
counter<Labels extends LabelsGeneric = NoLabels>(configuration: CounterConfig<Labels>): ICounter<Labels> {
return new Counter<LabelKeys<Labels>>({...configuration, registers: [this]});
}
}
16 changes: 7 additions & 9 deletions packages/utils/src/metrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ 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;

// Type `{}` is required here as alternative types do not work
// eslint-disable-next-line @typescript-eslint/ban-types
export type NoLabels = {};
export type NoLabels = Record<string, never>;

export interface Gauge<Labels extends LabelsGeneric = NoLabels> {
inc: NoLabels extends Labels ? (value?: number) => void : (labels: Labels, value?: number) => void;
Expand Down Expand Up @@ -57,16 +55,16 @@ export type StaticConfig<Labels extends LabelsGeneric> = {
};

export interface MetricsRegister {
gauge<Labels extends LabelsGeneric>(config: GaugeConfig<Labels>): Gauge<Labels>;
histogram<Labels extends LabelsGeneric>(config: HistogramConfig<Labels>): Histogram<Labels>;
counter<Labels extends LabelsGeneric>(config: CounterConfig<Labels>): Counter<Labels>;
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>(config: GaugeConfig<Labels>): GaugeExtra<Labels>;
gauge<Labels extends LabelsGeneric = NoLabels>(config: GaugeConfig<Labels>): GaugeExtra<Labels>;
}

export interface MetricsRegisterCustom extends MetricsRegisterExtra {
avgMinMax<Labels extends LabelsGeneric>(config: AvgMinMaxConfig<Labels>): AvgMinMax<Labels>;
static<Labels extends LabelsGeneric>(config: StaticConfig<Labels>): void;
avgMinMax<Labels extends LabelsGeneric = NoLabels>(config: AvgMinMaxConfig<Labels>): AvgMinMax<Labels>;
static<Labels extends LabelsGeneric = NoLabels>(config: StaticConfig<Labels>): void;
}

0 comments on commit 2a14a4b

Please sign in to comment.