ui/lib/istio/addon/components/load-balancer/component.js

122 lines
3.0 KiB
JavaScript

import { alias } from '@ember/object/computed';
import { get, set, observer, setProperties } from '@ember/object';
import Component from '@ember/component';
import layout from './template';
const ROUND_ROBIN = 'ROUND_ROBIN';
const LEAST_CONN = 'LEAST_CONN';
const RANDOM = 'RANDOM';
const PASSTHROUGH = 'PASSTHROUGH';
const SOURCE_IP = 'sourceIp';
const HEADER = 'header';
const COOKIE = 'cookie';
const RING_SIZE = 1024;
const LB_MODES = [
{
label: 'cruDestinationRule.loadBalancer.simple.roundRobin.label',
value: ROUND_ROBIN,
},
{
label: 'cruDestinationRule.loadBalancer.simple.leastConn.label',
value: LEAST_CONN,
},
{
label: 'cruDestinationRule.loadBalancer.simple.random.label',
value: RANDOM,
},
{
label: 'cruDestinationRule.loadBalancer.simple.passthrough.label',
value: PASSTHROUGH,
},
]
export default Component.extend({
layout,
trafficPolicy: null,
isSimpleMode: true,
lbModes: LB_MODES,
consistentHashMode: SOURCE_IP,
model: alias('trafficPolicy.loadBalancer'),
init() {
this._super(...arguments);
this.initLB();
},
isSimpleModeDidChange: observer('isSimpleMode', function() {
const isSimpleMode = get(this, 'isSimpleMode');
if ( isSimpleMode ) {
set(this, 'trafficPolicy.loadBalancer', { simple: ROUND_ROBIN });
} else {
setProperties(this, {
'consistentHashMode': SOURCE_IP,
'trafficPolicy.loadBalancer': {
consistentHash: {
useSourceIp: true,
minimumRingSize: RING_SIZE
}
}
});
}
}),
consistentHashModeDidChange: observer('consistentHashMode', function() {
const consistentHashMode = get(this, 'consistentHashMode');
if ( consistentHashMode === SOURCE_IP ) {
set(this, 'model', {
consistentHash: {
useSourceIp: true,
minimumRingSize: RING_SIZE
}
});
} else if ( consistentHashMode === COOKIE ) {
set(this, 'model', {
consistentHash: {
httpCookie: {
ttl: '0s',
name: ''
},
minimumRingSize: RING_SIZE
}
});
} else if ( consistentHashMode === HEADER ) {
set(this, 'model', {
consistentHash: {
httpHeaderName: '',
minimumRingSize: RING_SIZE
},
});
}
}),
initLB() {
if ( !get(this, 'trafficPolicy.loadBalancer') ) {
set(this, 'trafficPolicy.loadBalancer', { simple: ROUND_ROBIN });
}
if ( get(this, 'model.consistentHash.useSourceIp') ) {
setProperties(this, {
consistentHashMode: SOURCE_IP,
isSimpleMode: false
})
} else if ( get(this, 'model.consistentHash.httpHeaderName') ) {
setProperties(this, {
consistentHashMode: HEADER,
isSimpleMode: false
})
} else if ( get(this, 'model.consistentHash.httpCookie.name') ) {
setProperties(this, {
consistentHashMode: COOKIE,
isSimpleMode: false
})
}
},
});