mirror of https://github.com/rancher/ui.git
188 lines
6.0 KiB
JavaScript
188 lines
6.0 KiB
JavaScript
import Ember from 'ember';
|
|
import Cattle from 'ui/utils/cattle';
|
|
import DownloadMachineConfig from 'ui/mixins/download-machine-config';
|
|
|
|
var HostController = Cattle.TransitioningResourceController.extend(DownloadMachineConfig, {
|
|
actions: {
|
|
activate: function() {
|
|
return this.doAction('activate');
|
|
},
|
|
|
|
deactivate: function() {
|
|
return this.doAction('deactivate');
|
|
},
|
|
|
|
delete: function() {
|
|
var machine = this.get('machine');
|
|
if ( machine )
|
|
{
|
|
return machine.delete();
|
|
}
|
|
else
|
|
{
|
|
return this.delete();
|
|
}
|
|
},
|
|
|
|
purge: function() {
|
|
return this.doAction('purge');
|
|
},
|
|
|
|
newContainer: function() {
|
|
this.transitionToRoute('containers.new', {queryParams: {hostId: this.get('id')}});
|
|
},
|
|
|
|
detail: function() {
|
|
this.transitionToRoute('host', this.get('id'));
|
|
},
|
|
|
|
clone: function() {
|
|
var machine = this.get('machine');
|
|
var driver = machine.get('driver');
|
|
this.transitionToRoute('hosts.new.'+driver, {queryParams: {machineId: machine.get('id')}});
|
|
},
|
|
|
|
edit: function() {
|
|
this.transitionToRoute('host.edit', this.get('id'));
|
|
},
|
|
},
|
|
|
|
availableActions: function() {
|
|
var a = this.get('actions');
|
|
|
|
var out = [
|
|
// { label: 'Add Container', icon: 'ss-plus', action: 'newContainer', enabled: true, color: 'text-primary' },
|
|
{ label: 'Activate', icon: 'ss-play', action: 'activate', enabled: !!a.activate, color: 'text-success'},
|
|
{ label: 'Deactivate', icon: 'ss-pause', action: 'deactivate', enabled: !!a.deactivate, color: 'text-danger'},
|
|
{ label: 'Delete', icon: 'ss-trash', action: 'promptDelete', enabled: !!a.remove, altAction: 'delete', color: 'text-warning' },
|
|
{ label: 'Purge', icon: '', action: 'purge', enabled: !!a.purge, color: 'text-danger'},
|
|
{ divider: true },
|
|
{ label: 'View in API', icon: '', action: 'goToApi', enabled: true},
|
|
];
|
|
|
|
if ( this.get('machine') )
|
|
{
|
|
if ( this.get('machine.links.config') )
|
|
{
|
|
out.push({ label: 'Machine Config', icon: 'ss-download', action: 'machineConfig', enabled: true});
|
|
}
|
|
|
|
out.push({ label: 'Clone', icon: 'ss-copier', action: 'clone', enabled: true });
|
|
}
|
|
|
|
out.push({ label: 'Edit', icon: 'ss-write', action: 'edit', enabled: !!a.update });
|
|
|
|
return out;
|
|
}.property('actions.{activate,deactivate,remove,purge,update}','machine','machine.links.config'),
|
|
|
|
triedToGetIp: false,
|
|
displayIp: function() {
|
|
var obj = (this.get('ipAddresses')||[]).get('firstObject');
|
|
if ( obj )
|
|
{
|
|
return obj.get('address');
|
|
}
|
|
else if ( this && this.hasLink && this.hasLink('ipAddresses') && !this.get('triedToGetIp'))
|
|
{
|
|
this.set('triedToGetIp',true);
|
|
this.importLink('ipAddresses');
|
|
}
|
|
|
|
return null;
|
|
}.property('ipAddresses','ipAddresses.[]'),
|
|
|
|
arrangedInstances: function() {
|
|
return Ember.ArrayController.create({
|
|
content: this.get('instances'),
|
|
sortProperties: ['name','id']
|
|
});
|
|
}.property('instances.[]','instances.@each.{name,id}'),
|
|
|
|
machine: function() {
|
|
var phid = this.get('physicalHostId');
|
|
if ( !phid )
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var machine = this.get('store').getById('machine', phid);
|
|
return machine;
|
|
}.property('physicalHostId'),
|
|
|
|
osBlurb: function() {
|
|
// @TODO this always sends back Ubuntu
|
|
if ( false && this.get('info.osInfo') )
|
|
{
|
|
return this.get('info.osInfo.distribution') + ' ' + this.get('info.osInfo.version');
|
|
}
|
|
}.property('info.osInfo.{distribution,version}'),
|
|
|
|
dockerBlurb: function() {
|
|
// @TODO this always sends back Ubuntu
|
|
if ( this.get('info.osInfo') )
|
|
{
|
|
return this.get('info.osInfo.dockerVersion').replace(/^Docker version\s*/i,'');
|
|
}
|
|
}.property('info.osInfo.{dockerVersion}'),
|
|
|
|
cpuBlurb: function() {
|
|
if ( this.get('info.cpuInfo.count') )
|
|
{
|
|
var ghz = Math.round(this.get('info.cpuInfo.mhz')/10)/100;
|
|
|
|
if ( this.get('info.cpuInfo.count') > 1 )
|
|
{
|
|
return this.get('info.cpuInfo.count')+'x' + ghz + ' GHz';
|
|
}
|
|
else
|
|
{
|
|
return ghz + ' GHz';
|
|
}
|
|
}
|
|
}.property('info.cpuInfo.{count,mhz}'),
|
|
|
|
memoryBlurb: function() {
|
|
if ( this.get('info.memoryInfo') )
|
|
{
|
|
var gb = Math.round((this.get('info.memoryInfo.memTotal')/1024)*100)/100;
|
|
|
|
return gb + ' GiB';
|
|
}
|
|
}.property('info.memoryInfo.memTotal'),
|
|
|
|
diskBlurb: function() {
|
|
if ( this.get('info.diskInfo.mountPoints') )
|
|
{
|
|
var totalMb = 0;
|
|
var mounts = this.get('info.diskInfo.mountPoints')||[];
|
|
Object.keys(mounts).forEach((mountPoint) => {
|
|
totalMb += mounts[mountPoint].total;
|
|
});
|
|
|
|
var gb = Math.round((totalMb/1024)*10)/10;
|
|
return gb + ' GiB';
|
|
}
|
|
}.property('info.diskInfo.mountPoints.@each.total'),
|
|
});
|
|
|
|
HostController.reopenClass({
|
|
stateMap: {
|
|
'requested': {icon: 'ss-tag', color: 'text-danger'},
|
|
'registering': {icon: 'ss-tag', color: 'text-danger'},
|
|
'activating': {icon: 'ss-tag', color: 'text-danger'},
|
|
'active': {icon: 'ss-record', color: 'text-success'},
|
|
'reconnecting': {icon: 'fa fa-circle-o-notch fa-spin', color: 'text-danger'},
|
|
'updating-active': {icon: 'ss-database', color: 'text-success'},
|
|
'updating-inactive':{icon: 'ss-alert', color: 'text-danger'},
|
|
'deactivating': {icon: 'ss-down', color: 'text-danger'},
|
|
'inactive': {icon: 'fa fa-circle', color: 'text-danger'},
|
|
'removing': {icon: 'ss-trash', color: 'text-danger'},
|
|
'removed': {icon: 'ss-trash', color: 'text-danger'},
|
|
'purging': {icon: 'ss-tornado', color: 'text-danger'},
|
|
'purged': {icon: 'ss-tornado', color: 'text-danger'},
|
|
'restoring': {icon: 'ss-medicalcross', color: 'text-danger'},
|
|
}
|
|
});
|
|
|
|
export default HostController;
|