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/PoolEdit.js				\ | ||||
| 	tape/window/TapeBackup.js			\ | ||||
| 	tape/window/TapeBackupJob.js			\ | ||||
| 	tape/window/TapeRestore.js			\ | ||||
| 	tape/BackupOverview.js				\ | ||||
| 	tape/ChangerConfig.js				\ | ||||
|  | ||||
| @ -34,6 +34,75 @@ Ext.define('PBS.config.TapeBackupJobView', { | ||||
|     controller: { | ||||
| 	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(); }, | ||||
|  | ||||
| 	stopStore: function() { this.getView().getStore().rstore.stopUpdate(); }, | ||||
| @ -48,7 +117,7 @@ Ext.define('PBS.config.TapeBackupJobView', { | ||||
|     listeners: { | ||||
| 	activate: 'startStore', | ||||
| 	deactivate: 'stopStore', | ||||
| 	//itemdblclick: 'editSyncJob', | ||||
| 	itemdblclick: 'editJob', | ||||
|     }, | ||||
|  | ||||
|     store: { | ||||
| @ -68,6 +137,41 @@ Ext.define('PBS.config.TapeBackupJobView', { | ||||
| 	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: [ | ||||
| 	{ | ||||
| 	    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