@betit/orion-node-sdk
Version:
SDK for orion
112 lines • 4.33 kB
JavaScript
;
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