diff --git a/www/new/Makefile.am b/www/new/Makefile.am
deleted file mode 100644
index 62f60a7e..00000000
--- a/www/new/Makefile.am
+++ /dev/null
@@ -1,89 +0,0 @@
-include $(top_builddir)/common.mk
-
-JSSRC= \
- PVEUtils.js \
- StateProvider.js \
- VNCConsole.js \
- data/TimezoneStore.js \
- data/reader/JsonObject.js \
- data/PVEProxy.js \
- data/UpdateQueue.js \
- data/UpdateStore.js \
- data/DiffStore.js \
- data/ObjectStore.js \
- data/ResourceStore.js \
- form/Checkbox.js \
- form/TextField.js \
- form/RRDTypeSelector.js \
- form/ComboGrid.js \
- form/NetworkCardSelector.js \
- form/DiskFormatSelector.js \
- form/BusTypeSelector.js \
- form/RealmComboBox.js \
- form/BondModeSelector.js \
- form/ViewSelector.js \
- form/NodeSelector.js \
- form/FileSelector.js \
- form/StorageSelector.js \
- dc/Tasks.js \
- dc/Log.js \
- panel/StatusPanel.js \
- panel/RRDView.js \
- window/LoginWindow.js \
- window/TaskViewer.js \
- window/Wizard.js \
- grid/SelectFeature.js \
- grid/ObjectGrid.js \
- grid/ResourceGrid.js \
- tree/ResourceTree.js \
- panel/ConfigPanel.js \
- node/DNSEdit.js \
- node/DNSView.js \
- node/TimeView.js \
- node/TimeEdit.js \
- node/StatusView.js \
- node/Summary.js \
- node/ServiceView.js \
- node/NetworkEdit.js \
- node/NetworkView.js \
- node/Syslog.js \
- node/Tasks.js \
- node/Config.js \
- qemu/StatusView.js \
- qemu/Summary.js \
- qemu/Config.js \
- qemu/HardwareView.js \
- qemu/CreateWizard.js \
- openvz/CreateWizard.js \
- storage/Browser.js \
- dc/UserView.js \
- dc/GroupView.js \
- dc/RoleView.js \
- dc/ACLView.js \
- dc/AuthView.js \
- dc/Config.js \
- Workspace.js
-
-pvemanagerlib.js: ${JSSRC}
- cat ${JSSRC} >$@
-
-pvelib_DATA = pvemanagerlib.js
-pvelibdir = ${WWW_EXTDIR}
-
-privatedir = ${WWW_BASEDIR}
-private_SCRIPTS = \
- startup.pl
-
-managerdir = ${WWW_ROOTDIR}
-manager_SCRIPTS = \
- index.pl
-
-install-data-hook:
- chown -R www-data:www-data ${DESTDIR}/${privatedir}
- chown -R www-data:www-data ${DESTDIR}/${managerdir}
- chown -R www-data:www-data ${DESTDIR}/${pvelibdir}
-
-clean-local:
- -rm -rf *~ store/*~ pvemanagerlib.js
-
-
diff --git a/www/new/PVEUtils.js b/www/new/PVEUtils.js
deleted file mode 100644
index ee962b1e..00000000
--- a/www/new/PVEUtils.js
+++ /dev/null
@@ -1,430 +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,
-
- BridgeName: function(v) {
- return /^vmbr\d{1,4}$/.test(v);
- },
- BridgeNameText: 'Allowable bridge names: vmbrN, where 0 <= N <= 9999',
-
- BondName: function(v) {
- return /^bond\d{1,4}$/.test(v);
- },
- BondNameText: 'Allowable bond names: bondN, where 0 <= N <= 9999'
-
-});
-
-
-
-Ext.define('PVE.Utils', {
- singleton: true,
-
- statics: {
-
- log_severity_hash: {
- 0: "panic",
- 1: "alert",
- 2: "critical",
- 3: "error",
- 4: "warning",
- 5: "notice",
- 6: "info",
- 7: "debug"
- }
- },
-
- 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) {
- var msg = "Unknown error";
- if (result.message) {
- msg = result.message;
- if (result.status)
- msg += ' (' + result.status + ')';
- }
- if (verbose && Ext.isObject(result.errors)) {
- msg += "
";
- Ext.Object.each(result.errors, function(prop, desc) {
- msg += "
" + Ext.htmlEncode(prop) + ": " +
- 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;
-
- 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.iterate(data, function(name, val) {
- if (name in values) {
- var bucket = values[name],
- isArray = Ext.isArray;
- if (!isArray(bucket)) {
- bucket = values[name] = [bucket];
- }
- if (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 "
" + 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);
- },
-
- dummy: "ignore me"
- };
-
- var field_defaults = {
- itype: {
- header: 'Type',
- type: 'text',
- renderer: utils.render_itype,
- width: 50
- },
- id: {
- header: 'ID',
- hidden: true,
- type: 'text'
- },
- name: {
- header: 'Name',
- type: 'text'
- },
- disk: {
- header: 'Disk',
- type: 'integer',
- renderer: utils.render_disk,
- width: 60
- },
- maxdisk: {
- header: 'maxdisk',
- type:'integer',
- hidden: true,
- width: 60
- },
- mem: {
- header: 'Memory',
- type: 'integer',
- renderer: utils.render_mem,
- width: 60
- },
- maxmem: {
- header: 'maxmem',
- type:'integer',
- hidden: true,
- width: 60
- },
- cpu: {
- header: 'CPU',
- type:'float',
- renderer: utils.render_cpu,
- width: 85
- },
- maxcpu: {
- header: 'maxcpu',
- type:'integer',
- hidden: true,
- width: 60
- },
- uptime: {
- header: 'Uptime',
- type:'integer',
- renderer: utils.render_uptime,
- width: 110
- },
- node: {
- header: 'Node',
- type: 'text',
- hidden: true,
- width: 110
- },
- storage: {
- header: 'Storage',
- type: 'text',
- hidden: true,
- width: 110
- },
- shared: {
- header: 'Shared',
- type: 'boolean',
- hidden: true,
- width: 60
- }
- };
-
- var visible_fields = function() {
- var res = {};
- for (field in field_defaults) {
- if (!field_defaults[field].hidden)
- res[field] = true;
- }
- return res;
- }();
-
- utils.getFields = function() {
- return Ext.apply({}, field_defaults);
- };
-
- utils.base_fields = function() {
- var res = [];
- for (field in field_defaults) {
- res.push(field);
- }
- return res;
- }();
-
- utils.get_field_defaults = function(fieldlist) {
-
- var res = [];
-
- Ext.each(fieldlist, function(field) {
- var info = field_defaults[field];
- if (!info)
- throw "no such field '" + field + "'";
- var fi = { name: field };
-
- if (info.type)
- fi.type = info.type;
-
- res.push(fi);
- });
-
- return res;
- };
-
- utils.default_view = 'server';
-
- utils.default_views = {
- custom: {
- text: 'Custom View',
- fields: Ext.apply({}, visible_fields),
- groups: []
- },
- folder: {
- text: 'Folder View',
- fields: Ext.apply({}, visible_fields),
- groups: ['itype']
- },
- server: {
- text: 'Server View',
- fields: Ext.apply({}, visible_fields),
- groups: ['node']
- },
- storage: {
- text: 'Storage View',
- fields: Ext.apply({}, visible_fields),
- groups: ['node'],
- filterfn: function(n, itype) {
- return itype === 'storage';
- }
- }
- };
-
- utils.changeViewDefaults = function(view, viewinfo) {
- console.log("change view defaults" + view);
- utils.default_views[view].fields =
- Ext.apply({}, viewinfo.fields);
- utils.default_views[view].groups =
- [].concat(viewinfo.groups);
- };
-
- utils.get_column_defaults = function(view) {
-
- var res = [];
-
- var viewinfo = utils.default_views[view];
-
- for (field in field_defaults) {
- var info = field_defaults[field];
- var fi = { header: info.header, dataIndex: field };
-
- if (info.renderer)
- fi.renderer = info.renderer;
- if (info.width)
- fi.width = info.width;
- if (!viewinfo.fields[field])
- fi.hidden = true;
-
- res.push(fi);
- }
-
- return res;
- };
-
- return utils;
-
-}();
-
diff --git a/www/old/ResourceTree.js b/www/old/ResourceTree.js
deleted file mode 100644
index 37d292e9..00000000
--- a/www/old/ResourceTree.js
+++ /dev/null
@@ -1,428 +0,0 @@
-Ext.ns("PVE");
-
-PVE.DynTreeNode = Ext.extend(Ext.tree.TreeNode, {
-
- nodeSortFn: function(n1, n2) {
- if ((n1.groupbyid && n2.groupbyid) ||
- !(n1.groupbyid || n2.groupbyid)) {
-
- var tcmp;
-
- var v1 = n1.attributes.itype;
- var v2 = n2.attributes.itype;
- if ((tcmp = v1 > v2 ? 1 : (v1 < v2 ? -1 : 0)) != 0)
- return tcmp;
-
- // var v1 = n1.text.length;
- // var v2 = n2.text.length;
- // if ((tcmp = v1 > v2 ? 1 : (v1 < v2 ? -1 : 0)) != 0)
- // return tcmp;
-
- return n1.text > n2.text ? 1 : (n1.text < n2.text ? -1 : 0);
- } else if (n1.groupbyid) {
- return -1;
- } else if (n2.groupbyid) {
- return 1;
- }
- },
-
- applyDefaults: function(info) {
-
- var itype = info.itype;
-
- if (itype === 'node') {
- Ext.apply(info, {
- cls: 'x-tree-node-server',
- target: {
- xtype: 'pveNodeConfig',
- nodename: info.itemid
- }
- });
- } else if (itype === 'storage') {
- Ext.apply(info, {
- cls: 'x-tree-node-harddisk',
- target: {
- xtype: 'pveStorageBrowser',
- confdata: info.data
- }
- });
- } else if (itype === 'vm') {
- Ext.apply(info, {
- cls: 'x-tree-node-computer',
- target: {
- xtype: 'pveKVMConfig',
- confdata: info.data
- }
- });
- } else {
- Ext.apply(info, {
- cls: 'x-tree-node-collapsed',
- target: {
- title: "Resources",
- layout: 'fit',
- border: false,
- xtype: 'pveConfigPanel'
- }
- });
- }
- },
-
- // fast binary search
- findInsertIndex: function(n, start, end) {
- var diff = end - start;
-
- var mid = start + (diff>>1);
-
- if (diff <= 0)
- return start;
-
- var res = this.nodeSortFn(n, this.childNodes[mid]);
- if (res <= 0)
- return this.findInsertIndex(n, start, mid);
- else
- return this.findInsertIndex(n, mid + 1, end);
- },
-
- addSorted: function(n) {
- var cs = this.childNodes;
- var len = cs.length;
- var index = this.findInsertIndex(n, 0, len);
- var pos = cs[index]
- this.insertBefore(n, pos);
- return;
- },
-
- groupChild: function(info, groups, level) {
- var obj = this;
- var groupby = groups[level];
-
- var v = (groupby === 'itype') ? info.itype : info.data[groupby];
-
- var add_group = function(nodeinfo, gbid) {
- obj.applyDefaults(nodeinfo);
- nodeinfo.leaf = false;
- nodeinfo.groupbyid = gbid;
- nodeinfo.target.showSearch = true;
- var group = new PVE.DynTreeNode(nodeinfo);
- obj.addSorted(group);
- return group;
- };
-
- if (info.itype === groupby) {
-
- var group = this.findChild('groupbyid', info.itemid);
- if (group)
- return group;
-
- return add_group(info, info.itemid);
-
- } else if (v) {
- var group = this.findChild('groupbyid', v);
- if (!group) {
- var groupinfo = {
- itype: groupby,
- itemid: v,
- text: v
- };
- group = add_group(groupinfo, v);
- }
-
- return group.groupChild(info, groups, level +1);
-
- }
-
- this.applyDefaults(info);
-
- var child = new Ext.tree.TreeNode(info);
- this.addSorted(child);
- return child;
- },
-
- removeStaleGroups: function() {
- var cs = this.childNodes;
-
- for(var i = 0, len = cs.length; i < len; i++) {
- var child = cs[i];
- if (!child)
- continue;
-
- if (!child.hasChildNodes()) {
- if (child.groupbyid) {
- child.remove(true);
- }
- } else {
- child.removeStaleGroups();
- }
- };
- },
-
- constructor: function(config){
-
- PVE.DynTreeNode.superclass.constructor.call(this, Ext.apply(this, config));
- }
-
-});
-
-Ext.tree.TreePanel.nodeTypes.pvedyn = PVE.DynTreeNode;
-
-PVE.ResourceTree = Ext.extend(Ext.tree.TreePanel, {
-
- viewname: PVE.Utils.default_view,
-
- initView: function(viewname) {
- this.viewname = viewname;
- },
-
- setView: function(viewname) {
- var tree = this;
-
- tree.initView(viewname);
-
- var sm = this.getSelectionModel();
-
- var sel = sm.getSelectedNode();
-
- var oldid;
- if (sel) {
- oldid = sel.id;
- }
-
- // make sure we do not show the search panel - for performance reasons
- PVE.Workspace.setView(null);
-
- var rootnode = this.getRootNode();
-
- this.el.mask('Please wait...', 'x-mask-loading');
-
- rootnode.collapse(false, false);
- rootnode.removeAll(true);
-
- this.data = {};
-
- Ext.each(tree.storelist, function(store) {
- tree.updateTree(store, store.itype);
- });
-
- rootnode.expand(false, false);
- this.el.unmask();
-
- if (oldid && this.data[oldid]) {
- node = this.data[oldid].treenode;
- if (node) {
- this.selectNode(node);
- return;
- }
- }
-
- this.selectNode(rootnode);
-
- },
-
- updateTree: function(store, itype) {
-
- var tree = this;
-
- //console.log("update tree " + tree);
-
- var groups = [].concat(PVE.Utils.default_views[this.viewname].groups);
- var filterfn = PVE.Utils.default_views[this.viewname].filterfn;
-
- var rootnode = tree.getRootNode();
- if (!rootnode)
- throw "no rootnode in tree";
-
- // remove vanished or changed items
- for (var uid in tree.data) {
- var info = tree.data[uid];
- if (!info)
- continue;
- if (info.itype !== itype)
- continue;
-
- var item = store.getById(info.itemid);
- var changed = false;
-
- if (item) {
- // test if any grouping attributes changed
- for (var i = 0, len = groups.length; i < len; i++) {
- var attr = groups[i];
- if (attr === 'itype') {
- continue;
- } else if (item.data[attr] != info.data[attr]) {
- //console.log("changed");
- changed = true;
- break;
- }
- }
- // fixme: also test filterfn()?
- }
-
- if (!item || changed) {
- info.treenode.remove(); // fixme: destroy?
- tree.data[uid] = null;
- }
-
- }
-
- // add new items
- store.each(function(item) {
- var uid = itype + "." + item.id;
-
- var olddata = tree.data[uid];
-
- if (filterfn && !filterfn(item, itype)) {
- return;
- }
-
- if (!olddata) {
-
- var info = { data: {} };
-
- Ext.apply(info.data, item.data);
-
- Ext.apply(info, {
- itype: itype,
- id: uid,
- text: item.id,
- itemid: item.id,
- leaf: true
- });
-
- var child = rootnode.groupChild(info, groups, 0);
- if (child) {
- info.treenode = child;
- tree.data[uid] = info;
- }
-
- }
-
- });
-
- // this can cause unwanted ui updates
- // remove groups with no children
- // rootnode.removeStaleGroups();
-
- },
-
- selectNode: function(sel) {
-
- sel.ensureVisible();
- sel.select();
-
- //console.log("SELECT " + sel.attributes.target);
-
- var comp = { pveSelNode: sel };
- Ext.apply(comp, sel.attributes.target);
-
- PVE.Workspace.setView(comp);
- },
-
- initComponent: function() {
-
- var tree = this;
-
- var rootnode = new PVE.DynTreeNode({
- expanded: true,
- id: 'root',
- text: "Datacenter 1",
- cls: 'x-tree-node-collapsed',
- target: {
- xtype: 'pveClusterConfig',
- clusterid: 'default'
- }
- });
-
- tree.storelist = PVE.Cache.storelist;
-
- var groupdef = [];
- for (var viewname in PVE.Utils.default_views) {
- groupdef.push([viewname, PVE.Utils.default_views[viewname].text]);
- };
-
- var viewcombo = new Ext.form.ComboBox({
- width: 150,
- allowBlank: false,
- editable: false,
- store: groupdef,
- forceSelection: true,
- triggerAction: 'all',
- value: tree.viewname,
- listeners: {
- select: function(combo, record, index) {
- tree.setView(combo.getValue());
- }
- },
- getState: function() {
- return { view: this.getValue() };
- },
- applyState : function(state) {
- if (state && state.view) {
- this.setValue(state.view);
- tree.initView(state.view);
- }
- },
- stateEvents: [ 'select' ],
- stateful: true,
- stateId: 'pvetreeviewselection'
- });
-
- Ext.apply(this, {
- data: {},
- width: 250,
- title: 'Resource Tree',
- autoScroll: true,
- containerScroll: true,
- rootVisible: true,
- root: rootnode,
- tbar: [
- viewcombo,
- '->', {
- text: 'Filter',
- handler: function() {
- if (Ext.get('pvefilterwindow'))
- return;
-
- var w = new PVE.Filter({
- loadview: tree.viewname,
- listeners: {
- changeview: function(view, viewinfo) {
- PVE.Utils.changeViewDefaults(view, viewinfo);
- viewcombo.setValue(view);
- // fixme: save custom view
- viewcombo.saveState();
- tree.setView(view);
- }
- }
- });
- w.show();
- }
- }
- ],
- listeners: {
- click: function(n) {
- tree.selectNode(n);
- }
- }
- });
-
- tree.initView(tree.viewname);
-
- PVE.ResourceTree.superclass.initComponent.call(this);
-
- Ext.each(tree.storelist, function(store) {
- var update_store = function() {
- tree.updateTree(store, store.itype);
- };
-
- store.on('load', update_store);
-
- tree.on('destroy', function () {
- store.un('load', update_store);
- });
- });
-
- }
-
-});
-
-Ext.reg('pveResourceTree', PVE.ResourceTree);
diff --git a/www/old/StatusPanel.js b/www/old/StatusPanel.js
deleted file mode 100644
index 2d5ed6b6..00000000
--- a/www/old/StatusPanel.js
+++ /dev/null
@@ -1,210 +0,0 @@
-Ext.ns("PVE");
-
-PVE.LogViewer = Ext.extend(Ext.list.ListView, {
-
- initComponent : function() {
- var self = this;
-
- var fields = [
- { name: 'time', type : 'date', dateFormat: 'timestamp' },
- { name: 'pri', type: 'int' },
- { name: 'pid', type: 'int' },
- 'node', 'user', 'tag', 'msg' ];
-
- var logstore = new PVE.data.UpdateStore({
- itype: 'log',
- autoDestroy: true,
- url: self.url,
- fields: fields
- });
-
- Ext.apply(self, {
- store: logstore,
- startUpdate: function() { logstore.startUpdate(); },
- stopUpdate: function() { logstore.stopUpdate(); },
- columnSort: false,
- columns: [
- { header: "Time", width: 0.10, dataIndex: 'time',
- tpl: '{time:date("M d H:i:s")}'
- },
- { header: "Node", width: 0.05, dataIndex: 'node' },
- { header: "Tag", width: 0.05, dataIndex: 'tag' },
- { header: "PID", width: 0.05, dataIndex: 'pid' },
- { header: "User", width: 0.05, dataIndex: 'user' },
- { header: "Severity", width: 0.05, dataIndex: 'pri',
- tpl: '{[ PVE.Utils.render_serverity(values.pri) ]}'
- },
- { header: "Message", dataIndex: 'msg' }
- ]});
-
- var move_to_end = true;
-
- logstore.on("load", function() {
- if (move_to_end) {
- move_to_end = false;
- var count = logstore.getCount();
- if (count) {
- var item = self.getNode(count - 1);
- if (item)
- Ext.fly(item).scrollIntoView(self.innerBody.dom.parentNode);
- }
- }
- });
-
- PVE.LogViewer.superclass.initComponent.call(self);
- }
-});
-
-
-PVE.ClusterTasks = Ext.extend(Ext.grid.GridPanel, {
-
- initComponent : function() {
- var self = this;
-
- var fields = [
- { name: 'starttime', type : 'date', dateFormat: 'timestamp' },
- { name: 'endtime', type : 'date', dateFormat: 'timestamp' },
- { name: 'pid', type: 'int' },
- 'node', 'upid', 'user', 'status', 'type', 'id'];
-
- // fixme: use/define a storage which append new values, but
- // defer removing old values until a maximum numer of entries
- // is reached
- var taskstore = new PVE.data.UpdateStore({
- itype: 'tasks',
- autoDestroy: true,
- url: '/api2/json/cluster/tasks',
- idProperty: 'upid',
- fields: fields
- });
-
- Ext.apply(self, {
- store: taskstore,
- border: false,
- startUpdate: function() { taskstore.startUpdate(); },
- stopUpdate: function() { taskstore.stopUpdate(); },
- columnSort: false,
- autoExpandColumn: 'status',
- viewConfig: {
- getRowClass: function(record, index) {
- var status = record.get('status');
-
- if (status && status != 'OK')
- return "x-form-invalid";
- }
- },
- columns: [
- { header: "Start Time", dataIndex: 'starttime',
- width: 100,
- renderer: function(value) { return value.format("M d H:i:s"); }
- },
- { header: "End Time", dataIndex: 'endtime',
- width: 100,
- renderer: function(value, metaData, record) {
- if (record.data.pid) {
- metaData.css = "x-grid-row-loading";
- return "";
- }
- return value.format("M d H:i:s");
- }
- },
- { header: "Node", dataIndex: 'node',
- width: 100
- },
- { header: "User", dataIndex: 'user',
- width: 150
- },
- { id: 'desc', header: "Description", dataIndex: 'upid',
- width: 400,
- renderer: PVE.Utils.render_upid
- },
- { id: 'status', header: "Status", dataIndex: 'status',
- width: 200,
- renderer: function(value, metaData, record) {
- if (record.data.pid) {
- metaData.css = "x-grid-row-loading";
- return "";
- }
- if (value == 'OK')
- return 'OK';
- // metaData.attr = 'style="color:red;"';
- return "ERROR: " + value;
- }
- }
- ]});
-
- PVE.ClusterTasks.superclass.initComponent.call(self);
- }
-});
-
-PVE.StatusPanel = Ext.extend(Ext.Panel, {
-
- initComponent : function() {
- var self = this;
-
- self.title = "Realtime logfile viewer";
- self.layout = 'fit';
-
- var syslogview = new PVE.LogViewer({
- url: '/api2/json/nodes/localhost/syslog'
- });
- var cllogview = new PVE.LogViewer({
- url: '/api2/json/cluster/log',
- });
- var tasklist = new PVE.ClusterTasks();
-
- self.items = {
- xtype: 'tabpanel',
- border: false,
- tabPosition: 'bottom',
- activeTab: 0,
-
- defaults: { layout: 'fit' },
-
- items: [
- {
- title: 'Cluster Log',
- items: cllogview,
- listeners: {
- show: function() {
- cllogview.startUpdate();
- },
- hide: function() {
- cllogview.stopUpdate();
- }
- }
- },
- {
- title: 'System Log',
- items: syslogview,
- listeners: {
- show: function() {
- syslogview.startUpdate();
- },
- hide: function() {
- syslogview.stopUpdate();
- }
- }
- },
- {
- title: 'Task list',
- items: tasklist,
- listeners: {
- show: function() {
- tasklist.startUpdate();
- },
- hide: function() {
- tasklist.stopUpdate();
- }
- }
- }
- ]
- };
-
- PVE.StatusPanel.superclass.initComponent.call(self);
-
- }
-});
-
-Ext.reg('pveStatusPanel', PVE.StatusPanel);
-
diff --git a/www/old/StorageBrowser.js b/www/old/StorageBrowser.js
deleted file mode 100644
index 6fe63061..00000000
--- a/www/old/StorageBrowser.js
+++ /dev/null
@@ -1,363 +0,0 @@
-Ext.ns("PVE");
-
-PVE.StorageContent = Ext.extend(PVE.grid.StdGrid, {
-
- initComponent : function() {
- var self = this;
-
- var storeid = self.confdata.storage;
- var node = self.confdata.node || 'localhost';
-
- if (!storeid)
- throw "no storage id specified";
-
- var ct = self.content_type;
- var params = ct ? { content: ct } : null;
-
- var store = new Ext.data.JsonStore({
- url: "/api2/json/nodes/" + node + "/storage/" + storeid,
- autoDestory: true,
- root: 'data',
- restful: true, // use GET, not POST
- baseParams: params,
- fields: [ 'format', 'size', 'volid' ]
- });
-
- Ext.apply(self, {
- stateful: false,
- store: store,
- autoExpandColumn: 'volid',
- tbar: [
- '->',
- {
- xtype: 'form',
- url: "/api2/htmljs/nodes/" + node + "/upload",
- baseParams: { storage: storeid },
- fileUpload: true,
- height: 22,
- border: false,
- baseCls: 'plain',
- items: {
- xtype: 'fileuploadfield',
- name: 'filename',
- buttonOnly: true,
- buttonText: 'Upload',
- listeners: {
- fileselected: function(field, v) {
- self.el.mask('Please wait...', 'x-mask-loading');
- var form = field.ownerCt.getForm();
- //alert("selected " + v);
- form.submit({
- failure: function(f, resp){
- self.el.unmask();
- f.reset();
- var msg = "Please try again";
- if (resp.result && resp.result.message) {
- msg = resp.result.message;
- }
- Ext.MessageBox.alert('Failure', "Upload failed. " + msg);
- },
- success: function(f, resp){
- self.el.unmask();
- f.reset();
- Ext.MessageBox.alert('Failure', "Upload succesful");
- }
- });
- }
- }
- }
- }
- ],
- columns: [
- {
- id: 'volid',
- header: 'Name',
- dataIndex: 'volid'
- },
- {
- header: 'Format',
- width: 100,
- dataIndex: 'format'
- },
- {
- header: 'Size',
- width: 100,
- renderer: PVE.Utils.format_size,
- dataIndex: 'size'
- }
- ],
-
- listeners: {
- show: function() {
- store.load();
- }
- },
-
- sm: new Ext.grid.RowSelectionModel({singleSelect:true})
-
- });
-
- PVE.StorageContent.superclass.initComponent.call(self);
- }
-});
-
-Ext.reg('pveStorageContent', PVE.StorageContent);
-
-PVE.StorageStatus = Ext.extend(PVE.grid.ObjectView, {
-
- initComponent : function() {
- var self = this;
-
- var storeid = self.confdata.storage;
- var node = self.confdata.node || 'localhost';
-
- if (!storeid)
- throw "no storage id specified";
-
- var store = new PVE.data.ObjectStore({
- url: "/api2/json/nodes/" + node + "/storage/",
- baseParams: { storage: storeid },
- method: 'GET',
- restful: true, // use GET, not POST
- autoDestroy: true,
- rows: {
- total: { header: 'Capacity' },
- used: { header: 'Used' },
- free: { header: 'Free' }
- }
- });
-
- store.load();
-
- Ext.apply(self, {
- layout: 'fit',
- tbar: [
- "
Status", '->',
- {
- text: "Refresh",
- handler: function() { store.load(); }
- }
- ],
- store: store
- });
-
- PVE.StorageStatus.superclass.initComponent.call(self);
- }
-});
-
-PVE.StorageSummary = Ext.extend(Ext.Panel, {
-
- initComponent : function() {
- var self = this;
-
- var storeid = self.confdata.storage;
-
- var update_config = function() {
- self.store.load();
- };
-
- Ext.apply(self, {
- layout: 'hbox',
- autoScroll: true,
-
- layoutConfig: {
- defaultMargins: "10 10 10 0",
- align: 'stretchmax'
- },
-
- items: [
- {
- xtype: 'pveObjectView',
- store: self.store,
- margins: "10 10 10 10",
- height: 200,
- width: 300,
- tbar: [
- "Configuration", "->",
- {
- text: "Edit",
- handler: function() {
-
- var form = new PVE.form.ModifyDirStorage({
- confdata: self.confdata
- });
- var win = new PVE.window.ModalDialog({
- title: "Modify Directory Storage",
- items: form,
- width: 400,
- height: 300,
- buttons: [
- {
- text: 'OK',
- handler: function(){
- form.submitHandler({
- success: function() {
- win.close();
- update_config();
- }
- });
- }
- },{
- text: 'Cancel',
- handler: function(){
- win.close();
- update_config();
- }
- }
- ]
- });
-
- win.show();
- }
- }
- ]
- //flex: 1,
- },
- new PVE.StorageStatus ({
- confdata: self.confdata,
- height: 200,
- width: 300
- })
- ]
- });
-
- PVE.StorageSummary.superclass.initComponent.call(self);
- }
-});
-
-Ext.reg('pveStorageSummary', PVE.StorageSummary);
-
-PVE.StorageBrowser = Ext.extend(PVE.ConfigPanel, {
-
- initComponent : function() {
- var self = this;
-
- var node = self.confdata.node;
- var storeid = self.confdata.storage;
- var shared = self.confdata.shared;
-
- if (!storeid)
- throw "no storage ID specified";
-
- if (!shared && !node)
- throw "no node specified";
-
- var title = "Storage '" + storeid + "'";
-
- if (!shared)
- title = title + " on node '" + node + "'";
-
- var cond_view_comp = function(id, enable) {
-
- var tabs = self.get(0);
- var comp = self.findById(id);
- if (!comp)
- return;
-
- if (enable) {
- tabs.unhideTabStripItem(id);
- } else {
- var active = tabs.getActiveTab();
- tabs.hideTabStripItem(id);
- if (active) {
- active = Ext.isObject(active) ? active.getId() : active;
- if (active === id) {
- tabs.setActiveTab(0);
- }
- }
- }
- };
-
- var store = new PVE.data.ObjectStore({
- url: "/api2/json/storage/" + storeid,
- method: 'GET',
- autoDestory: true,
- rows: {
- type: { header: 'Storage Type', renderer: PVE.Utils.format_storage_type },
- path: { header: 'Path' },
- shared: { header: 'Shared', renderer: PVE.Utils.format_boolean },
- disable: { header: 'Disabled', renderer: PVE.Utils.format_boolean },
- content: { header: 'Content', renderer: PVE.Utils.format_content_types }
- }
- });
-
- var set_visible_tabs = function() {
- var rec = store.getById('content');
- if (!rec)
- return;
-
- var ct = rec.data.value || '';
- var cthash = {};
- Ext.each(ct.split(','), function(item) { cthash[item] = 1 });
-
- cond_view_comp('images', cthash.images);
- cond_view_comp('iso', cthash.iso);
- cond_view_comp('vztmpl', cthash.vztmpl);
- cond_view_comp('backup', cthash.backup);
- };
-
- store.on('load', set_visible_tabs);
-
- Ext.apply(self, {
- title: title,
- layout: 'fit',
- border: false,
-
- defaults: {
- border: false
- },
- items: [
- {
- title: 'Summary',
- xtype: 'pveStorageSummary',
- listeners: {
- show: function() {
- store.load();
- }
- },
- confdata: self.confdata,
- store: store,
- id: 'status'
- },
- {
- xtype: 'pveStorageContent',
- confdata: self.confdata,
- content_type: 'images',
- title: 'Images',
- id: 'images'
- },
- {
- xtype: 'pveStorageContent',
- confdata: self.confdata,
- content_type: 'iso',
- title: 'ISO',
- id: 'iso'
- },
- {
- xtype: 'pveStorageContent',
- confdata: self.confdata,
- content_type: 'vztmpl',
- title: 'Templates',
- id: 'vztmpl'
- },
- {
- xtype: 'pveStorageContent',
- confdata: self.confdata,
- content_type: 'backup',
- title: 'Backups',
- id: 'backup'
- },
- {
- title: 'Permissions',
- id: 'permissions',
- html: 'services '
- }
- ]
- });
-
- PVE.StorageBrowser.superclass.initComponent.call(self);
- }
-});
-
-Ext.reg('pveStorageBrowser', PVE.StorageBrowser);
-
diff --git a/www/old/Workspace.js b/www/old/Workspace.js
deleted file mode 100644
index 7f268acd..00000000
--- a/www/old/Workspace.js
+++ /dev/null
@@ -1,136 +0,0 @@
-Ext.ns("PVE");
-
-PVE.Workspace = function() {
-
- var viewport, content, login;
-
- var defaultView = {
- //xtype: "pveTestPanel",
- title: 'Nothing selected',
- border: false,
- region:'center'
- };
-
- var buildDefaultView = function() {
-
- PVE.Cache.startUpdate();
-
- return new Ext.Panel({
- layout: 'border',
- border: false,
- //frame: true,
- tbar: [
- '
',
- '->',
- {
- text: 'Logout',
- handler: PVE.Workspace.showLogin
- }],
- items: [
- {
- layout: 'fit',
- region: 'center',
- margins:'5 0 0 0',
- items: defaultView
- },
- {
- xtype: 'pveResourceTree',
- region: 'west',
- margins:'5 0 0 0',
- split:true,
- collapsible: true
- },
- {
- xtype: 'pveStatusPanel',
- region:'south',
- margins:'0 0 0 0',
- height: 200,
- collapsible: true,
- split:true
- }
- ]
- });
- };
-
- var buildContent = function() {
-
- var href = window.location.href;
- var hrefcomp = href.split('?', 2);
- if (hrefcomp.length == 2) {
- var param = Ext.urlDecode(hrefcomp[1]);
- if (param.console !== undefined) {
- if (param.console == "kvm") {
- content = new PVE.Console({
- vmid: param.vmid,
- node: param.node,
- toplevel: true
- });
- } else if (param.console == "shell") {
- content = new PVE.Shell({
- node: param.node,
- toplevel: true
- });
- }
- } else {
- content = buildDefaultView();
- }
- } else {
- content = buildDefaultView();
- }
-
- viewport.add(content);
- viewport.doLayout();
- content.show(); // fire 'show' for PVE.Console
- };
-
- var workspace = {
-
- init: function() {
-
- Ext.QuickTips.init();
-
- Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
-
- viewport = new Ext.Viewport({ layout : 'fit' });
-
- if (!PVE.Utils.authOK()) {
- PVE.Workspace.showLogin();
- } else {
- buildContent();
- }
- },
-
- setView: function(comp) {
-
- if (!content) return;
-
- if (!comp) comp = defaultView;
-
- var cont = content.find("region", 'center')[0];
- cont.removeAll(true);
- cont.add(comp);
- content.doLayout();
- },
-
- showLogin: function() {
- PVE.Utils.authClear();
-
- if (!login) {
- login = new PVE.window.LoginWindow({
- handler: function() {
- if (!content)
- buildContent();
- login = null;
- }
- });
- }
- login.show();
- },
-
- dummy: "ignore me"
- };
-
- return workspace;
-
-}();
-
diff --git a/www/old/data/ObjectReader.js b/www/old/data/ObjectReader.js
deleted file mode 100644
index 18a6b7c9..00000000
--- a/www/old/data/ObjectReader.js
+++ /dev/null
@@ -1,57 +0,0 @@
-Ext.ns("PVE.data");
-
-/* A reader to store a single JSON Object (hash) into a storage.
- * Also accepts an array containing a single hash.
- * So it can read:
- *
- * example1: { data: "xyz" }
- * example2: [ { data: "xyz" } ]
- */
-PVE.data.ObjectReader = Ext.extend(Ext.data.JsonReader, {
-
- constructor: function(config){
- PVE.data.ObjectReader.superclass.constructor.call(this, Ext.apply(config, {
- root: 'data',
- idProperty: 'name',
- fields: [
- {name: 'name', type: 'text'},
- {name: 'value', type: 'text'}
- ]
- }));
- this.rows = config.rows;
- },
-
- extractData : function(root, returnRecords) {
-
- if (returnRecords !== true)
- throw "not implemented";
-
- if (Ext.isArray(root)) {
- if (root.length == 1)
- root = root[0];
- else
- root = {};
- }
-
- var Record = this.recordType;
- var rs = [];
- var rows = this.rows;
-
- if (rows) {
- Ext.iterate(rows, function(key, rowdef) {
- var value = root[key];
- if (Ext.isDefined(value)) {
- var rec = new Record({ name: key, value: value }, key);
- rs.push(rec);
- }
- });
- } else {
- Ext.iterate(root, function(key, value) {
- var rec = new Record({ name: key, value: value }, key);
- rs.push(rec);
- });
- }
-
- return rs;
- }
-});
diff --git a/www/old/data/ObjectStore.js b/www/old/data/ObjectStore.js
deleted file mode 100644
index 34d1abd9..00000000
--- a/www/old/data/ObjectStore.js
+++ /dev/null
@@ -1,11 +0,0 @@
-Ext.ns("PVE.data");
-
-// a store for simple JSON Object (hash)
-
-PVE.data.ObjectStore = Ext.extend(Ext.data.Store, {
- constructor: function(config) {
- PVE.data.ObjectStore.superclass.constructor.call(this, Ext.apply(config, {
- reader: new PVE.data.ObjectReader(config)
- }));
- }
-});
diff --git a/www/old/data/SearchStore.js b/www/old/data/SearchStore.js
deleted file mode 100644
index 52194cd4..00000000
--- a/www/old/data/SearchStore.js
+++ /dev/null
@@ -1,266 +0,0 @@
-Ext.ns("PVE.data");
-
-PVE.data.SearchStore = Ext.extend(Ext.data.Store, {
-
- constructor: function(config) {
- var self = this;
-
- config = config || {};
-
- if (!config.storelist)
- throw "no storage list specified";
-
- var text_filter = '';
-
- var text_filter_fn = function(item) {
- if (text_filter) {
- var match = false;
- Ext.each(['name', 'storage', 'node'], function(field) {
- var v = item.data[field];
- if (v !== undefined) {
- v = v.toLowerCase();
- if (v.indexOf(text_filter) >= 0) {
- match = true;
- return false;
- }
- }
- });
- return !match;
- }
- return false;
- };
-
- var item_filter_fn;
-
- var group_filter = [];
-
- var filterFn = function(item, itype) {
-
- if (item_filter_fn && !item_filter_fn(item, itype)) {
- return true;
- }
-
- for (var i = 0, len = group_filter.length; i < len; i++) {
- var filter = group_filter[i];
- var field = filter.field;
- if (field === 'itype') {
- if (itype != filter.value)
- return true;
- } else if (item.data[field] != filter.value)
- return true;
- }
-
- return text_filter_fn(item);
- };
-
- var load_info = {};
-
- var task_search = null;
-
- var run_search_task = function(delay) {
-
- if (!task_search) {
-
- task_search = new Ext.util.DelayedTask(function() {
-
- console.log("text filter " + text_filter);
-
- self.suspendEvents();
-
- self.removeAll();
-
- Ext.each(config.storelist, function(store) {
- self.initStore(store, store.itype);
- });
-
- self.applySort();
-
- self.resumeEvents();
-
- self.fireEvent('datachanged', self);
-
- self.fireEvent('load', self);
-
- });
- }
-
- task_search.delay(delay);
- };
-
- var basefields = PVE.Utils.base_fields;
-
- var myfields = ['objectid', 'itype', 'itemid'].concat(basefields);;
-
- var reader = new Ext.data.ArrayReader({
- fields: myfields,
- idIndex: 0
- });
-
- Ext.apply(config, {
-
- reader: reader,
-
- sortInfo: {
- field: 'itype',
- direction: 'DESC'
- },
-
- getTextFilter: function() {
- return text_filter;
- },
-
- setTextFilter: function(text) {
-
- if (text_filter === text)
- return;
-
- text_filter = text.toLowerCase();
-
- run_search_task(200);
- },
-
- setGroupFilter: function(viewname, filterinfo) {
-
- item_filter_fn = PVE.Utils.default_views[viewname].filterfn;
-
- group_filter = filterinfo;
-
- run_search_task(10);
- },
-
- createRec: function(item, uid, itype) {
-
- var info = Ext.apply({}, item.data);
-
- Ext.apply(info, {
- itype: itype,
- id: uid,
- text: item.id,
- itemid: item.id,
- leaf: true
- });
-
- var rec = new self.reader.recordType(info, uid);
-
- return rec;
- },
-
- initStore: function(basestore, itype) {
-
- console.log("basestore init " + itype);
-
- load_info[itype] = true;
-
- basestore.each(function(item) {
-
- if (filterFn(item, itype))
- return true;
-
- var uid = itype + "." + item.id;
-
- //console.log("add item " + uid);
-
- var rec = self.createRec(item, uid, itype);
- self.add(rec);
- });
- },
-
- updateStore: function(basestore, itype) {
-
- //console.log("basestore load " + itype);
-
- if (!load_info[itype]) {
-
- //console.log("basestore first load " + itype);
-
- self.suspendEvents();
-
- self.initStore(basestore, itype);
-
- self.applySort();
-
- self.resumeEvents();
-
- self.fireEvent('datachanged', self);
-
- } else {
-
- // update tree
- //console.log("basestore update start");
-
- self.suspendEvents();
-
- // remove vanished or changed items
- var rmlist = [];
- self.each(function(item) {
-
- if (item.data.itype !== itype)
- return true;
-
- var newitem = basestore.getById(item.data.itemid);
-
- if (!newitem)
- rmlist.push(item);
- });
-
- if (rmlist.length)
- self.remove(rmlist); //fixme:
-
- var addlist = [];
- basestore.each(function(newitem) {
-
- if (filterFn(newitem, itype))
- return true;
-
- var uid = itype + "." + newitem.id;
-
- var item = self.getById(uid);
- if (!item) {
- //console.log("add item " + uid);
- var rec = self.createRec(newitem, uid, itype);
- addlist.push(rec);
- } else {
- var changes = false;
- for (var i = 0, len = basefields.length; i < len; i++) {
- field = basefields[i];
- if (field != 'id' && item[field] != newitem.data[field]) {
- item.beginEdit()
- item.set(field,newitem.data[field]);
- changes = true;
- //item[field] = newitem.data[field];
- }
- };
- if (changes)
- item.commit(true);
- }
- });
-
- if (addlist.length)
- self.add(addlist);
-
- self.applySort();
-
- self.resumeEvents();
-
- self.fireEvent('datachanged', self);
-
- //console.log("basestore update end " + itype);
- }
- }
- });
-
- PVE.data.SearchStore.superclass.constructor.call(self, config);
-
- Ext.each(config.storelist, function(store) {
- var update_store = function() {
- self.updateStore(store, store.itype);
- };
-
- store.on('load', update_store);
-
- self.on('destroy', function () {
- store.un('load', update_store);
- });
- });
- }
-});
diff --git a/www/old/data/UpdateStore.js b/www/old/data/UpdateStore.js
deleted file mode 100644
index b273f9a1..00000000
--- a/www/old/data/UpdateStore.js
+++ /dev/null
@@ -1,99 +0,0 @@
-Ext.ns("PVE.data");
-
-// Serialize load (avoid too many parallel connections)
-PVE.data.UpdateQueue = function() {
-
- var queue = [];
- var queue_idx = {};
-
- var idle = true;
-
- var start_update = function() {
- if (!idle)
- return;
- var store = queue.shift();
- if (!store)
- return;
-
- queue_idx[store.itype] = null;
-
- idle = false;
- store.load({
- callback: function() {
- idle = true;
- start_update();
- }
- });
- };
-
- return {
- queue: function(store) {
- if (queue_idx[store.itype])
- return;
- queue_idx[store.itype] = store;
- queue.push(store);
- start_update();
- }
- };
-}();
-
-PVE.data.UpdateStore = Ext.extend(Ext.data.JsonStore, {
-
- constructor: function(config) {
- var self = this;
-
- var load_task;
-
- var run_load_task = function(delay) {
- if (!load_task) {
- load_task = new Ext.util.DelayedTask(function() {
- PVE.data.UpdateQueue.queue(self);
- });
- }
-
- load_task.delay(delay === undefined ? self.interval : delay);
- };
-
- config = config || {};
-
- if (!config.interval)
- config.interval = 3000;
-
- if (!config.itype)
- throw "no itype specifued";
-
- Ext.apply(config, {
- root: 'data',
-
- startUpdate: function() {
- run_load_task(10);
- },
-
- stopUpdate: function() {
- if (!load_task)
- return;
-
- load_task.cancel();
- },
-
- listeners: {
- beforeload: function() {
- if (!PVE.Utils.authOK()) {
- run_load_task(1000);
- return false;
- }
- },
- load: function() {
- run_load_task();
- },
- exception: function() {
- // fixme: what to do here ?
- //console.log("got load expection");
- run_load_task();
- }
- }
- });
-
- PVE.data.UpdateStore.superclass.constructor.call(self, config);
- }
-});
diff --git a/www/old/form/ModifyDirStorage.js b/www/old/form/ModifyDirStorage.js
deleted file mode 100644
index 798bc1ce..00000000
--- a/www/old/form/ModifyDirStorage.js
+++ /dev/null
@@ -1,88 +0,0 @@
-Ext.ns("PVE.form");
-
-PVE.form.ModifyDirStorage = Ext.extend(PVE.form.StdForm, {
-
- initComponent : function() {
- var self = this;
-
- var storeid = self.confdata.storage;
-
- var cts = [['images', 'Images']];
-
- if (storeid === 'local') {
- cts.push(['vztmpl', 'OpenVZ Templates']);
- cts.push(['iso', 'ISO']);
- } else {
- cts.push(['backup', 'Backup']);
- }
-
- var items = [
- {
- xtype: 'hidden',
- name: 'digest'
- },
- {
- xtype: 'textfield',
- fieldLabel: 'Storage name',
- name: 'storage',
- value: storeid,
- disabled: true
- },
- {
- xtype: 'textfield',
- fieldLabel: 'Directory',
- name: 'path',
- disabled: true
- },
- {
- xtype: 'checkbox',
- fieldLabel: 'Disabled',
- inputValue: 1,
- name: 'disable'
- },
- {
- xtype: 'checkbox',
- fieldLabel: 'Shared',
- inputValue: 1,
- name: 'shared'
- },
- {
- xtype: storeid === 'local' ? 'multiselect' : 'combo',
- forceSelection: true,
- editable: false,
- triggerAction: 'all',
- fieldLabel: 'Content',
- name: storeid === 'local' ? 'content' : 'hiddencontent',
- mode: 'local',
- style : 'margin-bottom:10px',// avoid scrolbars with Firefox
- width: 150,
- height: 'auto',
- store: cts,
- hiddenName: 'content'
- }
- ];
-
- // NOTE: If subclassing FormPanel, any configuration options for
- // the BasicForm must be applied to initialConfig
- Ext.apply(self, Ext.apply(self.initialConfig, {
- url: "/api2/extjs/storage/" + storeid,
- method: 'PUT',
- items: {
- layout: 'form',
- defaults: { anchor: '-20' },
- border: false,
- items: items
- }
- }));
-
- PVE.form.ModifyDirStorage.superclass.initComponent.call(self);
-
- var form = self.getForm();
-
- form.load({
- url: "/api2/extjs/storage/" + storeid,
- method: 'GET'
- });
-
- }
-});
diff --git a/www/old/form/StdForm.js b/www/old/form/StdForm.js
deleted file mode 100644
index 002b9350..00000000
--- a/www/old/form/StdForm.js
+++ /dev/null
@@ -1,70 +0,0 @@
-Ext.ns("PVE.form");
-
-PVE.form.StdForm = Ext.extend(Ext.FormPanel, {
-
- initComponent : function() {
- var self = this;
-
- // NOTE: If subclassing FormPanel, any configuration options for
- // the BasicForm must be applied to initialConfig
- Ext.apply(self, Ext.apply(self.initialConfig, {
- bodyStyle: 'padding:5px',
- autoScroll: true,
-
- submitHandler: function(options) {
-
- var form = self.getForm();
-
- // NOTE: we add parameter for unset checkbox (because html
- // does not sent them by default)
- var params = {};
- form.items.each(function(f) {
- n = f.getName();
- val = f.getValue();
- xt = f.getXType();
-
- if (xt === 'checkbox' && !val) {
- params[n] = 0;
- }
- });
-
- if(form.isValid()){
- self.el.mask('Please wait...', 'x-mask-loading');
-
- form.submit({
- params: params,
- failure: function(f, resp){
- self.el.unmask();
- if (Ext.isFunction(options.failure)) {
- options.failure();
- } else {
- var msg = "Please try again";
- if (resp.result && resp.result.message) {
- msg = resp.result.message;
- }
- Ext.MessageBox.alert('Failure', msg);
- }
- },
- success: function(f, resp){
- self.el.unmask();
- if (Ext.isFunction(options.success)) {
- options.success();
- } else {
- Ext.MessageBox.alert('Success', "Submit successful");
- }
- }
- });
- } else {
- if (Ext.isFunction(options.failure)) {
- options.failure();
- } else {
- Ext.MessageBox.alert('Failure', "Verify failed");
- }
- }
- }
- }));
-
- PVE.form.StdForm.superclass.initComponent.call(self);
- }
-});
-
diff --git a/www/old/grid/ObjectView.js b/www/old/grid/ObjectView.js
deleted file mode 100644
index e4bdac45..00000000
--- a/www/old/grid/ObjectView.js
+++ /dev/null
@@ -1,86 +0,0 @@
-Ext.ns("PVE.grid");
-
-// a grid which displays 'load' exception messages inline
-PVE.grid.StdGrid = Ext.extend(Ext.grid.GridPanel, {
-
- initComponent : function() {
- var self = this;
-
- if (!self.store)
- throw "no store specified";
-
- PVE.grid.StdGrid.superclass.initComponent.call(self);
-
- var display_exception = function(t, type, action, options, response, arg) {
- var msg;
- self.store.removeAll();
- if (type == 'response') {
- msg = "Error " + response.status + ": " + response.statusText;
- } else {
- msg = "Data load error";
- }
- self.getView().mainBody.update('' + msg + '
');
- };
-
- self.store.on('exception', display_exception);
- self.on('beforedestroy', function() { self.store.un('exception', display_exception) });
- }
-});
-
-// a special grid to display PVE.data.ObjectStore
-
-PVE.grid.ObjectView = Ext.extend(PVE.grid.StdGrid, {
-
- initComponent : function() {
- var self = this;
-
- if (!self.store)
- throw "no store specified";
-
- var rows = self.store.rows || {};
-
- var render_key = function(key) {
- var rowdef = rows[key] || {};
- return rowdef.header|| key;
- };
-
- var render_value = function(value, metaData, record, rowIndex, colIndex, store) {
- var key = record.data.name;
- var rowdef = rows[key] || {};
-
- var renderer = rowdef.renderer;
- if (renderer)
- return renderer(value, metaData, record, rowIndex, colIndex, store);
-
- return value;
- };
-
- Ext.apply(self, {
- hideHeaders: true,
- stateful: false,
- enableHdMenu: false,
- autoExpandColumn: 'value',
- columns: [
- {
- header: 'Name',
- width: self.cwidth1,
- dataIndex: 'name',
- sortable: false,
- renderer: render_key
- },{
- id: 'value',
- header: 'Value',
- dataIndex: 'value',
- sortable: false,
- renderer: render_value
- }
- ],
- sm: new Ext.grid.RowSelectionModel({singleSelect:true})
- });
-
- PVE.grid.ObjectView.superclass.initComponent.call(self);
- }
-});
-
-Ext.reg('pveObjectView', PVE.grid.ObjectView);
-
diff --git a/www/old/index.pl b/www/old/index.pl
deleted file mode 100644
index ea733274..00000000
--- a/www/old/index.pl
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use mod_perl2 '1.9922';
-use Encode;
-use CGI;
-use PVE::AccessControl;
-use PVE::REST;
-
-sub send_output {
- my ($r, $data) = @_;
-
- my $encdata = encode('UTF-8', $data);
- $r->no_cache (1);
- my $x = length ($encdata);
- $r->content_type ("text/html;charset=UTF-8");
- $r->headers_out->set ("Content-length", "$x");
- $r->headers_out->set ("Pragma", "no-cache");
-
- $r->print ($encdata);
-}
-
-# NOTE: Requests to this page are not authenticated
-# so we must be very careful here
-
-my $r = Apache2::RequestUtil->request();
-
-my $token = 'null';
-if (my $cookie = $r->headers_in->{Cookie}) {
- my $ticket = PVE::REST::extract_auth_cookie($cookie);
- if (PVE::AccessControl::verify_ticket($ticket, 1)) {
- $token = PVE::AccessControl::assemble_csrf_prevention_token($ticket);
- }
-}
-
-my $cgi = CGI->new($r);
-my %args = $cgi->Vars();
-
-my $console = $args{console};
-
-my $title = "Proxmox Virtual Environment";
-if (defined($console)) {
- if ($console eq 'kvm' && $args{vmid}) {
- my $name = "VM $args{vmid}"; # fixme: use real VM name
- $title = "$name - Proxmox Console";
- } elsif ($console eq 'shell' && $args{node}) {
- $title = "node $args{node} - Proxmox Console";
- }
-}
-
-my $jssrc = <<_EOJS;
-PVECSRFPreventionToken = '$token';
-Ext.onReady(PVE.Workspace.init, PVE.Workspace);
-_EOJS
-
-
-my $page = <<_EOD;
-
-
-
-
- $title
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_EOD
-
-send_output ($r, $page);
-exit (0);
diff --git a/www/old/startup.pl b/www/old/startup.pl
deleted file mode 100755
index 736eb5fb..00000000
--- a/www/old/startup.pl
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-use PVE::SafeSyslog;
-
-use ModPerl::Util (); #for CORE::GLOBAL::exit
-
-use Apache2::RequestRec ();
-use Apache2::RequestIO ();
-use Apache2::RequestUtil ();
-use Apache2::Access;
-use Apache2::Response;
-use Apache2::Util;
-
-use Apache2::ServerUtil ();
-use Apache2::Connection ();
-use Apache2::Log ();
-
-use APR::Table ();
-
-use ModPerl::Registry ();
-
-use Apache2::Const -compile => ':common';
-use APR::Const -compile => ':common';
-
-initlog ('proxwww', 'daemon');
-
-use PVE::pvecfg;
-use PVE::REST;
-use PVE::Cluster;
-use PVE::INotify;
-use PVE::RPCEnvironment;
-
-sub childinit {
- syslog ('info', "Starting new child $$");
- PVE::INotify::inotify_init();
- PVE::RPCEnvironment->init('pub');
-
- PVE::Config::inotify_init();
-}
-
-sub childexit {
- syslog ('info', "Finish child $$");
-}
-
-my $s = Apache2::ServerUtil->server;
-$s->push_handlers(PerlChildInitHandler => \&childinit);
-$s->push_handlers(PerlChildExitHandler => \&childexit);
-
-1;
-
diff --git a/www/old/util/base64.js b/www/old/util/base64.js
deleted file mode 100644
index 2535b6da..00000000
--- a/www/old/util/base64.js
+++ /dev/null
@@ -1,52 +0,0 @@
-
-// code from ExtJs Forum
-
-Ext.util.base64 = {
-
- base64s : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
-
- encode: function(decStr){
- if (typeof btoa === 'function') {
- return btoa(decStr);
- }
- var base64s = this.base64s;
- var bits;
- var dual;
- var i = 0;
- var encOut = "";
- while(decStr.length >= i + 3){
- bits = (decStr.charCodeAt(i++) & 0xff) <<16 | (decStr.charCodeAt(i++) & 0xff) <<8 | decStr.charCodeAt(i++) & 0xff;
- encOut += base64s.charAt((bits & 0x00fc0000) >>18) + base64s.charAt((bits & 0x0003f000) >>12) + base64s.charAt((bits & 0x00000fc0) >> 6) + base64s.charAt((bits & 0x0000003f));
- }
- if(decStr.length -i > 0 && decStr.length -i < 3){
- dual = Boolean(decStr.length -i -1);
- bits = ((decStr.charCodeAt(i++) & 0xff) <<16) | (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
- encOut += base64s.charAt((bits & 0x00fc0000) >>18) + base64s.charAt((bits & 0x0003f000) >>12) + (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') + '=';
- }
- return(encOut);
- },
-
- decode: function(encStr){
- if (typeof atob === 'function') {
- return atob(encStr);
- }
- var base64s = this.base64s;
- var bits;
- var decOut = "";
- var i = 0;
- for(; i>16, (bits & 0xff00) >>8, bits & 0xff);
- }
- if(encStr.charCodeAt(i -2) == 61){
- return(decOut.substring(0, decOut.length -2));
- }
- else if(encStr.charCodeAt(i -1) == 61){
- return(decOut.substring(0, decOut.length -1));
- }
- else {
- return(decOut);
- }
- }
-
-};
diff --git a/www/old/window/LoginWindow.js b/www/old/window/LoginWindow.js
deleted file mode 100644
index 20172d5c..00000000
--- a/www/old/window/LoginWindow.js
+++ /dev/null
@@ -1,168 +0,0 @@
-Ext.ns("PVE.window");
-
-PVE.window.LoginWindow = Ext.extend(Ext.Window, {
-
- onLogon: function() {
- var self = this;
-
- var form = self.get(0).getForm();
-
- if(form.isValid()){
- self.el.mask('Please wait...', 'x-mask-loading');
-
- form.submit({
- failure: function(f, resp){
- self.el.unmask();
- Ext.MessageBox.alert('Failure', "Login failed. Please try again", function() {
- var uf = form.findField('username');
- uf.focus(true);
- });
- },
- success: function(f, resp){
- self.el.unmask();
-
- if (resp.result && resp.result.data)
- PVECSRFPreventionToken = resp.result.data.CSRFPreventionToken;
-
- var handler = self.handler || Ext.emptyFn;
- handler.call(self);
- self.close();
- }
- });
- }
- },
-
- initComponent: function() {
- var self = this;
-
- var realmstore = new Ext.data.JsonStore({
- url: "/api2/json/access/domains",
- autoDestory: true,
- root: 'data',
- restful: true, // use GET, not POST
- fields: [ 'realm', 'comment', 'default' ],
- idProperty: 'realm',
- sortInfo: { field: 'realm', order: 'DESC' }
- });
-
- var combo = new Ext.form.ComboBox({
- fieldLabel: 'Realm',
- hiddenName: 'realm',
- store: realmstore,
- mode: 'local',
- allowBlank: false,
- forceSelection: true,
- autoSelect: false,
- triggerAction: 'all',
- valueField: 'realm',
- displayField: 'comment',
- getState: function() {
- return { value: this.getValue() };
- },
- applyState : function(state) {
- if (state && state.value) {
- this.setValue(state.value);
- }
- },
- stateEvents: [ 'select' ],
- stateful: true,
- stateId: 'pveloginrealm'
- });
-
- realmstore.load({
- callback: function(r, o, success) {
- if (success) {
- var def = combo.getValue();
- if (!def) {
- if (r[0] && r[0].data)
- def = r[0].data.realm;
- Ext.each(r, function(record) {
- if (record.data && record.data["default"])
- def = record.data.realm;
- });
- }
- if (def)
- combo.setValue(def)
- }
- }
- });
-
-
- Ext.apply(self, {
- width: 400,
- height: 160,
- modal: true,
- border: false,
- draggable: false,
- closable: false,
- resizable: false,
- layout: 'fit',
- title: 'PVE Manager Login',
-
- items: [{
- xtype: 'form',
- frame: true,
- url: '/api2/extjs/access/ticket',
-
- labelWidth: 70,
- labelAlign : 'right',
-
- defaults: {
- anchor: '-5',
- allowBlank: false
- },
-
- items: [
- {
- xtype: 'textfield',
- fieldLabel: 'User name',
- name: 'username',
- blankText:"Enter your user name",
- listeners: {
- render: function(f) {
- f.focus(true, 500);
- },
- specialkey: function(f, e) {
- var form = f.findParentByType("form").getForm();
- if (e.getKey() === e.ENTER) {
- var pf = form.findField('password');
- if (pf.getValue()) {
- self.onLogon();
- } else {
- pf.focus(false);
- }
- }
- }
- }
- },
- {
- xtype: 'textfield',
- inputType: 'password',
- fieldLabel: 'Password',
- name: 'password',
- blankText:"Enter your password",
- listeners: {
- specialkey: function(field, e) {
- if (e.getKey() === e.ENTER) {
- self.onLogon();
- }
- }
- }
- },
- combo
- ],
- buttons: [
- {
- text: 'Login',
- handler: function(){
- self.onLogon();
- }
- }
- ]
- }]
- });
-
- PVE.window.LoginWindow.superclass.initComponent.call(self);
- }
-
-});
diff --git a/www/old/window/ModalDialog.js b/www/old/window/ModalDialog.js
deleted file mode 100644
index e8102091..00000000
--- a/www/old/window/ModalDialog.js
+++ /dev/null
@@ -1,20 +0,0 @@
-Ext.ns("PVE.window");
-
-PVE.window.ModalDialog = Ext.extend(Ext.Window, {
-
- initComponent: function() {
- var self = this;
-
- //self.width = self.width || 800;
- //self.height = self.height || 400;
-
- Ext.apply(self, {
- modal: true,
- border: false,
- layout: 'fit',
- maximizable: true
- });
-
- PVE.window.ModalDialog.superclass.initComponent.call(self);
- }
-});
\ No newline at end of file