@haku-sci/utils
Version:
utils from haku-sci. Library only
47 lines • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Consul = void 0;
const axios_1 = require("axios");
const utils = require("../utils");
const common_1 = require("@nestjs/common");
class Consul {
static async registerService(serverAddress, logger) {
if (!process.env["CONSUL_URL"])
return;
const externalAddress = process.env.SERVICE_PUBLIC_HOSTNAME || serverAddress.address;
const externalPort = process.env.SERVICE_PUBLIC_PORT || serverAddress.port;
const microServiceName = await utils.microServiceName();
const serviceData = {
ID: microServiceName,
Name: microServiceName,
Address: externalAddress,
Port: externalPort,
Check: {
TCP: `${externalAddress}:${externalPort}`,
Interval: "10s",
Timeout: "5s",
DeregisterCriticalServiceAfter: "1m"
}
};
await axios_1.default.put(`${process.env["CONSUL_URL"]}/v1/agent/service/register`, serviceData);
logger.log(`Service registered with Consul on ${externalAddress}:${externalPort}`);
}
static async getServiceURI(serviceName) {
const response = await axios_1.default.get(`${process.env["CONSUL_URL"]}/v1/catalog/service/${serviceName}`);
const serviceInfo = response.data;
if (serviceInfo.length > 0) {
const service = serviceInfo[0];
const address = service.ServiceAddress || service.Address;
const port = service.ServicePort;
return {
host: address,
port: port,
};
}
else {
throw new common_1.ServiceUnavailableException(`Service ${serviceName} not found in Consul catalog`);
}
}
}
exports.Consul = Consul;
//# sourceMappingURL=consul.js.map