[pve-devel] r6294 - pve-manager/pve2/www/manager

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Jul 13 08:52:22 CEST 2011


Author: dietmar
Date: 2011-07-13 08:52:22 +0200 (Wed, 13 Jul 2011)
New Revision: 6294

Added:
   pve-manager/pve2/www/manager/Utils.js
Removed:
   pve-manager/pve2/www/manager/PVEUtils.js
Modified:
   pve-manager/pve2/www/manager/Makefile.am
Log:
fix file naming


Modified: pve-manager/pve2/www/manager/Makefile.am
===================================================================
--- pve-manager/pve2/www/manager/Makefile.am	2011-07-13 06:45:56 UTC (rev 6293)
+++ pve-manager/pve2/www/manager/Makefile.am	2011-07-13 06:52:22 UTC (rev 6294)
@@ -1,7 +1,7 @@
 include $(top_builddir)/common.mk
 
 JSSRC= 				                 	\
-	PVEUtils.js					\
+	Utils.js					\
 	Parser.js					\
 	StateProvider.js				\
 	VNCConsole.js					\

Deleted: pve-manager/pve2/www/manager/PVEUtils.js
===================================================================
--- pve-manager/pve2/www/manager/PVEUtils.js	2011-07-13 06:45:56 UTC (rev 6293)
+++ pve-manager/pve2/www/manager/PVEUtils.js	2011-07-13 06:52:22 UTC (rev 6294)
@@ -1,542 +0,0 @@
-Ext.ns('PVE');
-
-// avoid errors when running without development tools
-if (!Ext.isDefined(Ext.global.console)) {   
-    var console = { 
-	dir: function() {}, 
-	log: function() {} 
-    };
-}
-console.log("Starting PVE Manager"); 
-
-Ext.Ajax.defaultHeaders = {
-    'Accept': 'application/json'
-};
-
-// do not send '_dc' parameter
-Ext.Ajax.disableCaching = false;
-
-Ext.Ajax.on('beforerequest', function(conn, options) {
-    if (PVE.CSRFPreventionToken) {
-	if (!options.headers) { 
-	    options.headers = {};
-	}
-	options.headers.CSRFPreventionToken = PVE.CSRFPreventionToken;
-    }
-});
-
-// custom Vtype for vtype:'IPAddress'
-Ext.apply(Ext.form.field.VTypes, {
-    IPAddress:  function(v) {
-        return (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/).test(v);
-    },
-    IPAddressText: 'Must be a numeric IP address',
-    IPAddressMask: /[\d\.]/i,
-
-    MacAddress: function(v) {
-	return (/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/).test(v);
-    },
-    MacAddressMask: /[a-fA-F0-9:]/,
-    MacAddressText: 'Must be a valid MAC address (example: "01:23:45:67:89:ab")',
-
-    BridgeName: function(v) {
-        return (/^vmbr\d{1,4}$/).test(v);
-    },
-    BridgeNameText: 'Allowable bridge names: vmbr<b>N</b>, where 0 <= <b>N</b> <= 9999',
-
-    BondName: function(v) {
-        return (/^bond\d{1,4}$/).test(v);
-    },
-    BondNameText: 'Allowable bond names: bond<b>N</b>, where 0 <= <b>N</b> <= 9999'
-});
-
-// we dont want that a display field set the form dirty flag! 
-Ext.override(Ext.form.field.Display, {
-    isDirty: function() { return false; }
-});
-
-Ext.define('PVE.Utils', { statics: {
-
-    // this class only contains static functions
-
-    log_severity_hash: {
-	0: "panic",
-	1: "alert",
-	2: "critical",
-	3: "error",
-	4: "warning",
-	5: "notice",
-	6: "info",
-	7: "debug"
-    },
-
-    kvm_keymaps: {
-	ar: 'Arabic',
-	da: 'Danish',
-	de: 'German', 
-	'de-ch': 'German (Swiss)', 
-	'en-gb': 'English (UK)', 
-	'en-us': 'English (USA',
-	es: 'Spanish',
-	et: 'Estonia',
-	fi: 'Finnish',
-	fo: 'Faroe Islands', 
-	fr: 'French', 
-	'fr-be': 'French (Belgium)', 
-	'fr-ca': 'French (Canada)',
-	'fr-ch': 'French (Swiss)',
-	hr: 'Croatia',
-	hu: 'Hungarian',
-	is: 'Icelandic',
-	it: 'Italian', 
-	ja: 'Japanese',
-	lt: 'Lithuanian',
-	lv: 'Latvian',
-	mk: 'Macedonian', 
-	nl: 'Dutch',
-	'nl-be': 'Dutch (Belgium)',
-	no: 'Norwegian', 
-	pl: 'Polish',
-	pt: 'Portuguese',
-	'pt-br': 'Portuguese (Brazil)',
-	ru: 'Russian',
-	sl: 'Slovenian',
-	sv: 'Swedish',
-	th: 'Thai',
-	tr: 'Turkish'
-    },
-
-    kvm_vga_drivers: {
-	std: 'Standard VGA',
-	vmware: 'VMWare compatible',
-	cirrus: 'Cirrus Logic GD5446'
-    },
-
-    render_kvm_language: function (value) {
-	if (!value) {
-	    return 'Default';
-	}
-	var text = PVE.Utils.kvm_keymaps[value];
-	if (text) {
-	    return text + ' (' + value + ')';
-	}
-	return value;
-    },
-
-    kvm_keymap_array: function() {
-	var data = [['', PVE.Utils.render_kvm_language('')]];
-	Ext.Object.each(PVE.Utils.kvm_keymaps, function(key, value) {
-	    data.push([key, PVE.Utils.render_kvm_language(value)]);
-	});
-
-	return data;
-    },
-
-    render_kvm_vga_driver: function (value) {
-	if (!value) {
-	    return 'Default (cirrus)';
-	}
-	var text = PVE.Utils.kvm_vga_drivers[value];
-	if (text) { 
-	    return text + ' (' + value + ')';
-	}
-	return value;
-    },
-
-    kvm_vga_driver_array: function() {
-	var data = [['', PVE.Utils.render_kvm_vga_driver('')]];
-	Ext.Object.each(PVE.Utils.kvm_vga_drivers, function(key, value) {
-	    data.push([key, PVE.Utils.render_kvm_vga_driver(value)]);
-	});
-
-	return data;
-    },
-
-    authOK: function() {
-	return Ext.util.Cookies.get('PVEAuthCookie');
-    },
-
-    authClear: function() {
-	Ext.util.Cookies.clear("PVEAuthCookie");
-    },
-
-    // fixme: remove - not needed?
-    gridLineHeigh: function() {
-	return 21;
-	
-	//if (Ext.isGecko)
-	//return 23;
-	//return 21;
-    },
-
-    extractRequestError: function(result, verbose) {
-	var msg = 'Successful';
-
-	if (!result.success) {
-	    msg = "Unknown error";
-	    if (result.message) {
-		msg = result.message;
-		if (result.status) {
-		    msg += ' (' + result.status + ')';
-		}
-	    }
-	    if (verbose && Ext.isObject(result.errors)) {
-		msg += "<br>";
-		Ext.Object.each(result.errors, function(prop, desc) {
-		    msg += "<br><b>" + Ext.htmlEncode(prop) + "</b>: " + 
-			Ext.htmlEncode(desc);
-		});
-	    }	
-	}
-
-	return msg;
-    },
-
-    extractFormActionError: function(action) {
-	var msg;
-	switch (action.failureType) {
-	case Ext.form.action.Action.CLIENT_INVALID:
-	    msg = 'Form fields may not be submitted with invalid values';
-	    break;
-	case Ext.form.action.Action.CONNECT_FAILURE:
-	    msg = 'Connect failure';
-	    var resp = action.response;
-	    if (resp.status && resp.statusText) {
-		msg += " " + resp.status + ": " + resp.statusText;
-	    }
-	    break;
-	case Ext.form.action.Action.LOAD_FAILURE:
-	case Ext.form.action.Action.SERVER_INVALID:
-	    msg = PVE.Utils.extractRequestError(action.result, true);
-	    break;
-	}
-	return msg;
-    },
-
-    // Ext.Ajax.request
-    API2Request: function(options) {
-	var callbackFn = options.callback;
-	var successFn = options.success;
-	var failureFn = options.failure;
-
-	if (!options.url.match(/^\/api2/)) {
-	    options.url = '/api2/extjs' + options.url;
-	}
-	delete options.callback;
-
-	options.success = function(response, options) {
-	    var result = Ext.decode(response.responseText);
-	    if (!result.success) {
-		response.htmlStatus = PVE.Utils.extractRequestError(result, true);
-		Ext.callback(callbackFn, options.scope, [options, false, response]);
-		Ext.callback(failureFn, options.scope, [response, options]);
-		return;
-	    }
-	    Ext.callback(callbackFn, options.scope, [options, true, response]);
-	    Ext.callback(successFn, options.scope, [response, options]);
-	};
-
-	options.failure = function(response, options) {
-	    var msg = "Connection error - server offline?";
-	    if (response.status && response.statusText) {
-		msg = "Connection error " + response.status + ": " + response.statusText;
-	    }
-	    response.htmlStatus = msg;
-	    Ext.callback(callbackFn, options.scope, [options, false, response]);
-	    Ext.callback(failureFn, options.scope, [response, options]);
-	};
-
-	Ext.Ajax.request(options);
-    },
-
-    assemble_field_data: function(values, data) {
-        if (Ext.isObject(data)) {
-	    Ext.Object.each(data, function(name, val) {
-                if (values.hasOwnProperty(name)) {
-                    var bucket = values[name];
-                    if (!Ext.isArray(bucket)) {
-                        bucket = values[name] = [bucket];
-                    }
-                    if (Ext.isArray(val)) {
-                        values[name] = bucket.concat(val);
-                    } else {
-                        bucket.push(val);
-                    }
-                } else {
-                    values[name] = val;
-                }
-            });
-	}
-    },
-
-    format_task_description: function(type, id) {
-
-	if (type == 'vncproxy') {
-	    return "VNC connection to VM " + id;
-	}
-
-	if (type == 'vncshell') {
-	    return "VNC shell";
-	}
-
-	return type;
-    },
-
-
-    parse_task_upid: function(upid) {
-	var task = {};
-
-	var res = upid.match(/^UPID:(\w+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
-	if (!res) {
-	    throw "unable to parse upid '" + upid + "'";
-	}
-	task.node = res[1];
-	task.pid = parseInt(res[2], 16);
-	task.pstart = parseInt(res[3], 16);
-	task.starttime = parseInt(res[4], 16);
-	task.type = res[5];
-	task.id = res[6];
-	task.user = res[7];
-
-	task.desc = PVE.Utils.format_task_description(task.type, task.id);
-
-	return task;
-    },
-
-    format_size: function(size) {
-
-	var kb = size / 1024;
-
-	if (kb < 1024) {
-	    return kb.toFixed(0) + "KB";
-	}
-
-	var mb = size / (1024*1024);
-
-	if (mb < 1024) {
-	    return mb.toFixed(0) + "MB";
-	}
-
-	var gb = mb / 1024;
-
-	if (gb < 1024) {
-	    return gb.toFixed(2) + "GB";
-	}
-
-	var tb =  gb / 1024;
-
-	return tb.toFixed(2) + "TB";
-
-    },
-
-    format_html_bar: function(per, text) {
-
-	return "<div class='pve-bar-wrap'>" + text + "<div class='pve-bar-border'>" +
-	    "<div class='pve-bar-inner' style='width:" + per + "%;'></div>" +
-	    "</div></div>";
-	
-    },
-
-    format_cpu_bar: function(per1, per2, text) {
-
-	return "<div class='pve-bar-border'>" +
-	    "<div class='pve-bar-inner' style='width:" + per1 + "%;'></div>" +
-	    "<div class='pve-bar-inner2' style='width:" + per2 + "%;'></div>" +
-	    "<div class='pve-bar-text'>" + text + "</div>" + 
-	    "</div>";
-    },
-
-    format_large_bar: function(per, text) {
-
-	if (!text) {
-	    text = per.toFixed(1) + "%";
-	}
-
-	return "<div class='pve-largebar-border'>" +
-	    "<div class='pve-largebar-inner' style='width:" + per + "%;'></div>" +
-	    "<div class='pve-largebar-text'>" + text + "</div>" + 
-	    "</div>";
-    },
-
-    format_duration_long: function(ut) {
-
-	var days = Math.floor(ut / 86400);
-	ut -= days*86400;
-	var hours = Math.floor(ut / 3600);
-	ut -= hours*3600;
-	var mins = Math.floor(ut / 60);
-	ut -= mins*60;
-
-	var hours_str = '00' + hours.toString();
-	hours_str = hours_str.substr(hours_str.length - 2);
-	var mins_str = "00" + mins.toString();
-	mins_str = mins_str.substr(mins_str.length - 2);
-	var ut_str = "00" + ut.toString();
-	ut_str = ut_str.substr(ut_str.length - 2);
-
-	if (days) {
-	    var ds = days > 1 ? 'days' : 'day';
-	    return days.toString() + ' ' + ds + ' ' + 
-		hours_str + ':' + mins_str + ':' + ut_str;
-	} else {
-	    return hours_str + ':' + mins_str + ':' + ut_str;
-	}
-    },
-
-    format_duration_short: function(ut) {
-	
-	if (ut < 60) {
-	    return ut.toString() + 's';
-	}
-
-	if (ut < 3600) {
-	    var mins = ut / 60;
-	    return mins.toFixed(0) + 'm';
-	}
-
-	if (ut < 86400) {
-	    var hours = ut / 3600;
-	    return hours.toFixed(0) + 'h';
-	}
-
-	var days = ut / 86400;
-	return days.toFixed(0) + 'd';	
-    },
-
-    format_storage_type: function(value) {
-	if (value === 'dir') {
-	    return 'Directory';
-	} else if (value === 'nfs') {
-	    return 'NFS';
-	} else if (value === 'lvm') {
-	    return 'LVM';
-	} else if (value === 'iscsi') {
-	    return 'iSCSI';
-	} else {
-	    return 'unknown';
-	}
-    },
-
-    format_boolean: function(value) {
-	return value ? 'Yes' : 'No';
-    },
-
-    format_neg_boolean: function(value) {
-	return !value ? 'Yes' : 'No';
-    },
-
-    format_content_types: function(value) {
-	var cta = [];
-
-	Ext.each(value.split(','), function(ct) {
-	    if (ct === 'images') {
-		cta.push('Images');
-	    } else if (ct === 'backup') {
-		cta.push('Backups');
-	    } else if (ct === 'vztmpl') {
-		cta.push('Templates');
-	    } else if (ct === 'iso') {
-		cta.push('ISO');
-	    }
-	});
-
-	return cta.join(', ');
-    },
-
-    render_serverity: function (value) {
-	return PVE.Utils.log_severity_hash[value] || value;
-    },
-
-    render_cpu: function(value, metaData, record, rowIndex, colIndex, store) {
-
-	var maxcpu = record.data.maxcpu;
-
-	if (!record.data.uptime) {
-	    return '';
-	}
-
-	if (!(Ext.isNumeric(value) && Ext.isNumeric(maxcpu) && (maxcpu >= 1))) {
-	    return '';
-	}
-
-	var per = (value * 100) / maxcpu;
-
-	return per.toFixed(1) + '% of ' + maxcpu.toString() + (maxcpu > 1 ? 'CPUs' : 'CPU');
-    },
-
-    render_size: function(value, metaData, record, rowIndex, colIndex, store) {
-
-	if (!Ext.isNumeric(value)) {
-	    return '';
-	}
-
-	return PVE.Utils.format_size(value);
-    },
-
-    render_timestamp: function(value, metaData, record, rowIndex, colIndex, store) {
-	var servertime = new Date(value * 1000);
-	return Ext.Date.format(servertime, 'Y-m-d H:i:s');
-    },
-
-    render_mem_usage: function(value, metaData, record, rowIndex, colIndex, store) {
-
-	var mem = value;
-	var maxmem = record.data.maxmem;
-	
-	if (!record.data.uptime) {
-	    return '';
-	}
-
-	if (!(Ext.isNumeric(mem) && maxmem)) {
-	    return '';
-	}
-
-	var per = (mem * 100) / maxmem;
-
-	return per.toFixed(1) + '%';
-    },
-
-    render_disk_usage: function(value, metaData, record, rowIndex, colIndex, store) {
-
-	var disk = value;
-	var maxdisk = record.data.maxdisk;
-
-	if (!(Ext.isNumeric(disk) && maxdisk)) {
-	    return '';
-	}
-
-	var per = (disk * 100) / maxdisk;
-
-	return per.toFixed(1) + '%';
-    },
-
-    render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
-
-	var cls = 'pve-itype-icon-' + value;
-	metaData.tdCls = cls;
-	return value;
-    },
-
-    render_uptime: function(value, metaData, record, rowIndex, colIndex, store) {
-
-	var uptime = value;
-
-	if (uptime === undefined) {
-	    return '';
-	}
-	
-	if (uptime <= 0) {
-	    return '-';
-	}
-
-	return PVE.Utils.format_duration_long(uptime);
-    },
-
-    render_upid: function(value, metaData, record) { 
-	var type = record.data.type;
-	var id = record.data.id;
-
-	return PVE.Utils.format_task_description(type, id);
-    }
-}});
-

Copied: pve-manager/pve2/www/manager/Utils.js (from rev 6292, pve-manager/pve2/www/manager/PVEUtils.js)
===================================================================
--- pve-manager/pve2/www/manager/Utils.js	                        (rev 0)
+++ pve-manager/pve2/www/manager/Utils.js	2011-07-13 06:52:22 UTC (rev 6294)
@@ -0,0 +1,542 @@
+Ext.ns('PVE');
+
+// avoid errors when running without development tools
+if (!Ext.isDefined(Ext.global.console)) {   
+    var console = { 
+	dir: function() {}, 
+	log: function() {} 
+    };
+}
+console.log("Starting PVE Manager"); 
+
+Ext.Ajax.defaultHeaders = {
+    'Accept': 'application/json'
+};
+
+// do not send '_dc' parameter
+Ext.Ajax.disableCaching = false;
+
+Ext.Ajax.on('beforerequest', function(conn, options) {
+    if (PVE.CSRFPreventionToken) {
+	if (!options.headers) { 
+	    options.headers = {};
+	}
+	options.headers.CSRFPreventionToken = PVE.CSRFPreventionToken;
+    }
+});
+
+// custom Vtype for vtype:'IPAddress'
+Ext.apply(Ext.form.field.VTypes, {
+    IPAddress:  function(v) {
+        return (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/).test(v);
+    },
+    IPAddressText: 'Must be a numeric IP address',
+    IPAddressMask: /[\d\.]/i,
+
+    MacAddress: function(v) {
+	return (/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/).test(v);
+    },
+    MacAddressMask: /[a-fA-F0-9:]/,
+    MacAddressText: 'Must be a valid MAC address (example: "01:23:45:67:89:ab")',
+
+    BridgeName: function(v) {
+        return (/^vmbr\d{1,4}$/).test(v);
+    },
+    BridgeNameText: 'Allowable bridge names: vmbr<b>N</b>, where 0 <= <b>N</b> <= 9999',
+
+    BondName: function(v) {
+        return (/^bond\d{1,4}$/).test(v);
+    },
+    BondNameText: 'Allowable bond names: bond<b>N</b>, where 0 <= <b>N</b> <= 9999'
+});
+
+// we dont want that a display field set the form dirty flag! 
+Ext.override(Ext.form.field.Display, {
+    isDirty: function() { return false; }
+});
+
+Ext.define('PVE.Utils', { statics: {
+
+    // this class only contains static functions
+
+    log_severity_hash: {
+	0: "panic",
+	1: "alert",
+	2: "critical",
+	3: "error",
+	4: "warning",
+	5: "notice",
+	6: "info",
+	7: "debug"
+    },
+
+    kvm_keymaps: {
+	ar: 'Arabic',
+	da: 'Danish',
+	de: 'German', 
+	'de-ch': 'German (Swiss)', 
+	'en-gb': 'English (UK)', 
+	'en-us': 'English (USA',
+	es: 'Spanish',
+	et: 'Estonia',
+	fi: 'Finnish',
+	fo: 'Faroe Islands', 
+	fr: 'French', 
+	'fr-be': 'French (Belgium)', 
+	'fr-ca': 'French (Canada)',
+	'fr-ch': 'French (Swiss)',
+	hr: 'Croatia',
+	hu: 'Hungarian',
+	is: 'Icelandic',
+	it: 'Italian', 
+	ja: 'Japanese',
+	lt: 'Lithuanian',
+	lv: 'Latvian',
+	mk: 'Macedonian', 
+	nl: 'Dutch',
+	'nl-be': 'Dutch (Belgium)',
+	no: 'Norwegian', 
+	pl: 'Polish',
+	pt: 'Portuguese',
+	'pt-br': 'Portuguese (Brazil)',
+	ru: 'Russian',
+	sl: 'Slovenian',
+	sv: 'Swedish',
+	th: 'Thai',
+	tr: 'Turkish'
+    },
+
+    kvm_vga_drivers: {
+	std: 'Standard VGA',
+	vmware: 'VMWare compatible',
+	cirrus: 'Cirrus Logic GD5446'
+    },
+
+    render_kvm_language: function (value) {
+	if (!value) {
+	    return 'Default';
+	}
+	var text = PVE.Utils.kvm_keymaps[value];
+	if (text) {
+	    return text + ' (' + value + ')';
+	}
+	return value;
+    },
+
+    kvm_keymap_array: function() {
+	var data = [['', PVE.Utils.render_kvm_language('')]];
+	Ext.Object.each(PVE.Utils.kvm_keymaps, function(key, value) {
+	    data.push([key, PVE.Utils.render_kvm_language(value)]);
+	});
+
+	return data;
+    },
+
+    render_kvm_vga_driver: function (value) {
+	if (!value) {
+	    return 'Default (cirrus)';
+	}
+	var text = PVE.Utils.kvm_vga_drivers[value];
+	if (text) { 
+	    return text + ' (' + value + ')';
+	}
+	return value;
+    },
+
+    kvm_vga_driver_array: function() {
+	var data = [['', PVE.Utils.render_kvm_vga_driver('')]];
+	Ext.Object.each(PVE.Utils.kvm_vga_drivers, function(key, value) {
+	    data.push([key, PVE.Utils.render_kvm_vga_driver(value)]);
+	});
+
+	return data;
+    },
+
+    authOK: function() {
+	return Ext.util.Cookies.get('PVEAuthCookie');
+    },
+
+    authClear: function() {
+	Ext.util.Cookies.clear("PVEAuthCookie");
+    },
+
+    // fixme: remove - not needed?
+    gridLineHeigh: function() {
+	return 21;
+	
+	//if (Ext.isGecko)
+	//return 23;
+	//return 21;
+    },
+
+    extractRequestError: function(result, verbose) {
+	var msg = 'Successful';
+
+	if (!result.success) {
+	    msg = "Unknown error";
+	    if (result.message) {
+		msg = result.message;
+		if (result.status) {
+		    msg += ' (' + result.status + ')';
+		}
+	    }
+	    if (verbose && Ext.isObject(result.errors)) {
+		msg += "<br>";
+		Ext.Object.each(result.errors, function(prop, desc) {
+		    msg += "<br><b>" + Ext.htmlEncode(prop) + "</b>: " + 
+			Ext.htmlEncode(desc);
+		});
+	    }	
+	}
+
+	return msg;
+    },
+
+    extractFormActionError: function(action) {
+	var msg;
+	switch (action.failureType) {
+	case Ext.form.action.Action.CLIENT_INVALID:
+	    msg = 'Form fields may not be submitted with invalid values';
+	    break;
+	case Ext.form.action.Action.CONNECT_FAILURE:
+	    msg = 'Connect failure';
+	    var resp = action.response;
+	    if (resp.status && resp.statusText) {
+		msg += " " + resp.status + ": " + resp.statusText;
+	    }
+	    break;
+	case Ext.form.action.Action.LOAD_FAILURE:
+	case Ext.form.action.Action.SERVER_INVALID:
+	    msg = PVE.Utils.extractRequestError(action.result, true);
+	    break;
+	}
+	return msg;
+    },
+
+    // Ext.Ajax.request
+    API2Request: function(options) {
+	var callbackFn = options.callback;
+	var successFn = options.success;
+	var failureFn = options.failure;
+
+	if (!options.url.match(/^\/api2/)) {
+	    options.url = '/api2/extjs' + options.url;
+	}
+	delete options.callback;
+
+	options.success = function(response, options) {
+	    var result = Ext.decode(response.responseText);
+	    if (!result.success) {
+		response.htmlStatus = PVE.Utils.extractRequestError(result, true);
+		Ext.callback(callbackFn, options.scope, [options, false, response]);
+		Ext.callback(failureFn, options.scope, [response, options]);
+		return;
+	    }
+	    Ext.callback(callbackFn, options.scope, [options, true, response]);
+	    Ext.callback(successFn, options.scope, [response, options]);
+	};
+
+	options.failure = function(response, options) {
+	    var msg = "Connection error - server offline?";
+	    if (response.status && response.statusText) {
+		msg = "Connection error " + response.status + ": " + response.statusText;
+	    }
+	    response.htmlStatus = msg;
+	    Ext.callback(callbackFn, options.scope, [options, false, response]);
+	    Ext.callback(failureFn, options.scope, [response, options]);
+	};
+
+	Ext.Ajax.request(options);
+    },
+
+    assemble_field_data: function(values, data) {
+        if (Ext.isObject(data)) {
+	    Ext.Object.each(data, function(name, val) {
+                if (values.hasOwnProperty(name)) {
+                    var bucket = values[name];
+                    if (!Ext.isArray(bucket)) {
+                        bucket = values[name] = [bucket];
+                    }
+                    if (Ext.isArray(val)) {
+                        values[name] = bucket.concat(val);
+                    } else {
+                        bucket.push(val);
+                    }
+                } else {
+                    values[name] = val;
+                }
+            });
+	}
+    },
+
+    format_task_description: function(type, id) {
+
+	if (type == 'vncproxy') {
+	    return "VNC connection to VM " + id;
+	}
+
+	if (type == 'vncshell') {
+	    return "VNC shell";
+	}
+
+	return type;
+    },
+
+
+    parse_task_upid: function(upid) {
+	var task = {};
+
+	var res = upid.match(/^UPID:(\w+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
+	if (!res) {
+	    throw "unable to parse upid '" + upid + "'";
+	}
+	task.node = res[1];
+	task.pid = parseInt(res[2], 16);
+	task.pstart = parseInt(res[3], 16);
+	task.starttime = parseInt(res[4], 16);
+	task.type = res[5];
+	task.id = res[6];
+	task.user = res[7];
+
+	task.desc = PVE.Utils.format_task_description(task.type, task.id);
+
+	return task;
+    },
+
+    format_size: function(size) {
+
+	var kb = size / 1024;
+
+	if (kb < 1024) {
+	    return kb.toFixed(0) + "KB";
+	}
+
+	var mb = size / (1024*1024);
+
+	if (mb < 1024) {
+	    return mb.toFixed(0) + "MB";
+	}
+
+	var gb = mb / 1024;
+
+	if (gb < 1024) {
+	    return gb.toFixed(2) + "GB";
+	}
+
+	var tb =  gb / 1024;
+
+	return tb.toFixed(2) + "TB";
+
+    },
+
+    format_html_bar: function(per, text) {
+
+	return "<div class='pve-bar-wrap'>" + text + "<div class='pve-bar-border'>" +
+	    "<div class='pve-bar-inner' style='width:" + per + "%;'></div>" +
+	    "</div></div>";
+	
+    },
+
+    format_cpu_bar: function(per1, per2, text) {
+
+	return "<div class='pve-bar-border'>" +
+	    "<div class='pve-bar-inner' style='width:" + per1 + "%;'></div>" +
+	    "<div class='pve-bar-inner2' style='width:" + per2 + "%;'></div>" +
+	    "<div class='pve-bar-text'>" + text + "</div>" + 
+	    "</div>";
+    },
+
+    format_large_bar: function(per, text) {
+
+	if (!text) {
+	    text = per.toFixed(1) + "%";
+	}
+
+	return "<div class='pve-largebar-border'>" +
+	    "<div class='pve-largebar-inner' style='width:" + per + "%;'></div>" +
+	    "<div class='pve-largebar-text'>" + text + "</div>" + 
+	    "</div>";
+    },
+
+    format_duration_long: function(ut) {
+
+	var days = Math.floor(ut / 86400);
+	ut -= days*86400;
+	var hours = Math.floor(ut / 3600);
+	ut -= hours*3600;
+	var mins = Math.floor(ut / 60);
+	ut -= mins*60;
+
+	var hours_str = '00' + hours.toString();
+	hours_str = hours_str.substr(hours_str.length - 2);
+	var mins_str = "00" + mins.toString();
+	mins_str = mins_str.substr(mins_str.length - 2);
+	var ut_str = "00" + ut.toString();
+	ut_str = ut_str.substr(ut_str.length - 2);
+
+	if (days) {
+	    var ds = days > 1 ? 'days' : 'day';
+	    return days.toString() + ' ' + ds + ' ' + 
+		hours_str + ':' + mins_str + ':' + ut_str;
+	} else {
+	    return hours_str + ':' + mins_str + ':' + ut_str;
+	}
+    },
+
+    format_duration_short: function(ut) {
+	
+	if (ut < 60) {
+	    return ut.toString() + 's';
+	}
+
+	if (ut < 3600) {
+	    var mins = ut / 60;
+	    return mins.toFixed(0) + 'm';
+	}
+
+	if (ut < 86400) {
+	    var hours = ut / 3600;
+	    return hours.toFixed(0) + 'h';
+	}
+
+	var days = ut / 86400;
+	return days.toFixed(0) + 'd';	
+    },
+
+    format_storage_type: function(value) {
+	if (value === 'dir') {
+	    return 'Directory';
+	} else if (value === 'nfs') {
+	    return 'NFS';
+	} else if (value === 'lvm') {
+	    return 'LVM';
+	} else if (value === 'iscsi') {
+	    return 'iSCSI';
+	} else {
+	    return 'unknown';
+	}
+    },
+
+    format_boolean: function(value) {
+	return value ? 'Yes' : 'No';
+    },
+
+    format_neg_boolean: function(value) {
+	return !value ? 'Yes' : 'No';
+    },
+
+    format_content_types: function(value) {
+	var cta = [];
+
+	Ext.each(value.split(','), function(ct) {
+	    if (ct === 'images') {
+		cta.push('Images');
+	    } else if (ct === 'backup') {
+		cta.push('Backups');
+	    } else if (ct === 'vztmpl') {
+		cta.push('Templates');
+	    } else if (ct === 'iso') {
+		cta.push('ISO');
+	    }
+	});
+
+	return cta.join(', ');
+    },
+
+    render_serverity: function (value) {
+	return PVE.Utils.log_severity_hash[value] || value;
+    },
+
+    render_cpu: function(value, metaData, record, rowIndex, colIndex, store) {
+
+	var maxcpu = record.data.maxcpu;
+
+	if (!record.data.uptime) {
+	    return '';
+	}
+
+	if (!(Ext.isNumeric(value) && Ext.isNumeric(maxcpu) && (maxcpu >= 1))) {
+	    return '';
+	}
+
+	var per = (value * 100) / maxcpu;
+
+	return per.toFixed(1) + '% of ' + maxcpu.toString() + (maxcpu > 1 ? 'CPUs' : 'CPU');
+    },
+
+    render_size: function(value, metaData, record, rowIndex, colIndex, store) {
+
+	if (!Ext.isNumeric(value)) {
+	    return '';
+	}
+
+	return PVE.Utils.format_size(value);
+    },
+
+    render_timestamp: function(value, metaData, record, rowIndex, colIndex, store) {
+	var servertime = new Date(value * 1000);
+	return Ext.Date.format(servertime, 'Y-m-d H:i:s');
+    },
+
+    render_mem_usage: function(value, metaData, record, rowIndex, colIndex, store) {
+
+	var mem = value;
+	var maxmem = record.data.maxmem;
+	
+	if (!record.data.uptime) {
+	    return '';
+	}
+
+	if (!(Ext.isNumeric(mem) && maxmem)) {
+	    return '';
+	}
+
+	var per = (mem * 100) / maxmem;
+
+	return per.toFixed(1) + '%';
+    },
+
+    render_disk_usage: function(value, metaData, record, rowIndex, colIndex, store) {
+
+	var disk = value;
+	var maxdisk = record.data.maxdisk;
+
+	if (!(Ext.isNumeric(disk) && maxdisk)) {
+	    return '';
+	}
+
+	var per = (disk * 100) / maxdisk;
+
+	return per.toFixed(1) + '%';
+    },
+
+    render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
+
+	var cls = 'pve-itype-icon-' + value;
+	metaData.tdCls = cls;
+	return value;
+    },
+
+    render_uptime: function(value, metaData, record, rowIndex, colIndex, store) {
+
+	var uptime = value;
+
+	if (uptime === undefined) {
+	    return '';
+	}
+	
+	if (uptime <= 0) {
+	    return '-';
+	}
+
+	return PVE.Utils.format_duration_long(uptime);
+    },
+
+    render_upid: function(value, metaData, record) { 
+	var type = record.data.type;
+	var id = record.data.id;
+
+	return PVE.Utils.format_task_description(type, id);
+    }
+}});
+




More information about the pve-devel mailing list