UNPKG

@betit/orion-node-sdk

Version:
112 lines 4.33 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const response_1 = require("../response/response"); const request_1 = require("../request/request"); const messages_1 = require("./messages"); const asyncArray_1 = require("../utils/asyncArray"); exports.MILLISECOND = 1; exports.SECOND = 1000 * exports.MILLISECOND; exports.MINUTE = 60 * exports.SECOND; const WATCHDOG_LOOP_PING = 1 * exports.MINUTE; const WATCHDOG_LOOP_RETRY = 10 * exports.SECOND; const WATCHDOG_TIMEOUT = 10 * exports.SECOND; const WATCHDOG_MILLISECOND_CONVERSION = 1000000; exports.DefaultWatchdogServiceName = () => 'watchdog'; class WatchdogPingRequest extends request_1.Request { constructor(path, params) { super(path); this.params = params; } } exports.WatchdogPingRequest = WatchdogPingRequest; class WatchdogPingResponse extends response_1.Response { } exports.WatchdogPingResponse = WatchdogPingResponse; class WatchdogRegisterRequest extends request_1.Request { constructor(path, params) { super(path); this.params = params; } } exports.WatchdogRegisterRequest = WatchdogRegisterRequest; class WatchdogRegisterResponse extends response_1.Response { } exports.WatchdogRegisterResponse = WatchdogRegisterResponse; function getEnvironment() { const environment = {}; if (process.env['HOST']) { environment['HOST'] = process.env['HOST']; } return environment; } function WatchdogRegisterLoop(basePath, name, serviceId, dependencies, svc) { const toGolangTimeDependencies = dependencies.map((d) => Object.assign({}, d, { timeout: d.timeout * WATCHDOG_MILLISECOND_CONVERSION })); let kill = false; const killTheLoop = () => { kill = true; }; const resArray = new asyncArray_1.AsyncArray(); const pingRequest = new WatchdogPingRequest(basePath + '/ping', { name, serviceId, }); pingRequest.timeout = WATCHDOG_TIMEOUT; const registerRequest = new WatchdogRegisterRequest(basePath + '/register', { name, serviceId, env: getEnvironment(), dependencies: toGolangTimeDependencies }); registerRequest.timeout = WATCHDOG_TIMEOUT; process.nextTick(() => __awaiter(this, void 0, void 0, function* () { let imRegisteredInWatchdog = false; while (!kill) { if (imRegisteredInWatchdog) { // Do ping const res = yield svc.call(pingRequest); let everythingOk = !res.error; if (everythingOk) { yield Sleep(WATCHDOG_LOOP_PING); } else { imRegisteredInWatchdog = false; if (res.error.code !== messages_1.WHO_ARE_YOU) { yield Sleep(WATCHDOG_LOOP_RETRY); } } resArray.produce(res); } else { // Do register const res = yield svc.call(registerRequest); let everythingOk = !res.error; if (everythingOk) { imRegisteredInWatchdog = true; yield Sleep(WATCHDOG_LOOP_PING); } else { yield Sleep(WATCHDOG_LOOP_RETRY); } resArray.produce(res); } } })); return { killTheLoop: killTheLoop, responseArray: resArray, }; } exports.WatchdogRegisterLoop = WatchdogRegisterLoop; function Sleep(ms) { return new Promise((res) => { setTimeout(res, ms); }); } //# sourceMappingURL=health.js.map