@stoplight/moleculer
Version:
Fast & powerful microservices framework for Node.JS
60 lines (50 loc) • 1.45 kB
JavaScript
/*
* moleculer
* Copyright (c) 2019 MoleculerJS (https://github.com/moleculerjs/moleculer)
* MIT Licensed
*/
;
const { isObject, isString } = require("../../utils");
const { BrokerOptionsError } = require("../../errors");
const Reporters = {
Base: require("./base"),
Console: require("./console"),
CSV: require("./csv"),
Event: require("./event"),
Datadog: require("./datadog"),
Prometheus: require("./prometheus"),
StatsD: require("./statsd")
};
function getByName(name) {
/* istanbul ignore next */
if (!name) return null;
let n = Object.keys(Reporters).find(n => n.toLowerCase() == name.toLowerCase());
if (n) return Reporters[n];
}
/**
* Resolve reporter by name
*
* @param {object|string} opt
* @returns {Reporter}
* @memberof ServiceBroker
*/
function resolve(opt) {
if (opt instanceof Reporters.Base) {
return opt;
} else if (isString(opt)) {
let ReporterClass = getByName(opt);
if (ReporterClass) return new ReporterClass();
} else if (isObject(opt)) {
let ReporterClass = getByName(opt.type);
if (ReporterClass) return new ReporterClass(opt.options);
else
throw new BrokerOptionsError(`Invalid metric reporter type '${opt.type}'.`, {
type: opt.type
});
}
throw new BrokerOptionsError(`Invalid metric reporter type '${opt}'.`, { type: opt });
}
function register(name, value) {
Reporters[name] = value;
}
module.exports = Object.assign(Reporters, { resolve, register });