mirror of https://github.com/rancher/ui.git
105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
import Ember from 'ember';
|
|
import ReadLabels from 'ui/mixins/read-labels';
|
|
import FasterLinksAndMenus from 'ui/mixins/faster-links-and-menus';
|
|
import C from 'ui/utils/constants';
|
|
|
|
export default Ember.Component.extend(ReadLabels, FasterLinksAndMenus, {
|
|
model: null,
|
|
mode: null,
|
|
|
|
labelResource: Ember.computed.alias('model.launchConfig'),
|
|
classNames: ['pod','service'],
|
|
classNameBindings: ['stateBorder'],
|
|
|
|
actions: {
|
|
scaleUp: function() {
|
|
this.get('model').send('scaleUp');
|
|
}
|
|
},
|
|
|
|
isActive: function() {
|
|
return ['active','degraded','updating-active'].indexOf(this.get('model.state')) >= 0;
|
|
}.property('model.state'),
|
|
|
|
isInactive: Ember.computed.equal('model.state','inactive'),
|
|
|
|
hasContainers: function() {
|
|
return ['service','loadbalancerservice'].indexOf(this.get('model.type').toLowerCase()) !== -1;
|
|
}.property('model.type'),
|
|
|
|
arrangedInstances: function() {
|
|
return (this.get('model.instances')||[]).sortBy('name','id');
|
|
}.property('model.instances.@each.{name,id}'),
|
|
|
|
groupedInstances: function() {
|
|
var instances = [];
|
|
|
|
// Everything must be sorted first to guarantee that parents appear before sidekicks
|
|
this.get('arrangedInstances').forEach((instance) => {
|
|
var labels = instance.get('labels')||{};
|
|
var isSidekick = !!labels[C.LABEL.LAUNCH_CONFIG] && labels[C.LABEL.LAUNCH_CONFIG] !== C.LABEL.LAUNCH_CONFIG_PRIMARY;
|
|
var parentUnit = labels[C.LABEL.DEPLOYMENT_UNIT];
|
|
var groupName = parentUnit;
|
|
var entry, group;
|
|
|
|
if ( isSidekick && parentUnit )
|
|
{
|
|
group = instances.filterBy('name', groupName)[0];
|
|
if ( group )
|
|
{
|
|
entry = group.instances.filterBy('unit', parentUnit)[0];
|
|
if ( entry )
|
|
{
|
|
entry.children.push(instance);
|
|
group.hasChildren = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
group = instances.filterBy('name', groupName)[0];
|
|
if ( !group )
|
|
{
|
|
group = { name: groupName, instances: [], hasChildren: false };
|
|
instances.push(group);
|
|
}
|
|
|
|
group.instances.push({unit: parentUnit, main: instance, children: []});
|
|
}
|
|
});
|
|
|
|
return instances;
|
|
}.property('model.instances.@each.{name,id}'),
|
|
|
|
hasChildren: function() {
|
|
return this.get('groupedInstances').filterBy('hasChildren',true).get('length') > 0;
|
|
}.property('groupedInstances.@each.hasChildren'),
|
|
|
|
showScaleUp: function() {
|
|
if ( this.get('isActive') && this.get('hasContainers') )
|
|
{
|
|
return this.getLabel(C.LABEL.SCHED_GLOBAL) === null;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}.property('isActive','hasBody','model.labels'),
|
|
|
|
stateBackground: function() {
|
|
return this.get('model.stateColor').replace("text-","bg-");
|
|
}.property('model.stateColor'),
|
|
|
|
stateBorder: function() {
|
|
return this.get('model.stateColor').replace("text-","border-top-");
|
|
}.property('model.stateColor'),
|
|
|
|
iconColor: function() {
|
|
var color = this.get('model.stateColor');
|
|
if ( color.indexOf('danger') >= 0 || color.indexOf('warning') >= 0 )
|
|
{
|
|
return color;
|
|
}
|
|
}.property('model.stateColor'),
|
|
});
|