UNPKG

@rocketsoftware/eureka-js-client

Version:

A JavaScript implementation the Netflix OSS service registry, Eureka.

80 lines (65 loc) 2.78 kB
'use strict'; exports.__esModule = true; var _Logger = require('./Logger'); var _Logger2 = _interopRequireDefault(_Logger); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* Locates a Eureka host using static configuration. Configuration can either be done using a simple host and port, or a map of serviceUrls. */ var ConfigClusterResolver = function () { function ConfigClusterResolver(config, logger) { _classCallCheck(this, ConfigClusterResolver); this.logger = logger || new _Logger2.default(); this.config = config; this.serviceUrls = this.buildServiceUrls(); } ConfigClusterResolver.prototype.resolveEurekaUrl = function resolveEurekaUrl(callback) { var retryAttempt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (this.serviceUrls.length > 1 && retryAttempt > 0) { this.serviceUrls.push(this.serviceUrls.shift()); } callback(null, this.serviceUrls[0]); }; ConfigClusterResolver.prototype.buildServiceUrls = function buildServiceUrls() { var _config$eureka = this.config.eureka, host = _config$eureka.host, port = _config$eureka.port, servicePath = _config$eureka.servicePath, ssl = _config$eureka.ssl, serviceUrls = _config$eureka.serviceUrls, preferSameZone = _config$eureka.preferSameZone; var dataCenterInfo = this.config.instance.dataCenterInfo; var metadata = dataCenterInfo ? dataCenterInfo.metadata : undefined; var instanceZone = metadata ? metadata['availability-zone'] : undefined; var urls = []; var zones = this.getAvailabilityZones(); if (serviceUrls) { zones.forEach(function (zone) { if (serviceUrls[zone]) { if (preferSameZone && instanceZone && instanceZone === zone) { urls.unshift.apply(urls, serviceUrls[zone]); } urls.push.apply(urls, serviceUrls[zone]); } }); } if (!urls.length) { var protocol = ssl ? 'https' : 'http'; urls.push(protocol + '://' + host + ':' + port + servicePath); } return urls; }; ConfigClusterResolver.prototype.getAvailabilityZones = function getAvailabilityZones() { var _config$eureka2 = this.config.eureka, ec2Region = _config$eureka2.ec2Region, availabilityZones = _config$eureka2.availabilityZones; if (ec2Region && availabilityZones && availabilityZones[ec2Region]) { return availabilityZones[ec2Region]; } return ['default']; }; return ConfigClusterResolver; }(); exports.default = ConfigClusterResolver;