]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/BackupView.js
ui: FW log ratelimit: fix default value
[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 onlineHelp: 'chapter_vzdump',
7
8 stateful: true,
9 stateId: 'grid-guest-backup',
10
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
29 var vmtypeFilter;
30 if (vmtype === 'openvz') {
31 vmtypeFilter = function(item) {
32 return item.data.volid.match(':backup/vzdump-openvz-');
33 };
34 } else if (vmtype === 'lxc') {
35 vmtypeFilter = function(item) {
36 return item.data.volid.match(':backup/vzdump-lxc-');
37 };
38 } else if (vmtype === 'qemu') {
39 vmtypeFilter = function(item) {
40 return item.data.volid.match(':backup/vzdump-qemu-');
41 };
42 } else {
43 throw "unsupported VM type '" + vmtype + "'";
44 }
45
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
55 me.store = Ext.create('Ext.data.Store', {
56 model: 'pve-storage-content',
57 sorters: {
58 property: 'volid',
59 order: 'DESC'
60 },
61 filters: [
62 vmtypeFilter,
63 searchFilter
64 ]
65 });
66
67 var reload = Ext.Function.createBuffered(function() {
68 if (me.store) {
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: 'proxmox',
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,
103 value: searchFilter.value,
104 listeners: {
105 buffer: 500,
106 keyup: function(field) {
107 me.store.clearFilter(true);
108 searchFilter.value = field.getValue();
109 me.store.filter([
110 vmtypeFilter,
111 searchFilter
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,
126 storage: storagesel.getValue(),
127 listeners : {
128 close: function() {
129 reload();
130 }
131 }
132 });
133 win.show();
134 }
135 });
136
137 var restore_btn = Ext.create('Proxmox.button.Button', {
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
159 var delete_btn = Ext.create('Proxmox.button.StdRemoveButton', {
160 selModel: sm,
161 dangerous: true,
162 confirmMsg: function(rec) {
163 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
164 "'" + rec.data.volid + "'");
165 msg += " " + gettext('This will permanently erase all data.');
166
167 return msg;
168 },
169 getUrl: function(rec) {
170 var storage = storagesel.getValue();
171 return '/nodes/' + nodename + '/storage/' + storage + '/content/' + rec.data.volid;
172 },
173 callback: function() {
174 reload();
175 }
176 });
177
178 var config_btn = Ext.create('Proxmox.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
191 var win = Ext.create('PVE.window.BackupConfig', {
192 volume: rec.data.volid,
193 pveSelNode: me.pveSelNode
194 });
195
196 win.show();
197 }
198 });
199
200 Ext.apply(me, {
201 selModel: sm,
202 tbar: [ backup_btn, restore_btn, delete_btn,config_btn, '->', storagesel, storagefilter ],
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,
219 renderer: Proxmox.Utils.format_size,
220 dataIndex: 'size'
221 }
222 ]
223 });
224
225 me.callParent();
226 }
227 });