]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/Utils.js
add render_*_percentage and calculate_* to Utils
[pve-manager.git] / www / manager6 / Utils.js
index 131f3678489f378300c8ccaf5d94ce81cdf7ceec..cd61c24edd6227b5c0f3d14f734827257784be7b 100644 (file)
@@ -90,7 +90,7 @@ Ext.define('PVE.Utils', { statics: {
        win7: 'Microsoft Windows 7/2008r2',
        win8: 'Microsoft Windows 8/2012',
        l24: 'Linux 2.4 Kernel',
-       l26: 'Linux 3.X/2.6 Kernel',
+       l26: 'Linux 4.X/3.X/2.6 Kernel',
        solaris: 'Solaris Kernel'
     },
 
@@ -106,7 +106,7 @@ Ext.define('PVE.Utils', { statics: {
     },
 
     render_hotplug_features: function (value) {
-       var fa = [];
+       var fa = [];
 
        if (!value || (value === '0')) {
            return gettext('disabled');
@@ -146,6 +146,18 @@ Ext.define('PVE.Utils', { statics: {
            PVE.Utils.unknownText;
     },
 
+    render_qemu_bios: function(value) {
+       if (!value) {
+           return PVE.Utils.defaultText + ' (SeaBIOS)';
+       } else if (value === 'seabios') {
+           return "SeaBIOS";
+       } else if (value === 'ovmf') {
+           return "OVMF (UEFI)";
+       } else {
+           return value;
+       }
+    },
+
     render_scsihw: function(value) {
        if (!value) {
            return PVE.Utils.defaultText + ' (LSI 53C895A)';
@@ -282,7 +294,7 @@ Ext.define('PVE.Utils', { statics: {
     },
 
     language_array: function() {
-       var data = [['', PVE.Utils.render_language('')]];
+       var data = [['__default__', PVE.Utils.render_language('')]];
        Ext.Object.each(PVE.Utils.language_map, function(key, value) {
            data.push([key, PVE.Utils.render_language(value)]);
        });
@@ -537,10 +549,15 @@ Ext.define('PVE.Utils', { statics: {
        qmsuspend: [ 'VM', gettext('Suspend') ],
        qmresume: [ 'VM', gettext('Resume') ],
        qmconfig: [ 'VM', gettext('Configure') ],
+       vzsnapshot: [ 'CT', gettext('Snapshot') ],
+       vzrollback: [ 'CT', gettext('Rollback') ],
+       vzdelsnapshot: [ 'CT', gettext('Delete Snapshot') ],
        vzcreate: ['CT', gettext('Create') ],
        vzrestore: ['CT', gettext('Restore') ],
        vzdestroy: ['CT', gettext('Destroy') ],
        vzmigrate: [ 'CT', gettext('Migrate') ],
+       vzclone: [ 'CT', gettext('Clone') ],
+       vztemplate: [ 'CT', gettext('Convert to template') ],
        vzstart: ['CT', gettext('Start') ],
        vzstop: ['CT', gettext('Stop') ],
        vzmount: ['CT', gettext('Mount') ],
@@ -605,32 +622,14 @@ Ext.define('PVE.Utils', { statics: {
     format_size: function(size) {
        /*jslint confusion: true */
 
-       if (size < 1024) {
-           return size;
-       }
-
-       var kb = size / 1024;
-
-       if (kb < 1024) {
-           return kb.toFixed(0) + "KB";
-       }
-
-       var mb = size / (1024*1024);
+       var units = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
+       var num = 0;
 
-       if (mb < 1024) {
-           return mb.toFixed(0) + "MB";
+       while (size >= 1024 && ((num++)+1) < units.length) {
+           size = size / 1024;
        }
 
-       var gb = mb / 1024;
-
-       if (gb < 1024) {
-           return gb.toFixed(2) + "GB";
-       }
-
-       var tb =  gb / 1024;
-
-       return tb.toFixed(2) + "TB";
-
+       return size.toFixed((num > 0)?2:0) + " " + units[num] + "B";
     },
 
     format_html_bar: function(per, text) {
@@ -847,6 +846,35 @@ Ext.define('PVE.Utils', { statics: {
        return Ext.Date.format(servertime, 'Y-m-d H:i:s');
     },
 
+    calculate_mem_usage: function(data) {
+       if (!Ext.isNumeric(data.mem) ||
+           data.maxmem === 0 ||
+           data.uptime < 1) {
+           return -1;
+       }
+
+       return (data.mem / data.maxmem);
+    },
+
+    render_mem_usage_percent: function(value, metaData, record, rowIndex, colIndex, store) {
+       if (!Ext.isNumeric(value) || value === -1) {
+           return '';
+       }
+       if (value > 1 ) {
+           // we got no percentage but bytes
+           var mem = value;
+           var maxmem = record.data.maxmem;
+           if (!record.data.uptime ||
+               maxmem === 0 ||
+               !Ext.isNumeric(mem)) {
+               return '';
+           }
+
+           return ((mem*100)/maxmem).toFixed(1) + " %";
+       }
+       return (value*100).toFixed(1) + " %";
+    },
+
     render_mem_usage: function(value, metaData, record, rowIndex, colIndex, store) {
 
        var mem = value;
@@ -865,6 +893,26 @@ Ext.define('PVE.Utils', { statics: {
        return per.toFixed(1) + '%';
     },
 
+    calculate_disk_usage: function(data) {
+
+       if (!Ext.isNumeric(data.disk) ||
+           data.type === 'qemu' ||
+           (data.type === 'lxc' && data.uptime === 0) ||
+           data.maxdisk === 0) {
+           return -1;
+       }
+
+       return (data.disk / data.maxdisk);
+    },
+
+    render_disk_usage_percent: function(value, metaData, record, rowIndex, colIndex, store) {
+       if (!Ext.isNumeric(value) || value === -1) {
+           return '';
+       }
+
+       return (value * 100).toFixed(1) + " %";
+    },
+
     render_disk_usage: function(value, metaData, record, rowIndex, colIndex, store) {
 
        var disk = value;
@@ -881,17 +929,42 @@ Ext.define('PVE.Utils', { statics: {
 
     render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
 
-       var cls = 'pve-itype-icon-' + value;
+       var icon = '';
+       var gridcls = '';
+
+       switch (value) {
+           case 'lxc': icon = 'cube';
+                       gridcls = '-stopped';
+                       break;
+           case 'qemu': icon = 'desktop';
+                        gridcls = '-stopped';
+                        break;
+           case 'node': icon = 'building';
+                        gridcls = '-offline';
+                        break;
+           case 'storage': icon = 'database'; break;
+           case 'pool': icon = 'tags'; break;
+           default: icon = 'file';
+       }
 
-       if (record.data.running) {
-           metaData.tdCls = cls + "-running";
-       } else if (record.data.template) {
-           metaData.tdCls = cls + "-template";     
-       } else {
-           metaData.tdCls = cls;
+       if (value === 'lxc' || value === 'qemu') {
+           if (record.data.running && record.data.status !== 'paused') {
+               gridcls = '-running';
+           } else if (record.data.running) {
+               gridcls = '-paused';
+           }
+           if (record.data.template) {
+               icon = 'file-o';
+               gridcls = '-template-' + value;
+           }
+       } else if (value === 'node') {
+           if (record.data.running) {
+               gridcls = '-online'
+           }
        }
 
-       return value;
+       var fa = '<i class="fa fa-fw x-fa-grid' + gridcls  +  ' fa-' + icon  + '"></i> '
+       return fa + value;
     },
 
     render_uptime: function(value, metaData, record, rowIndex, colIndex, store) {
@@ -1081,6 +1154,7 @@ Ext.define('PVE.Utils', { statics: {
            }
 
            var msg;
+           /*jslint nomen: true */
            var operation = request._operation;
            var error = operation.getError();
            if (error.statusText) {