]>
git.proxmox.com Git - pve-manager.git/blob - www/manager5/dc/Backup.js
9cc2f7d7764a2f500d934513d45599f90ccd0ecf
1 Ext
.define('PVE.dc.BackupEdit', {
2 extend
: 'PVE.window.Edit',
3 alias
: ['widget.pveDcBackupEdit'],
5 initComponent : function() {
6 /*jslint confusion: true */
15 url
= '/api2/extjs/cluster/backup';
18 url
= '/api2/extjs/cluster/backup/' + me
.jobid
;
22 var vmidField
= Ext
.create('Ext.form.field.Hidden', {
26 var selModeField
= Ext
.create('PVE.form.KVComboBox', {
27 xtype
: 'pveKVComboBox',
29 ['include', gettext('Include selected VMs')],
30 ['all', gettext('All')],
31 ['exclude', gettext('Exclude selected VMs')]
33 fieldLabel
: gettext('Selection mode'),
38 var insideUpdate
= false;
40 var sm
= Ext
.create('Ext.selection.CheckboxModel', {
43 selectionchange: function(model
, selected
) {
44 if (!insideUpdate
) { // avoid endless loop
46 Ext
.Array
.each(selected
, function(record
) {
47 sel
.push(record
.data
.vmid
);
51 vmidField
.setValue(sel
);
58 var storagesel
= Ext
.create('PVE.form.StorageSelector', {
59 fieldLabel
: gettext('Storage'),
60 nodename
: 'localhost',
61 storageContent
: 'backup',
66 var store
= new Ext
.data
.Store({
67 model
: 'PVEResources',
74 var vmgrid
= Ext
.createWidget('grid', {
87 header
: gettext('Node'),
91 header
: gettext('Status'),
93 renderer: function(value
) {
95 return PVE
.Utils
.runningText
;
97 return PVE
.Utils
.stoppedText
;
102 header
: gettext('Name'),
107 header
: gettext('Type'),
113 var nodesel
= Ext
.create('PVE.form.NodeSelector', {
115 fieldLabel
: gettext('Node'),
119 emptyText
: '-- ' + gettext('All') + ' --',
121 change: function(f
, value
) {
122 storagesel
.setNodename(value
|| 'localhost');
123 var mode
= selModeField
.getValue();
125 store
.filterBy(function(rec
) {
126 return (!value
|| rec
.get('node') === value
);
128 if (mode
=== 'all') {
139 xtype
: 'pveDayOfWeekSelector',
141 fieldLabel
: gettext('Day of week'),
148 fieldLabel
: gettext('Start Time'),
160 fieldLabel
: gettext('Send email to'),
164 xtype
: 'pveEmailNotificationSelector',
165 fieldLabel
: gettext('Email notification'),
166 name
: 'mailnotification',
167 deleteEmpty
: me
.create
? false : true,
168 value
: me
.create
? 'always' : ''
171 xtype
: 'pveCompressionSelector',
172 fieldLabel
: gettext('Compression'),
174 deleteEmpty
: me
.create
? false : true,
175 value
: me
.create
? 'lzo' : ''
178 xtype
: 'pveBackupModeSelector',
179 fieldLabel
: gettext('Mode'),
186 var ipanel
= Ext
.create('PVE.panel.InputPanel', {
189 onGetValues: function(values
) {
192 PVE
.Utils
.assemble_field_data(values
, { 'delete': 'node' });
197 var selMode
= values
.selMode
;
198 delete values
.selMode
;
200 if (selMode
=== 'all') {
204 } else if (selMode
=== 'exclude') {
206 values
.exclude
= values
.vmid
;
213 var update_vmid_selection = function(list
, mode
) {
215 return; // should not happen - just to be sure
218 if (mode
!== 'all') {
219 sm
.deselectAll(true);
221 Ext
.Array
.each(list
.split(','), function(vmid
) {
222 var rec
= store
.findRecord('vmid', vmid
);
224 sm
.select(rec
, true);
229 insideUpdate
= false;
232 vmidField
.on('change', function(f
, value
) {
233 var mode
= selModeField
.getValue();
234 update_vmid_selection(value
, mode
);
237 selModeField
.on('change', function(f
, value
, oldValue
) {
238 if (value
=== 'all') {
240 vmgrid
.setDisabled(true);
242 vmgrid
.setDisabled(false);
244 if (oldValue
=== 'all') {
245 sm
.deselectAll(true);
246 vmidField
.setValue('');
248 var list
= vmidField
.getValue();
249 update_vmid_selection(list
, value
);
252 var reload = function() {
254 params
: { type
: 'vm' },
255 callback: function() {
256 var node
= nodesel
.getValue();
258 store
.filterBy(function(rec
) {
259 return (!node
|| rec
.get('node') === node
);
261 var list
= vmidField
.getValue();
262 var mode
= selModeField
.getValue();
263 if (mode
=== 'all') {
266 update_vmid_selection(list
, mode
);
273 subject
: gettext("Backup Job"),
276 items
: [ ipanel
, vmgrid
]
282 selModeField
.setValue('include');
285 success: function(response
, options
) {
286 var data
= response
.result
.data
;
288 data
.dow
= data
.dow
.split(',');
290 if (data
.all
|| data
.exclude
) {
292 data
.vmid
= data
.exclude
;
293 data
.selMode
= 'exclude';
296 data
.selMode
= 'all';
299 data
.selMode
= 'include';
312 Ext
.define('PVE.dc.BackupView', {
313 extend
: 'Ext.grid.GridPanel',
315 alias
: ['widget.pveDcBackupView'],
317 allText
: '-- ' + gettext('All') + ' --',
318 allExceptText
: gettext('All except {0}'),
320 initComponent : function() {
323 var store
= new Ext
.data
.Store({
324 model
: 'pve-cluster-backup',
327 url
: "/api2/json/cluster/backup"
331 var reload = function() {
335 var sm
= Ext
.create('Ext.selection.RowModel', {});
337 var run_editor = function() {
338 var rec
= sm
.getSelection()[0];
343 var win
= Ext
.create('PVE.dc.BackupEdit',{
346 win
.on('destroy', reload
);
350 var edit_btn
= new PVE
.button
.Button({
351 text
: gettext('Edit'),
357 var remove_btn
= new PVE
.button
.Button({
358 text
: gettext('Remove'),
361 confirmMsg
: gettext('Are you sure you want to remove this entry'),
362 handler: function(btn
, event
, rec
) {
363 PVE
.Utils
.API2Request({
364 url
: '/cluster/backup/' + rec
.data
.id
,
367 callback: function() {
370 failure: function (response
, opts
) {
371 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
377 PVE
.Utils
.monStoreErrors(me
, store
);
388 text
: gettext('Add'),
389 handler: function() {
390 var win
= Ext
.create('PVE.dc.BackupEdit',{});
391 win
.on('destroy', reload
);
400 header
: gettext('Node'),
404 renderer: function(value
) {
412 header
: gettext('Day of week'),
418 header
: gettext('Start Time'),
421 dataIndex
: 'starttime'
424 header
: gettext('Storage'),
430 header
: gettext('Selection'),
434 renderer: function(value
, metaData
, record
) {
435 /*jslint confusion: true */
436 if (record
.data
.all
) {
437 if (record
.data
.exclude
) {
438 return Ext
.String
.format(me
.allExceptText
, record
.data
.exclude
);
442 if (record
.data
.vmid
) {
443 return record
.data
.vmid
;
452 itemdblclick
: run_editor
460 Ext
.define('pve-cluster-backup', {
461 extend
: 'Ext.data.Model',
463 'id', 'starttime', 'dow',
464 'storage', 'node', 'vmid', 'exclude',
466 { name
: 'all', type
: 'boolean' },
467 { name
: 'snapshot', type
: 'boolean' },
468 { name
: 'stop', type
: 'boolean' },
469 { name
: 'suspend', type
: 'boolean' },
470 { name
: 'compress', type
: 'boolean' }