ui: tape/BackupJobs: add CRUD functions
similar to the other jobs grids (add/edit/remove etc.) Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Dietmar Maurer
						Dietmar Maurer
					
				
			
			
				
	
			
			
			
						parent
						
							4961404c7c
						
					
				
				
					commit
					ff2bc2d21f
				
			| @ -23,6 +23,7 @@ TAPE_UI_FILES=						\ | |||||||
| 	tape/window/LabelMedia.js			\ | 	tape/window/LabelMedia.js			\ | ||||||
| 	tape/window/PoolEdit.js				\ | 	tape/window/PoolEdit.js				\ | ||||||
| 	tape/window/TapeBackup.js			\ | 	tape/window/TapeBackup.js			\ | ||||||
|  | 	tape/window/TapeBackupJob.js			\ | ||||||
| 	tape/window/TapeRestore.js			\ | 	tape/window/TapeRestore.js			\ | ||||||
| 	tape/BackupOverview.js				\ | 	tape/BackupOverview.js				\ | ||||||
| 	tape/ChangerConfig.js				\ | 	tape/ChangerConfig.js				\ | ||||||
|  | |||||||
| @ -34,6 +34,75 @@ Ext.define('PBS.config.TapeBackupJobView', { | |||||||
|     controller: { |     controller: { | ||||||
| 	xclass: 'Ext.app.ViewController', | 	xclass: 'Ext.app.ViewController', | ||||||
|  |  | ||||||
|  | 	addJob: function() { | ||||||
|  | 	    let me = this; | ||||||
|  | 	    Ext.create('PBS.TapeManagement.BackupJobEdit', { | ||||||
|  | 		autoShow: true, | ||||||
|  | 		listeners: { | ||||||
|  | 		    destroy: function() { | ||||||
|  | 			me.reload(); | ||||||
|  | 		    }, | ||||||
|  | 		}, | ||||||
|  | 	    }).show(); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	editJob: function() { | ||||||
|  | 	    let me = this; | ||||||
|  | 	    let view = me.getView(); | ||||||
|  | 	    let selection = view.getSelection(); | ||||||
|  | 	    if (!selection || selection.length < 1) { | ||||||
|  | 		return; | ||||||
|  | 	    } | ||||||
|  |  | ||||||
|  | 	    Ext.create('PBS.TapeManagement.BackupJobEdit', { | ||||||
|  | 		id: selection[0].data.id, | ||||||
|  | 		autoShow: true, | ||||||
|  | 		listeners: { | ||||||
|  | 		    destroy: function() { | ||||||
|  | 			me.reload(); | ||||||
|  | 		    }, | ||||||
|  | 		}, | ||||||
|  | 	    }).show(); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	openTaskLog: function() { | ||||||
|  | 	    let me = this; | ||||||
|  | 	    let view = me.getView(); | ||||||
|  | 	    let selection = view.getSelection(); | ||||||
|  | 	    if (selection.length < 1) return; | ||||||
|  |  | ||||||
|  | 	    let upid = selection[0].data['last-run-upid']; | ||||||
|  | 	    if (!upid) return; | ||||||
|  |  | ||||||
|  | 	    Ext.create('Proxmox.window.TaskViewer', { | ||||||
|  | 		upid, | ||||||
|  | 	    }).show(); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  | 	runJob: function() { | ||||||
|  | 	    let me = this; | ||||||
|  | 	    let view = me.getView(); | ||||||
|  | 	    let selection = view.getSelection(); | ||||||
|  | 	    if (selection.length < 1) return; | ||||||
|  |  | ||||||
|  | 	    let id = selection[0].data.id; | ||||||
|  | 	    Proxmox.Utils.API2Request({ | ||||||
|  | 		method: 'POST', | ||||||
|  | 		url: `/tape/backup/${id}`, | ||||||
|  | 		success: function(response, opt) { | ||||||
|  | 		    Ext.create('Proxmox.window.TaskViewer', { | ||||||
|  | 		        upid: response.result.data, | ||||||
|  | 		        taskDone: function(success) { | ||||||
|  | 			    me.reload(); | ||||||
|  | 		        }, | ||||||
|  | 		    }).show(); | ||||||
|  | 		}, | ||||||
|  | 		failure: function(response, opt) { | ||||||
|  | 		    Ext.Msg.alert(gettext('Error'), response.htmlStatus); | ||||||
|  | 		}, | ||||||
|  | 	    }); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
| 	startStore: function() { this.getView().getStore().rstore.startUpdate(); }, | 	startStore: function() { this.getView().getStore().rstore.startUpdate(); }, | ||||||
|  |  | ||||||
| 	stopStore: function() { this.getView().getStore().rstore.stopUpdate(); }, | 	stopStore: function() { this.getView().getStore().rstore.stopUpdate(); }, | ||||||
| @ -48,7 +117,7 @@ Ext.define('PBS.config.TapeBackupJobView', { | |||||||
|     listeners: { |     listeners: { | ||||||
| 	activate: 'startStore', | 	activate: 'startStore', | ||||||
| 	deactivate: 'stopStore', | 	deactivate: 'stopStore', | ||||||
| 	//itemdblclick: 'editSyncJob', | 	itemdblclick: 'editJob', | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|     store: { |     store: { | ||||||
| @ -68,6 +137,41 @@ Ext.define('PBS.config.TapeBackupJobView', { | |||||||
| 	trackOver: false, | 	trackOver: false, | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  |     tbar: [ | ||||||
|  | 	{ | ||||||
|  | 	    xtype: 'proxmoxButton', | ||||||
|  | 	    text: gettext('Add'), | ||||||
|  | 	    selModel: false, | ||||||
|  | 	    handler: 'addJob', | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 	    xtype: 'proxmoxButton', | ||||||
|  | 	    text: gettext('Edit'), | ||||||
|  | 	    handler: 'editJob', | ||||||
|  | 	    disabled: true, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 	    xtype: 'proxmoxStdRemoveButton', | ||||||
|  | 	    baseurl: '/config/tape-backup-job/', | ||||||
|  | 	    confirmMsg: gettext('Remove entry?'), | ||||||
|  | 	    callback: 'reload', | ||||||
|  | 	}, | ||||||
|  | 	'-', | ||||||
|  | 	{ | ||||||
|  | 	    xtype: 'proxmoxButton', | ||||||
|  | 	    text: gettext('Show Log'), | ||||||
|  | 	    handler: 'openTaskLog', | ||||||
|  | 	    enableFn: (rec) => !!rec.data['last-run-upid'], | ||||||
|  | 	    disabled: true, | ||||||
|  | 	}, | ||||||
|  | 	{ | ||||||
|  | 	    xtype: 'proxmoxButton', | ||||||
|  | 	    text: gettext('Run now'), | ||||||
|  | 	    handler: 'runJob', | ||||||
|  | 	    disabled: true, | ||||||
|  | 	}, | ||||||
|  |     ], | ||||||
|  |  | ||||||
|     columns: [ |     columns: [ | ||||||
| 	{ | 	{ | ||||||
| 	    header: gettext('Job ID'), | 	    header: gettext('Job ID'), | ||||||
|  | |||||||
							
								
								
									
										82
									
								
								www/tape/window/TapeBackupJob.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								www/tape/window/TapeBackupJob.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,82 @@ | |||||||
|  | Ext.define('PBS.TapeManagement.BackupJobEdit', { | ||||||
|  |     extend: 'Proxmox.window.Edit', | ||||||
|  |     alias: 'widget.pbsTapeBackupJobEdit', | ||||||
|  |     mixins: ['Proxmox.Mixin.CBind'], | ||||||
|  |  | ||||||
|  |     userid: undefined, | ||||||
|  |  | ||||||
|  |     isAdd: true, | ||||||
|  |  | ||||||
|  |     subject: gettext('Tape Backup Job'), | ||||||
|  |  | ||||||
|  |     fieldDefaults: { labelWidth: 120 }, | ||||||
|  |  | ||||||
|  |     cbindData: function(initialConfig) { | ||||||
|  | 	let me = this; | ||||||
|  |  | ||||||
|  | 	let baseurl = '/api2/extjs/config/tape-backup-job'; | ||||||
|  | 	let id = initialConfig.id; | ||||||
|  |  | ||||||
|  | 	me.isCreate = !id; | ||||||
|  | 	me.url = id ? `${baseurl}/${id}` : baseurl; | ||||||
|  | 	me.method = id ? 'PUT' : 'POST'; | ||||||
|  | 	me.autoLoad = !!id; | ||||||
|  | 	me.scheduleValue = id ? null : 'daily'; | ||||||
|  | 	me.authid = id ? null : Proxmox.UserName; | ||||||
|  | 	me.editDatastore = me.datastore === undefined && me.isCreate; | ||||||
|  | 	return { }; | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     items: { | ||||||
|  | 	xtype: 'inputpanel', | ||||||
|  | 	onGetValues: function(values) { | ||||||
|  | 	    let me = this; | ||||||
|  |  | ||||||
|  | 	    if (!values.id && me.up('pbsTapeBackupJobEdit').isCreate) { | ||||||
|  | 		values.id = 's-' + Ext.data.identifier.Uuid.Global.generate().slice(0, 13); | ||||||
|  | 	    } | ||||||
|  | 	    return values; | ||||||
|  | 	}, | ||||||
|  | 	column1: [ | ||||||
|  | 	    { | ||||||
|  | 		xtype: 'pbsDataStoreSelector', | ||||||
|  | 		fieldLabel: gettext('Local Datastore'), | ||||||
|  | 		name: 'store', | ||||||
|  | 	    }, | ||||||
|  | 	    { | ||||||
|  | 		xtype: 'pbsMediaPoolSelector', | ||||||
|  | 		fieldLabel: gettext('Media Pool'), | ||||||
|  | 		name: 'pool', | ||||||
|  | 	    }, | ||||||
|  | 	    { | ||||||
|  | 		xtype: 'pbsDriveSelector', | ||||||
|  | 		fieldLabel: gettext('Drive'), | ||||||
|  | 		name: 'drive', | ||||||
|  | 	    }, | ||||||
|  | 	], | ||||||
|  |  | ||||||
|  | 	column2: [ | ||||||
|  | 	    { | ||||||
|  | 		fieldLabel: gettext('Schedule'), | ||||||
|  | 		xtype: 'pbsCalendarEvent', | ||||||
|  | 		name: 'schedule', | ||||||
|  | 		emptyText: gettext('none (disabled)'), | ||||||
|  | 		cbind: { | ||||||
|  | 		    deleteEmpty: '{!isCreate}', | ||||||
|  | 		    value: '{scheduleValue}', | ||||||
|  | 		}, | ||||||
|  | 	    }, | ||||||
|  | 	], | ||||||
|  |  | ||||||
|  | 	columnB: [ | ||||||
|  | 	    { | ||||||
|  | 		fieldLabel: gettext('Comment'), | ||||||
|  | 		xtype: 'proxmoxtextfield', | ||||||
|  | 		name: 'comment', | ||||||
|  | 		cbind: { | ||||||
|  | 		    deleteEmpty: '{!isCreate}', | ||||||
|  | 		}, | ||||||
|  | 	    }, | ||||||
|  | 	], | ||||||
|  |     }, | ||||||
|  | }); | ||||||
		Reference in New Issue
	
	Block a user