lib/metrics/registry.js (36 lines of code) (raw):
/*
* Copyright Elasticsearch B.V. and other contributors where applicable.
* Licensed under the BSD 2-Clause License; you may not use this file except in
* compliance with the BSD 2-Clause License.
*/
'use strict';
const os = require('os');
const { SelfReportingMetricsRegistry } = require('measured-reporting');
const DimensionAwareMetricsRegistry = require('measured-reporting/lib/registries/DimensionAwareMetricsRegistry');
const MetricsReporter = require('./reporter');
const createRuntimeMetrics = require('./runtime');
const createSystemMetrics =
process.platform === 'linux'
? require('./platforms/linux')
: require('./platforms/generic');
class MetricsRegistry extends SelfReportingMetricsRegistry {
constructor(agent, { reporterOptions, registryOptions = {} } = {}) {
const defaultReporterOptions = {
defaultDimensions: {
hostname: agent._conf.hostname || os.hostname(),
env: agent._conf.environment || '',
},
};
const options = Object.assign({}, defaultReporterOptions, reporterOptions);
const reporter = new MetricsReporter(agent, options);
registryOptions.registry = new DimensionAwareMetricsRegistry({
metricLimit: agent._conf.metricsLimit,
});
super(reporter, registryOptions);
this._agent = agent;
this._registry.collectors = [];
if (reporter.enabled) {
createSystemMetrics(this);
createRuntimeMetrics(this);
}
}
registerCollector(collector) {
this._registry.collectors.push(collector);
}
}
module.exports = MetricsRegistry;