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