]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/storage/BackupView.js
ui: ceph status details: refactoring and clenaups
[pve-manager.git] / www / manager6 / storage / BackupView.js
CommitLineData
1665b840
FE
1Ext.define('PVE.storage.BackupView', {
2 extend: 'PVE.storage.ContentView',
3
4 alias: 'widget.pveStorageBackupView',
5
61cf2658 6 showColumns: ['name', 'notes', 'protected', 'date', 'format', 'size'],
c0eadd55 7
1665b840
FE
8 initComponent: function() {
9 var me = this;
10
11 var nodename = me.nodename = me.pveSelNode.data.node;
12 if (!nodename) {
13 throw "no node name specified";
14 }
15
16 var storage = me.storage = me.pveSelNode.data.storage;
17 if (!storage) {
18 throw "no storage ID specified";
19 }
20
21 me.content = 'backup';
22
23 var sm = me.sm = Ext.create('Ext.selection.RowModel', {});
24
25 var reload = function() {
26 me.store.load();
27 };
28
e969d187
FE
29 let pruneButton = Ext.create('Proxmox.button.Button', {
30 text: gettext('Prune group'),
31 disabled: true,
32 selModel: sm,
33 setBackupGroup: function(backup) {
34 if (backup) {
35 let name = backup.text;
36 let vmid = backup.vmid;
37 let format = backup.format;
38
39 let vmtype;
40 if (name.startsWith('vzdump-lxc-') || format === "pbs-ct") {
41 vmtype = 'lxc';
42 } else if (name.startsWith('vzdump-qemu-') || format === "pbs-vm") {
43 vmtype = 'qemu';
44 }
45
46 if (vmid && vmtype) {
47 this.setText(gettext('Prune group') + ` ${vmtype}/${vmid}`);
48 this.vmid = vmid;
49 this.vmtype = vmtype;
50 this.setDisabled(false);
51 return;
52 }
53 }
54 this.setText(gettext('Prune group'));
55 this.vmid = null;
56 this.vmtype = null;
57 this.setDisabled(true);
58 },
59 handler: function(b, e, rec) {
60 let win = Ext.create('PVE.window.Prune', {
61 nodename: nodename,
62 storage: storage,
63 backup_id: this.vmid,
64 backup_type: this.vmtype,
65 });
66 win.show();
67 win.on('destroy', reload);
68 },
69 });
70
71 me.on('selectionchange', function(model, srecords, eOpts) {
72 if (srecords.length === 1) {
73 pruneButton.setBackupGroup(srecords[0].data);
74 } else {
75 pruneButton.setBackupGroup(null);
76 }
77 });
78
878bbf0b
SR
79 let isPBS = me.pluginType === 'pbs';
80
1665b840
FE
81 me.tbar = [
82 {
83 xtype: 'proxmoxButton',
84 text: gettext('Restore'),
85 selModel: sm,
86 disabled: true,
1665b840
FE
87 handler: function(b, e, rec) {
88 var vmtype;
89 if (PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format)) {
90 vmtype = 'qemu';
91 } else if (PVE.Utils.volume_is_lxc_backup(rec.data.volid, rec.data.format)) {
92 vmtype = 'lxc';
93 } else {
94 return;
95 }
96
97 var win = Ext.create('PVE.window.Restore', {
98 nodename: nodename,
99 volid: rec.data.volid,
100 volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
f6710aac 101 vmtype: vmtype,
878bbf0b 102 isPBS: isPBS,
1665b840
FE
103 });
104 win.show();
105 win.on('destroy', reload);
f6710aac 106 },
1665b840 107 },
6e339db1
TL
108 ];
109 if (isPBS) {
110 me.tbar.push({
111 xtype: 'proxmoxButton',
112 text: gettext('File Restore'),
113 disabled: true,
114 selModel: sm,
115 handler: function(b, e, rec) {
116 let isVMArchive = PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format);
117 Ext.create('Proxmox.window.FileBrowser', {
118 title: gettext('File Restore') + " - " + rec.data.text,
119 listURL: `/api2/json/nodes/localhost/storage/${me.storage}/file-restore/list`,
120 downloadURL: `/api2/json/nodes/localhost/storage/${me.storage}/file-restore/download`,
121 extraParams: {
122 volume: rec.data.volid,
123 },
124 archive: isVMArchive ? 'all' : undefined,
125 autoShow: true,
126 });
127 },
128 });
129 }
130 me.tbar.push(
1665b840
FE
131 {
132 xtype: 'proxmoxButton',
133 text: gettext('Show Configuration'),
134 disabled: true,
135 selModel: sm,
f6710aac 136 handler: function(b, e, rec) {
1665b840
FE
137 var win = Ext.create('PVE.window.BackupConfig', {
138 volume: rec.data.volid,
f6710aac 139 pveSelNode: me.pveSelNode,
1665b840
FE
140 });
141
142 win.show();
f6710aac 143 },
1665b840 144 },
74b6a959
TL
145 {
146 xtype: 'proxmoxButton',
147 text: gettext('Edit Notes'),
148 disabled: true,
149 selModel: sm,
150 handler: function(b, e, rec) {
151 let volid = rec.data.volid;
152 Ext.create('Proxmox.window.Edit', {
153 autoLoad: true,
154 width: 600,
155 height: 400,
156 resizable: true,
157 title: gettext('Notes'),
158 url: `/api2/extjs/nodes/${nodename}/storage/${me.storage}/content/${volid}`,
159 layout: 'fit',
160 items: [
161 {
162 xtype: 'textarea',
163 layout: 'fit',
164 name: 'notes',
165 height: '100%',
166 },
167 ],
168 listeners: {
169 destroy: () => reload(),
170 },
171 }).show();
172 },
173 },
b4818ea7
FE
174 {
175 xtype: 'proxmoxButton',
176 text: gettext('Change Protection'),
177 disabled: true,
178 handler: function(button, event, record) {
179 const volid = record.data.volid;
180 Proxmox.Utils.API2Request({
181 url: `/api2/extjs/nodes/${nodename}/storage/${me.storage}/content/${volid}`,
182 method: 'PUT',
183 waitMsgTarget: me,
184 params: { 'protected': record.data.protected ? 0 : 1 },
185 failure: (response) => Ext.Msg.alert('Error', response.htmlStatus),
186 success: (response) => reload(),
187 });
188 },
189 },
6e339db1 190 '-',
e969d187 191 pruneButton,
6e339db1 192 );
1665b840 193
878bbf0b 194 if (isPBS) {
a4b87129
TL
195 me.extraColumns = {
196 encrypted: {
197 header: gettext('Encrypted'),
198 dataIndex: 'encrypted',
199 renderer: PVE.Utils.render_backup_encryption,
200 },
201 verification: {
202 header: gettext('Verify State'),
203 dataIndex: 'verification',
204 renderer: PVE.Utils.render_backup_verification,
f6710aac 205 },
a4b87129
TL
206 };
207 }
208
1665b840
FE
209 me.callParent();
210 },
211});