]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/Backup.js
e16e9783be80f90030e35d32dbe8ef462a3d49a3
1 Ext
.define('PVE.dc.BackupEdit', {
2 extend
: 'Proxmox.window.Edit',
3 alias
: ['widget.pveDcBackupEdit'],
5 defaultFocus
: undefined,
7 initComponent : function() {
10 me
.isCreate
= !me
.jobid
;
16 url
= '/api2/extjs/cluster/backup';
19 url
= '/api2/extjs/cluster/backup/' + me
.jobid
;
23 var vmidField
= Ext
.create('Ext.form.field.Hidden', {
27 /*jslint confusion: true*/
28 // 'value' can be assigned a string or an array
29 var selModeField
= Ext
.create('Proxmox.form.KVComboBox', {
30 xtype
: 'proxmoxKVComboBox',
32 ['include', gettext('Include selected VMs')],
33 ['all', gettext('All')],
34 ['exclude', gettext('Exclude selected VMs')]
36 fieldLabel
: gettext('Selection mode'),
41 var sm
= Ext
.create('Ext.selection.CheckboxModel', {
44 selectionchange: function(model
, selected
) {
46 Ext
.Array
.each(selected
, function(record
) {
47 sel
.push(record
.data
.vmid
);
50 // to avoid endless recursion suspend the vmidField change
51 // event temporary as it calls us again
52 vmidField
.suspendEvent('change');
53 vmidField
.setValue(sel
);
54 vmidField
.resumeEvent('change');
59 var storagesel
= Ext
.create('PVE.form.StorageSelector', {
60 fieldLabel
: gettext('Storage'),
61 nodename
: 'localhost',
62 storageContent
: 'backup',
67 var store
= new Ext
.data
.Store({
68 model
: 'PVEResources',
75 var vmgrid
= Ext
.createWidget('grid', {
88 header
: gettext('Node'),
92 header
: gettext('Status'),
94 renderer: function(value
) {
96 return Proxmox
.Utils
.runningText
;
98 return Proxmox
.Utils
.stoppedText
;
103 header
: gettext('Name'),
108 header
: gettext('Type'),
114 var nodesel
= Ext
.create('PVE.form.NodeSelector', {
116 fieldLabel
: gettext('Node'),
120 emptyText
: '-- ' + gettext('All') + ' --',
122 change: function(f
, value
) {
123 storagesel
.setNodename(value
|| 'localhost');
124 var mode
= selModeField
.getValue();
126 store
.filterBy(function(rec
) {
127 return (!value
|| rec
.get('node') === value
);
129 if (mode
=== 'all') {
140 xtype
: 'pveDayOfWeekSelector',
142 fieldLabel
: gettext('Day of week'),
149 fieldLabel
: gettext('Start Time'),
162 fieldLabel
: gettext('Send email to'),
166 xtype
: 'pveEmailNotificationSelector',
167 fieldLabel
: gettext('Email notification'),
168 name
: 'mailnotification',
169 deleteEmpty
: me
.isCreate
? false : true,
170 value
: me
.isCreate
? 'always' : ''
173 xtype
: 'pveCompressionSelector',
174 fieldLabel
: gettext('Compression'),
176 deleteEmpty
: me
.isCreate
? false : true,
180 xtype
: 'pveBackupModeSelector',
181 fieldLabel
: gettext('Mode'),
186 xtype
: 'proxmoxcheckbox',
187 fieldLabel
: gettext('Enable'),
195 /*jslint confusion: false*/
197 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
198 onlineHelp
: 'chapter_vzdump',
201 onGetValues: function(values
) {
204 Proxmox
.Utils
.assemble_field_data(values
, { 'delete': 'node' });
209 var selMode
= values
.selMode
;
210 delete values
.selMode
;
212 if (selMode
=== 'all') {
216 } else if (selMode
=== 'exclude') {
218 values
.exclude
= values
.vmid
;
225 var update_vmid_selection = function(list
, mode
) {
226 if (mode
!== 'all') {
227 sm
.deselectAll(true);
229 Ext
.Array
.each(list
.split(','), function(vmid
) {
230 var rec
= store
.findRecord('vmid', vmid
);
232 sm
.select(rec
, true);
239 vmidField
.on('change', function(f
, value
) {
240 var mode
= selModeField
.getValue();
241 update_vmid_selection(value
, mode
);
244 selModeField
.on('change', function(f
, value
, oldValue
) {
245 if (value
=== 'all') {
247 vmgrid
.setDisabled(true);
249 vmgrid
.setDisabled(false);
251 if (oldValue
=== 'all') {
252 sm
.deselectAll(true);
253 vmidField
.setValue('');
255 var list
= vmidField
.getValue();
256 update_vmid_selection(list
, value
);
259 var reload = function() {
261 params
: { type
: 'vm' },
262 callback: function() {
263 var node
= nodesel
.getValue();
265 store
.filterBy(function(rec
) {
266 return (!node
|| node
.length
=== 0 || rec
.get('node') === node
);
268 var list
= vmidField
.getValue();
269 var mode
= selModeField
.getValue();
270 if (mode
=== 'all') {
273 update_vmid_selection(list
, mode
);
280 subject
: gettext("Backup Job"),
283 items
: [ ipanel
, vmgrid
]
289 selModeField
.setValue('include');
292 success: function(response
, options
) {
293 var data
= response
.result
.data
;
295 data
.dow
= data
.dow
.split(',');
297 if (data
.all
|| data
.exclude
) {
299 data
.vmid
= data
.exclude
;
300 data
.selMode
= 'exclude';
303 data
.selMode
= 'all';
306 data
.selMode
= 'include';
319 Ext
.define('PVE.dc.BackupView', {
320 extend
: 'Ext.grid.GridPanel',
322 alias
: ['widget.pveDcBackupView'],
324 onlineHelp
: 'chapter_vzdump',
326 allText
: '-- ' + gettext('All') + ' --',
327 allExceptText
: gettext('All except {0}'),
329 initComponent : function() {
332 var store
= new Ext
.data
.Store({
333 model
: 'pve-cluster-backup',
336 url
: "/api2/json/cluster/backup"
340 var reload = function() {
344 var sm
= Ext
.create('Ext.selection.RowModel', {});
346 var run_editor = function() {
347 var rec
= sm
.getSelection()[0];
352 var win
= Ext
.create('PVE.dc.BackupEdit',{
355 win
.on('destroy', reload
);
359 var edit_btn
= new Proxmox
.button
.Button({
360 text
: gettext('Edit'),
366 var remove_btn
= Ext
.create('Proxmox.button.StdRemoveButton', {
368 baseurl
: '/cluster/backup',
369 callback: function() {
374 Proxmox
.Utils
.monStoreErrors(me
, store
);
380 stateId
: 'grid-dc-backup',
386 text
: gettext('Add'),
387 handler: function() {
388 var win
= Ext
.create('PVE.dc.BackupEdit',{});
389 win
.on('destroy', reload
);
398 header
: gettext('Enabled'),
400 dataIndex
: 'enabled',
401 xtype
: 'checkcolumn',
404 disabledCls
: 'x-item-enabled',
408 header
: gettext('Node'),
412 renderer: function(value
) {
420 header
: gettext('Day of week'),
424 renderer: function(val
) {
425 var dows
= ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
428 val
.split(',').forEach(function(day
){
430 var dow
= (dows
.indexOf(day
)+6)%7;
432 if (selected
.length
=== 0 || selected
[selected
.length
-1] === 0) {
435 selected
[selected
.length
-1]++;
448 selected
.forEach(function(item
) {
451 days
.push(Ext
.Date
.dayNames
[(cur
+1)] + '-' + Ext
.Date
.dayNames
[(cur
+item
)%7]);
453 } else if (item
== 2) {
454 days
.push(Ext
.Date
.dayNames
[cur
+1]);
455 days
.push(Ext
.Date
.dayNames
[(cur
+2)%7]);
457 } else if (item
== 1) {
458 days
.push(Ext
.Date
.dayNames
[(cur
+1)%7]);
461 return days
.join(', ');
465 header
: gettext('Start Time'),
468 dataIndex
: 'starttime'
471 header
: gettext('Storage'),
477 header
: gettext('Selection'),
481 renderer: function(value
, metaData
, record
) {
482 /*jslint confusion: true */
483 if (record
.data
.all
) {
484 if (record
.data
.exclude
) {
485 return Ext
.String
.format(me
.allExceptText
, record
.data
.exclude
);
489 if (record
.data
.vmid
) {
490 return record
.data
.vmid
;
499 itemdblclick
: run_editor
507 Ext
.define('pve-cluster-backup', {
508 extend
: 'Ext.data.Model',
510 'id', 'starttime', 'dow',
511 'storage', 'node', 'vmid', 'exclude',
513 { name
: 'enabled', type
: 'boolean' },
514 { name
: 'all', type
: 'boolean' },
515 { name
: 'snapshot', type
: 'boolean' },
516 { name
: 'stop', type
: 'boolean' },
517 { name
: 'suspend', type
: 'boolean' },
518 { name
: 'compress', type
: 'boolean' }