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