@breautek/storm
Version:
Object-Oriented REST API framework
116 lines • 3.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetricStore = void 0;
const tslib_1 = require("tslib");
const prom = tslib_1.__importStar(require("prom-client"));
class CounterWrapper {
constructor(config) {
this.$inner = new prom.Counter({
name: config.name,
help: config.help,
labelNames: config.labelNames ?? []
});
}
inc(labelsOrValue, value) {
if (typeof labelsOrValue === 'number') {
this.$inner.inc(labelsOrValue);
}
else if (labelsOrValue !== undefined) {
this.$inner.inc(labelsOrValue, value);
}
else {
this.$inner.inc();
}
}
}
class GaugeWrapper {
constructor(config) {
this.$inner = new prom.Gauge({
name: config.name,
help: config.help,
labelNames: config.labelNames ?? []
});
}
set(labelsOrValue, value) {
if (typeof labelsOrValue === 'number') {
this.$inner.set(labelsOrValue);
}
else {
this.$inner.set(labelsOrValue, value);
}
}
inc(labelsOrValue, value) {
if (typeof labelsOrValue === 'number') {
this.$inner.inc(labelsOrValue);
}
else if (labelsOrValue !== undefined) {
this.$inner.inc(labelsOrValue, value);
}
else {
this.$inner.inc();
}
}
dec(labelsOrValue, value) {
if (typeof labelsOrValue === 'number') {
this.$inner.dec(labelsOrValue);
}
else if (labelsOrValue !== undefined) {
this.$inner.dec(labelsOrValue, value);
}
else {
this.$inner.dec();
}
}
}
class HistogramWrapper {
constructor(config) {
this.$inner = new prom.Histogram({
name: config.name,
help: config.help,
labelNames: config.labelNames ?? [],
...(config.buckets !== undefined ? { buckets: config.buckets } : {})
});
}
observe(labelsOrValue, value) {
if (typeof labelsOrValue === 'number') {
this.$inner.observe(labelsOrValue);
}
else {
this.$inner.observe(labelsOrValue, value);
}
}
startTimer(labels) {
return this.$inner.startTimer(labels);
}
}
class MetricStore {
constructor() {
prom.collectDefaultMetrics();
}
static getInstance() {
if (!MetricStore.$instance) {
MetricStore.$instance = new MetricStore();
}
return MetricStore.$instance;
}
setDefaultLabels(labels) {
prom.register.setDefaultLabels(labels);
}
createCounter(config) {
return new CounterWrapper(config);
}
createGauge(config) {
return new GaugeWrapper(config);
}
createHistogram(config) {
return new HistogramWrapper(config);
}
async getMetrics() {
return {
type: prom.register.contentType,
content: await prom.register.metrics()
};
}
}
exports.MetricStore = MetricStore;
//# sourceMappingURL=MetricStore.js.map