Yield generated for d159283b-474f-41f2-8cf3-cf7f42d363d7
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

98 lines
2.4 KiB

import { DEFAULT_PROM_REGISTRY } from './metrics.constants';
import {
Counter,
CounterConfiguration,
GaugeConfiguration,
Gauge,
HistogramConfiguration,
Histogram,
SummaryConfiguration,
Summary,
Registry,
} from 'prom-client';
import { Provider } from '@nestjs/common';
import { getMetricToken, getRegistryName } from './common/prom.utils';
export function createPromCounterProvider(
configuration: CounterConfiguration,
registryName: string = DEFAULT_PROM_REGISTRY,
): Provider {
return {
provide: getMetricToken('Counter', configuration.name),
useFactory: (registry: Registry) => {
const obj = new Counter({
...configuration,
registers: [registry],
});
return obj;
},
inject: [
registryName === DEFAULT_PROM_REGISTRY
? DEFAULT_PROM_REGISTRY
: getRegistryName(registryName),
],
};
}
export function createPromGaugeProvider(
configuration: GaugeConfiguration,
registryName: string = DEFAULT_PROM_REGISTRY,
): Provider {
return {
provide: getMetricToken('Gauge', configuration.name),
useFactory: (registry: Registry) => {
const obj = new Gauge({
...configuration,
registers: [registry],
});
return obj;
},
inject: [
registryName === DEFAULT_PROM_REGISTRY
? DEFAULT_PROM_REGISTRY
: getRegistryName(registryName),
],
};
}
export function createPromHistogramProvider(
configuration: HistogramConfiguration,
registryName: string = DEFAULT_PROM_REGISTRY,
): Provider {
return {
provide: getMetricToken('Histogram', configuration.name),
useFactory: (registry: Registry) => {
const obj = new Histogram({
...configuration,
registers: [registry],
});
return obj;
},
inject: [
registryName === DEFAULT_PROM_REGISTRY
? DEFAULT_PROM_REGISTRY
: getRegistryName(registryName),
],
};
}
export function createPromSummaryProvider(
configuration: SummaryConfiguration,
registryName: string = DEFAULT_PROM_REGISTRY,
): Provider {
return {
provide: getMetricToken('Summary', configuration.name),
useFactory: (registry: Registry) => {
const obj = new Summary({
...configuration,
registers: [registry],
});
return obj;
},
inject: [
registryName === DEFAULT_PROM_REGISTRY
? DEFAULT_PROM_REGISTRY
: getRegistryName(registryName),
],
};
}