-/*global Proxmox*/
Ext.define('pmg-backup-list', {
extend: 'Ext.data.Model',
fields: [
'filename',
{ type: 'integer', name: 'size' },
- { type: 'date', dateFormat: 'timestamp', name: 'timestamp' }
+ { type: 'date', dateFormat: 'timestamp', name: 'timestamp' },
],
proxy: {
type: 'proxmox',
- url: "/api2/json/nodes/" + Proxmox.NodeName + "/backup"
+ url: "/api2/json/nodes/" + Proxmox.NodeName + "/backup",
},
- idProperty: 'filename'
+ idProperty: 'filename',
+});
+
+Ext.define('PMG.RestoreWindow', {
+ extend: 'Proxmox.window.Edit',
+ xtype: 'pmgRestoreWindow',
+ onlineHelp: 'chapter_pmgbackup',
+
+ showProgress: true,
+ title: gettext('Restore'),
+ isCreate: true,
+ method: 'POST',
+ submitText: gettext('Restore'),
+ fieldDefaults: {
+ labelWidth: 150,
+ },
+
+ initComponent: function() {
+ let me = this;
+
+ me.items = [
+ {
+ xtype: 'proxmoxcheckbox',
+ name: 'config',
+ fieldLabel: gettext('System Configuration'),
+ },
+ {
+ xtype: 'proxmoxcheckbox',
+ name: 'database',
+ value: 1,
+ uncheckedValue: 0,
+ fieldLabel: gettext('Rule Database'),
+ listeners: {
+ change: function(field, value) {
+ field.nextSibling('field[name=statistic]').setDisabled(!value);
+ },
+ },
+ },
+ {
+ xtype: 'proxmoxcheckbox',
+ name: 'statistic',
+ fieldLabel: gettext('Statistic'),
+ },
+ ];
+
+ let restorePath;
+ if (me.filename) {
+ restorePath = `backup/${encodeURIComponent(me.filename)}`;
+ } else if (me.backup_time) {
+ restorePath = `pbs/${me.remote}/snapshot/${me.backup_id}/${me.backup_time}`;
+ } else {
+ throw "neither filename nor snapshot given";
+ }
+ me.url = `/nodes/${Proxmox.NodeName}/${restorePath}`;
+
+ me.callParent();
+ },
+});
+
+Ext.define('PMG.BackupWindow', {
+ extend: 'Proxmox.window.Edit',
+ xtype: 'pmgBackupWindow',
+ onlineHelp: 'chapter_pmgbackup',
+
+ showProgress: true,
+ title: gettext('Backup'),
+ isCreate: true,
+ method: 'POST',
+ submitText: gettext('Backup'),
+ fieldDefaults: {
+ labelWidth: 150,
+ },
+ showTaskViewer: true,
+ items: [
+ {
+ xtype: 'proxmoxcheckbox',
+ name: 'statistic',
+ value: 1,
+ uncheckedValue: 0,
+ fieldLabel: gettext('Include Statistics'),
+ },
+ ],
+
});
Ext.define('PMG.BackupRestore', {
xclass: 'Ext.app.ViewController',
createBackup: function() {
- var me = this.getView();
- Proxmox.Utils.API2Request({
+ let view = this.getView();
+ Ext.create('PMG.BackupWindow', {
url: "/nodes/" + Proxmox.NodeName + "/backup",
- method: 'POST',
- waitMsgTarget: me,
- failure: function (response, opts) {
- Ext.Msg.alert(gettext('Error'), response.htmlStatus);
- },
- success: function(response, opts) {
- var upid = response.result.data;
-
- var win = Ext.create('Proxmox.window.TaskViewer', {
- upid: upid
- });
- win.show();
- me.mon(win, 'close', function() { me.store.load(); });
- }
- });
+ taskDone: () => view.store.load(),
+ }).show();
},
onRestore: function() {
- var me = this.getView();
- var rec = me.getSelection()[0];
+ let view = this.getView();
+ let rec = view.getSelection()[0];
if (!(rec && rec.data && rec.data.filename)) {
return;
}
- Proxmox.Utils.API2Request({
- url: "/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(rec.data.filename),
- method: 'POST',
- waitMsgTarget: me,
- failure: function (response, opts) {
- Ext.Msg.alert(gettext('Error'), response.htmlStatus);
- },
- success: function(response, opts) {
- var upid = response.result.data;
-
- var win = Ext.create('Proxmox.window.TaskViewer', {
- upid: upid
- });
- win.show();
- }
- });
+ Ext.create('PMG.RestoreWindow', {
+ filename: rec.data.filename,
+ }).show();
},
onAfterRemove: function(btn, res) {
- var me = this.getView();
- me.store.load();
- }
+ let view = this.getView();
+ view.store.load();
+ },
},
tbar: [
{
- text: gettext('Backup'),
- handler: 'createBackup'
+ text: gettext('Backup Now'),
+ handler: 'createBackup',
},
'-',
{
xtype: 'proxmoxButton',
text: gettext('Restore'),
handler: 'onRestore',
- disabled: true
+ disabled: true,
},
{
xtype: 'proxmoxStdRemoveButton',
baseurl: '/nodes/' + Proxmox.NodeName + '/backup',
reference: 'removeBtn',
callback: 'onAfterRemove',
- waitMsgTarget: true
- }
+ waitMsgTarget: true,
+ },
],
store: {
sorters: [
{
property: 'timestamp',
- direction: 'DESC'
- }
- ]
+ direction: 'DESC',
+ },
+ ],
},
columns: [
width: 300,
sortable: true,
renderer: Ext.htmlEncode,
- dataIndex: 'filename'
+ dataIndex: 'filename',
},
{
xtype: 'datecolumn',
width: 150,
format: 'Y-m-d H:i',
sortable: true,
- dataIndex: 'timestamp'
+ dataIndex: 'timestamp',
},
{
header: gettext('Size'),
width: 100,
sortable: true,
- renderer: Proxmox.Utils.format_size,
- dataIndex: 'size'
+ renderer: Proxmox.Utils.render_size,
+ dataIndex: 'size',
},
{
header: gettext('Download'),
"/api2/json/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(filename) +
"'><i class='fa fa-fw fa-download'</i></a>";
},
- dataIndex: 'filename'
- }
- ]
+ dataIndex: 'filename',
+ },
+ ],
});