34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
const statKeyTemplate = ctx => `windshaft.named-map-provider-cache.${ctx.metric}`;
|
|
|
|
module.exports = class NamedMapProviderReporter {
|
|
constructor ({ namedMapProviderCache, intervalInMilliseconds } = {}) {
|
|
this.namedMapProviderCache = namedMapProviderCache;
|
|
this.intervalInMilliseconds = intervalInMilliseconds;
|
|
this.intervalId = null;
|
|
}
|
|
|
|
start () {
|
|
const { providerCache: cache } = this.namedMapProviderCache;
|
|
const { statsClient: stats } = global;
|
|
|
|
this.intervalId = setInterval(() => {
|
|
stats.gauge(statKeyTemplate({ metric: 'named-map.count' }), cache.length);
|
|
const providers = cache.dump();
|
|
|
|
const namedMapInstantiations = providers.reduce((acc, { v: providers }) => {
|
|
acc += Object.keys(providers).length;
|
|
return acc;
|
|
}, 0);
|
|
|
|
stats.gauge(statKeyTemplate({ metric: 'named-map.instantiation.count' }), namedMapInstantiations);
|
|
}, this.intervalInMilliseconds);
|
|
}
|
|
|
|
stop () {
|
|
clearInterval(this.intervalId);
|
|
this.intervalId = null;
|
|
}
|
|
};
|