UNPKG

k2hr3-api

Version:

K2HR3 REST API is K2hdkc based Resource and Roles and policy Rules

355 lines (354 loc) 15.7 kB
"use strict"; /* * K2HR3 REST API * * Copyright 2017 Yahoo Japan Corporation. * * K2HR3 is K2hdkc based Resource and Roles and policy Rules, gathers * common management information for the cloud. * K2HR3 can dynamically manage information as "who", "what", "operate". * These are stored as roles, resources, policies in K2hdkc, and the * client system can dynamically read and modify these information. * * For the full copyright and license information, please view * the license file that was distributed with this source code. * * AUTHOR: Takeshi Nakatani * CREATE: Tue Oct 23 2018 * REVISION: * */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ipwatch = exports.chkipconfig = void 0; const util = __importStar(require("util")); const dateformat_1 = __importDefault(require("dateformat")); const k2hr3apiutil_1 = __importDefault(require("./k2hr3apiutil")); const k2hr3dkc_1 = __importDefault(require("./k2hr3dkc")); const dbglogging_1 = __importDefault(require("./dbglogging")); const basicipcheck_1 = __importDefault(require("./basicipcheck")); const k2hr3config_1 = require("./k2hr3config"); const apiConf = new k2hr3config_1.r3ApiConfig(); //--------------------------------------------------------- // Checking IP Addresses configuration //--------------------------------------------------------- const localchkipconfig = { type: k2hr3config_1.chkipType.CHECKER_TYPE_LISTENER, // Listener / Function / Basic{Or|And} / NoCheck funcmod: null, // Module name(path) for Function type pendingsec: 864000, // Limit for removing IP which is not alive : 10 * 24 * 60 * 60 = 10 days intervalms: 4320000, // Interval ms for checking IP address : 12 * 60 * 60 * 1000 = 12 hour parallelcnt: 32, // Parallel processing count command4: 'ping', // Basic IP address check use this command for IPv4 : ping command command6: 'ping6', // Basic IP address check use this command for IPv6 params: '-c 1', // Common ping command parameters timeoutparam: '-W', // Timeout parameter name for ping command timeoutms: 5000 // Timeout millisecond for each checking : 5000ms }; (() => { const chkipconfig = apiConf.getCheckIPConfig(); if (k2hr3apiutil_1.default.isSafeEntity(chkipconfig)) { if (k2hr3apiutil_1.default.compareCaseString(chkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_LISTENER)) { localchkipconfig.type = k2hr3config_1.chkipType.CHECKER_TYPE_LISTENER; localchkipconfig.funcmod = null; } else if (k2hr3apiutil_1.default.compareCaseString(chkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_FUNCTION)) { if (k2hr3apiutil_1.default.isSafeString(chkipconfig.funcmod)) { localchkipconfig.type = k2hr3config_1.chkipType.CHECKER_TYPE_FUNCTION; localchkipconfig.funcmod = chkipconfig.funcmod; } else { dbglogging_1.default.elog('config : chkipconfig.funcmod value is something wrong : ' + JSON.stringify(chkipconfig.funcmod)); localchkipconfig.type = k2hr3config_1.chkipType.CHECKER_TYPE_NOCHECK; localchkipconfig.funcmod = null; } } else if (k2hr3apiutil_1.default.compareCaseString(chkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_OR) || k2hr3apiutil_1.default.compareCaseString(chkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_AND)) { localchkipconfig.type = k2hr3apiutil_1.default.compareCaseString(chkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_OR) ? k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_OR : k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_AND; localchkipconfig.funcmod = null; if (k2hr3apiutil_1.default.isSafeString(chkipconfig.command4)) { localchkipconfig.command4 = chkipconfig.command4; } if (k2hr3apiutil_1.default.isSafeString(chkipconfig.command6)) { localchkipconfig.command6 = chkipconfig.command6; } if (k2hr3apiutil_1.default.isSafeString(chkipconfig.params)) { localchkipconfig.params = chkipconfig.params; } if (k2hr3apiutil_1.default.isSafeString(chkipconfig.timeoutparam)) { localchkipconfig.timeoutparam = chkipconfig.timeoutparam; } if (k2hr3apiutil_1.default.isSafeNumber(chkipconfig.timeoutms)) { localchkipconfig.timeoutms = chkipconfig.timeoutms; } } else if (k2hr3apiutil_1.default.compareCaseString(chkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_NOCHECK)) { localchkipconfig.type = k2hr3config_1.chkipType.CHECKER_TYPE_NOCHECK; localchkipconfig.funcmod = null; } else if (k2hr3apiutil_1.default.isSafeEntity(chkipconfig.type)) { dbglogging_1.default.elog('config : chkipconfig.type value is something wrong : ' + JSON.stringify(chkipconfig.type)); localchkipconfig.type = k2hr3config_1.chkipType.CHECKER_TYPE_NOCHECK; localchkipconfig.funcmod = null; } if (k2hr3apiutil_1.default.isSafeNumber(chkipconfig.pendingsec)) { localchkipconfig.pendingsec = chkipconfig.pendingsec; } if (k2hr3apiutil_1.default.isSafeNumber(chkipconfig.intervalms)) { localchkipconfig.intervalms = chkipconfig.intervalms; } if (k2hr3apiutil_1.default.isSafeNumber(chkipconfig.parallelcnt)) { localchkipconfig.parallelcnt = chkipconfig.parallelcnt; } } })(); //--------------------------------------------------------- // Utilities: Check configuration //--------------------------------------------------------- const rawGetType = () => { return localchkipconfig.type; }; const rawIsListenerType = () => { return k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_LISTENER); }; const rawIsBasicType = () => { return (k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_OR) || k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_AND)); }; const rawIsBasicOrType = () => { return k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_OR); }; const rawIsBasicAndType = () => { return k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_BASIC_AND); }; const rawIsFunctionType = () => { return k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_FUNCTION); }; const rawIsNocheckType = () => { return k2hr3apiutil_1.default.compareCaseString(localchkipconfig.type, k2hr3config_1.chkipType.CHECKER_TYPE_NOCHECK); }; //--------------------------------------------------------- // Watcher Logging //--------------------------------------------------------- let loggingStream = null; let loggingTimeForm = null; (() => { loggingStream = apiConf.getWatcherLoggingStream(__dirname + '/..'); loggingTimeForm = apiConf.getWatcherTimeFormat(); })(); const rawWatcherLogging = (...args) => { const prefix = '[' + (0, dateformat_1.default)(new Date(), k2hr3apiutil_1.default.isString(loggingTimeForm) ? loggingTimeForm : undefined) + '] '; if (k2hr3apiutil_1.default.isPlainObject(loggingStream)) { loggingStream.write(prefix + util.format(...args) + '\n'); } }; //--------------------------------------------------------- // Check Addresses Alive raw function //--------------------------------------------------------- const rawWatchAddressesAliveEx = (ipchecker, callback) => { if (!k2hr3apiutil_1.default.isSafeEntity(callback)) { dbglogging_1.default.elog('callback is not function.'); return; } if (!k2hr3apiutil_1.default.isSafeEntity(ipchecker)) { callback(true, new Error('ipchecker is not function')); // fatal return; } // // make ip addresses list depending cuk // const targetres = k2hr3dkc_1.default.getAllIpDatasByCuk(true); // Currently supports only openstack if (k2hr3apiutil_1.default.isSafeEntity(targetres.error)) { callback(false, new Error('failed getting IP addresses list depending cuk by ' + JSON.stringify(targetres.error))); return; } if (!k2hr3apiutil_1.default.isNotEmptyArray(targetres.data)) { callback(false, new Error('There is no IP address depending cuk')); return; } // // Check Addresses // ipchecker(targetres.data, localchkipconfig).then((res) => { dbglogging_1.default.dlog('after checking IP addresses : ' + JSON.stringify(res)); if (k2hr3apiutil_1.default.isSafeEntity(res) && !k2hr3apiutil_1.default.isSafeEntity(res.error)) { if (!k2hr3apiutil_1.default.isNotEmptyArray(res.data)) { callback(false, new Error('There is no IP address depending cuk after checking, why...')); return; } // remove/clear by result of checking const result = k2hr3dkc_1.default.removeIpAddressWithCuk(res.data, localchkipconfig.pendingsec, rawWatcherLogging); if (null !== result) { callback(false, result); } else { // Succeed without error callback(false, null); } } else { let errmsg = 'unknown'; if (k2hr3apiutil_1.default.isPlainObject(res) && k2hr3apiutil_1.default.isPlainObject(res.error)) { errmsg = k2hr3apiutil_1.default.isString(res.error.message) ? res.error.message : 'unknown'; } callback(false, new Error('checking IP addresses returns error : ' + errmsg)); } }).catch((error) => { callback(true, new Error('checking IP addresses returns fatal error : ' + k2hr3apiutil_1.default.getSafeString(error.message))); // fatal }); }; let local_mod = null; (async () => { if (rawIsFunctionType() && null !== localchkipconfig.funcmod) { const mod = await k2hr3apiutil_1.default.tryLoadModule(localchkipconfig.funcmod); if (k2hr3apiutil_1.default.isSafeEntity(mod)) { local_mod = mod; } } })(); const rawWatchAddressesAlive = (oneshotCB) => { const _callback = oneshotCB; // // Load checkAddressesAlive function // let ipchecker = null; try { if (rawIsFunctionType() && null !== local_mod) { ipchecker = local_mod.checkAddressesAlive; } else if (rawIsBasicType()) { ipchecker = basicipcheck_1.default.checkAddressesAlive; } else { // Nothing to do with interval return null; } if (!k2hr3apiutil_1.default.isFunction(ipchecker)) { dbglogging_1.default.elog('could not load checkAddressesAlive function in : ' + (rawIsBasicType() ? './basicipcheck' : localchkipconfig.funcmod)); return null; } } catch (error) { dbglogging_1.default.elog('could not load module : ' + (rawIsBasicType() ? './basicipcheck' : localchkipconfig.funcmod), JSON.stringify(error)); return null; } if (k2hr3apiutil_1.default.isFunction(_callback)) { // // one shot // rawWatchAddressesAliveEx(ipchecker, (is_fatal, error) => { let result = true; if (is_fatal) { if (k2hr3apiutil_1.default.isPlainObject(error)) { dbglogging_1.default.elog('Fatal error is occurred : ' + k2hr3apiutil_1.default.getSafeString(error.message)); } else { dbglogging_1.default.elog('Fatal error is occurred'); } result = false; } else if (error) { dbglogging_1.default.wlog('Finished with messsage : ' + error.message); } else { dbglogging_1.default.dlog('Finished without any error messsage'); } _callback(result); }); return null; } // // Set Interval // let isFatalError = false; let isWorking = false; const checkInterval = setInterval(() => { if (!isFatalError && !isWorking) { isWorking = true; // // Checking // rawWatchAddressesAliveEx(ipchecker, (is_fatal, error) => { isWorking = false; if (is_fatal) { if (k2hr3apiutil_1.default.isPlainObject(error)) { dbglogging_1.default.elog('Fatal error is occurred : ' + k2hr3apiutil_1.default.getSafeString(error.message)); } else { dbglogging_1.default.elog('Fatal error is occurred'); } isFatalError = true; } else if (error) { dbglogging_1.default.dlog('Finished with messsage : ' + error.message); } else { dbglogging_1.default.dlog('Finished without messsage'); } }); } }, localchkipconfig.intervalms); return checkInterval; }; //--------------------------------------------------------- // Exports //--------------------------------------------------------- // // Variables // exports.chkipconfig = localchkipconfig; // // Functions // exports.ipwatch = { getType: rawGetType, isListenerType: rawIsListenerType, isBasicType: rawIsBasicType, isBasicOrType: rawIsBasicOrType, isBasicAndType: rawIsBasicAndType, isFunctionType: rawIsFunctionType, isNocheckType: rawIsNocheckType, watchAddressesAlive: rawWatchAddressesAlive }; exports.default = exports.ipwatch; /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noexpandtab sw=4 ts=4 fdm=marker * vim<600: noexpandtab sw=4 ts=4 */