]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/BackupView.js
use Proxmox.Utils instead of PVE.Utils
[pve-manager.git] / www / manager6 / grid / BackupView.js
CommitLineData
7bd89462
DM
1Ext.define('PVE.grid.BackupView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveBackupView'],
5
ba93a9c6 6 onlineHelp: 'chapter_vzdump',
7bd89462 7
a61607a8
DC
8 stateful: true,
9 stateId: 'grid-guest-backup',
10
7bd89462
DM
11 initComponent : function() {
12 var me = this;
13
14 var nodename = me.pveSelNode.data.node;
15 if (!nodename) {
16 throw "no node name specified";
17 }
18
19 var vmid = me.pveSelNode.data.vmid;
20 if (!vmid) {
21 throw "no VM ID specified";
22 }
23
24 var vmtype = me.pveSelNode.data.type;
25 if (!vmtype) {
26 throw "no VM type specified";
27 }
28
2685b382 29 var vmtypeFilter;
7bd89462 30 if (vmtype === 'openvz') {
2685b382 31 vmtypeFilter = function(item) {
7bd89462
DM
32 return item.data.volid.match(':backup/vzdump-openvz-');
33 };
34 } else if (vmtype === 'lxc') {
2685b382 35 vmtypeFilter = function(item) {
7bd89462
DM
36 return item.data.volid.match(':backup/vzdump-lxc-');
37 };
38 } else if (vmtype === 'qemu') {
2685b382 39 vmtypeFilter = function(item) {
7bd89462
DM
40 return item.data.volid.match(':backup/vzdump-qemu-');
41 };
42 } else {
43 throw "unsupported VM type '" + vmtype + "'";
44 }
45
ce76a18a
EK
46 var searchFilter = {
47 property: 'volid',
48 // on initial store display only our vmid backups
49 // surround with minus sign to prevent the 2016 VMID bug
50 value: vmtype + '-' + vmid + '-',
51 anyMatch: true,
52 caseSensitive: false
53 };
54
7bd89462
DM
55 me.store = Ext.create('Ext.data.Store', {
56 model: 'pve-storage-content',
57 sorters: {
58 property: 'volid',
59 order: 'DESC'
60 },
ce76a18a 61 filters: [
2685b382 62 vmtypeFilter,
ce76a18a
EK
63 searchFilter
64 ]
7bd89462
DM
65 });
66
67 var reload = Ext.Function.createBuffered(function() {
8dfd00cd 68 if (me.store) {
7bd89462
DM
69 me.store.load();
70 }
71 }, 100);
72
73 var setStorage = function(storage) {
74 var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
75 url += '?content=backup';
76
77 me.store.setProxy({
78 type: 'pve',
79 url: url
80 });
81
82 reload();
83 };
84
85 var storagesel = Ext.create('PVE.form.StorageSelector', {
86 nodename: nodename,
87 fieldLabel: gettext('Storage'),
88 labelAlign: 'right',
89 storageContent: 'backup',
90 allowBlank: false,
91 listeners: {
92 change: function(f, value) {
93 setStorage(value);
94 }
95 }
96 });
97
98 var storagefilter = Ext.create('Ext.form.field.Text', {
99 fieldLabel: gettext('Search'),
100 labelWidth: 50,
101 labelAlign: 'right',
102 enableKeyEvents: true,
ce76a18a 103 value: searchFilter.value,
7bd89462
DM
104 listeners: {
105 buffer: 500,
106 keyup: function(field) {
107 me.store.clearFilter(true);
ce76a18a 108 searchFilter.value = field.getValue();
7bd89462 109 me.store.filter([
2685b382 110 vmtypeFilter,
ce76a18a 111 searchFilter
7bd89462
DM
112 ]);
113 }
114 }
115 });
116
117 var sm = Ext.create('Ext.selection.RowModel', {});
118
119 var backup_btn = Ext.create('Ext.button.Button', {
120 text: gettext('Backup now'),
121 handler: function() {
122 var win = Ext.create('PVE.window.Backup', {
123 nodename: nodename,
124 vmid: vmid,
125 vmtype: vmtype,
e83e60bf
EK
126 storage: storagesel.getValue(),
127 listeners : {
128 close: function() {
129 reload();
130 }
131 }
7bd89462
DM
132 });
133 win.show();
134 }
135 });
136
5720fafa 137 var restore_btn = Ext.create('Proxmox.button.Button', {
7bd89462
DM
138 text: gettext('Restore'),
139 disabled: true,
140 selModel: sm,
141 enableFn: function(rec) {
142 return !!rec;
143 },
144 handler: function(b, e, rec) {
145 var volid = rec.data.volid;
146
147 var win = Ext.create('PVE.window.Restore', {
148 nodename: nodename,
149 vmid: vmid,
150 volid: rec.data.volid,
151 volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
152 vmtype: vmtype
153 });
154 win.show();
155 win.on('destroy', reload);
156 }
157 });
158
3b1ca3ff 159 var delete_btn = Ext.create('Proxmox.button.StdRemoveButton', {
7bd89462 160 selModel: sm,
3b1ca3ff 161 dangerous: true,
7bd89462
DM
162 confirmMsg: function(rec) {
163 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
164 "'" + rec.data.volid + "'");
16152937 165 msg += " " + gettext('This will permanently erase all data.');
7bd89462
DM
166
167 return msg;
168 },
3b1ca3ff 169 getUrl: function(rec) {
7bd89462 170 var storage = storagesel.getValue();
3b1ca3ff
DC
171 return '/nodes/' + nodename + '/storage/' + storage + '/content/' + rec.data.volid;
172 },
173 callback: function() {
174 reload();
7bd89462
DM
175 }
176 });
177
5720fafa 178 var config_btn = Ext.create('Proxmox.button.Button', {
79f305de
DC
179 text: gettext('Show Configuration'),
180 disabled: true,
181 selModel: sm,
182 enableFn: function(rec) {
183 return !!rec;
184 },
185 handler: function(b, e, rec) {
186 var storage = storagesel.getValue();
187 if (!storage) {
188 return;
189 }
190
6da4aea8
DC
191 var win = Ext.create('PVE.window.BackupConfig', {
192 volume: rec.data.volid,
193 pveSelNode: me.pveSelNode
79f305de
DC
194 });
195
6da4aea8 196 win.show();
79f305de
DC
197 }
198 });
199
7bd89462 200 Ext.apply(me, {
7bd89462 201 selModel: sm,
79f305de 202 tbar: [ backup_btn, restore_btn, delete_btn,config_btn, '->', storagesel, storagefilter ],
7bd89462
DM
203 columns: [
204 {
205 header: gettext('Name'),
206 flex: 1,
207 sortable: true,
208 renderer: PVE.Utils.render_storage_content,
209 dataIndex: 'volid'
210 },
211 {
212 header: gettext('Format'),
213 width: 100,
214 dataIndex: 'format'
215 },
216 {
217 header: gettext('Size'),
218 width: 100,
e7ade592 219 renderer: Proxmox.Utils.format_size,
7bd89462
DM
220 dataIndex: 'size'
221 }
8dfd00cd 222 ]
7bd89462
DM
223 });
224
225 me.callParent();
226 }
227});