import Service from 'ui/models/service';
import Ember from 'ember';
import C from 'ui/utils/constants';
import Util from 'ui/utils/util';
import { parsePortSpec } from 'ui/utils/parse-port';
const esc = Ember.Handlebars.Utils.escapeExpression;
function portToStr(spec) {
var parts = parsePortSpec(spec);
return parts.host + (parts.protocol === 'http' ? '' : '/' + parts.protocol);
}
function specToPort(spec) {
var parts = parsePortSpec(spec);
return parts.hostPort;
}
var LoadBalancerService = Service.extend({
type: 'loadBalancerService',
intl: Ember.inject.service(),
settings: Ember.inject.service(),
initPorts() {
let rules = this.get('lbConfig.portRules')||[];
let publish = this.get('launchConfig.ports')||[];
publish.forEach((str) => {
let spec = parsePortSpec(str,'tcp');
if ( spec.hostPort ) {
rules.filterBy('sourcePort', spec.hostPort).forEach((rule) => {
rule.set('access', 'public');
});
}
});
rules.forEach((rule) => {
if ( !rule.get('access') ) {
rule.set('access', 'internal');
}
});
},
sslPorts: function() {
let out = (this.get('lbConfig.portRules')||[]).filterBy('isTls',true).map((x) => x.get('sourcePort')).uniq();
return out;
}.property(`lbConfig.portRules.@each.{isTls,sourcePort}`),
endpointsByPort: function() {
var sslPorts = this.get('sslPorts');
return this._super().map((obj) => {
obj.ssl = sslPorts.indexOf(obj.port) >= 0;
return obj;
});
}.property('endpointsMap'),
displayPorts: function() {
var sslPorts = this.get('sslPorts');
var pieces = [];
var fqdn = this.get('fqdn');
let ports = (this.get('launchConfig.ports')||[]);
ports.forEach((portSpec, idx) => {
var portNum = specToPort(portSpec);
var endpoints = this.get('endpointsMap')[portNum];
if ( endpoints )
{
var url = Util.constructUrl((sslPorts.indexOf(portNum) >= 0), fqdn||endpoints[0], portNum);
pieces.push('' +
'' +
esc(portToStr(portSpec)) +
'' + (idx+1 === ports.length ? '' : ', ') +
'');
}
else
{
pieces.push('' + (idx === 0 ? '' : ', ') + esc(portToStr(portSpec)) + '');
}
});
(this.get('launchConfig.expose')||[]).forEach((portSpec, idx) => {
pieces.push('' + (idx === 0 ? '' : ', ') + esc(portToStr(portSpec)) + '');
});
return pieces.join(', ').htmlSafe();
}.property('launchConfig.ports.[]','launchConfig.expose.[]','endpointsMap', 'intl.locale'),
imageUpgradeAvailable: function() {
let cur = (this.get('launchConfig.imageUuid')||'').replace(/^docker:/,'');
let available = this.get(`settings.${C.SETTING.BALANCER_IMAGE}`);
return cur.indexOf(available) === -1 && !!this.get('actionLinks.upgrade');
}.property('launchConfig.imageUuid',`settings.${C.SETTING.BALANCER_IMAGE}`,'actionLinks.upgrade'),
});
export default LoadBalancerService;