UNPKG

nope-js-node

Version:

NoPE Runtime for Nodejs. For Browser-Support please use nope-browser

99 lines (98 loc) 4.14 kB
"use strict"; /** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2022-01-03 13:46:51 * @modify date 2022-01-06 07:40:59 * @desc [description] */ Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSelector = void 0; const arrayMethods_1 = require("../../helpers/arrayMethods"); /** * A Helper Function, to generate the Basic selector Functions. * * @author M.Karkowski * @export * @param {ValidDefaultSelectors} selector * @param {INopeDispatcher} core * @return {*} */ function generateSelector(selector, core) { switch (selector) { default: throw Error("Please use a valid selector"); case "master": return async (opts) => { const masterId = core.connectivityManager.master.id; const data = core.rpcManager.services.keyMappingReverse; if (data.has(opts.serviceName)) { const arr = Array.from(data.get(opts.serviceName)); if (arr.includes(masterId)) { return masterId; } } throw Error("No matching dispatcher present."); }; case "first": return async (opts) => { const data = core.rpcManager.services.keyMappingReverse; if (data.has(opts.serviceName)) { const arr = Array.from(data.get(opts.serviceName)); if (arr.length > 0) { return arr[0]; } } throw Error("No matching dispatcher present."); }; case "dispatcher": // Our selector compares the dispatcher - id return async (opts) => { const ids = core.connectivityManager.dispatchers.data.getContent(); if (ids.includes(core.id)) { return core.id; } throw Error("No matching dispatcher present."); }; case "host": // Our selector compares the host-name: // 1. Get the current Host name of our dispatcher const host = core.connectivityManager.info.host.name; return async (opts) => { const data = core.rpcManager.services.keyMappingReverse; if (data.has(opts.serviceName)) { const items = Array.from(data.get(opts.serviceName)); const hosts = items.map((id) => { var _a; return (_a = core.connectivityManager.dispatchers.originalData.get(id)) === null || _a === void 0 ? void 0 : _a.host.name; }); const idx = hosts.indexOf(host); if (idx >= 0) { return items[idx]; } } throw Error("No matching dispatcher present."); }; case "cpu-usage": return async () => { // Now we find the Min CPU usage: const dispatchers = core.connectivityManager.dispatchers.data.getContent(); const bestOption = (0, arrayMethods_1.minOfArray)(dispatchers, "host.cpu.usage"); if (bestOption.index >= 0) { return dispatchers[bestOption.index]; } throw Error("No matching dispatcher present."); }; case "free-ram": return async () => { // Now we find the Min CPU usage: const dispatchers = core.connectivityManager.dispatchers.data.getContent(); const bestOption = (0, arrayMethods_1.maxOfArray)(dispatchers, "host.ram.free"); if (bestOption.index >= 0) { return dispatchers[bestOption.index]; } throw Error("No matching dispatcher present."); }; } } exports.generateSelector = generateSelector;