2021-03-01 12:22:39 +01:00
Ext . define ( 'PBS.TapeManagement.DriveStatus' , {
extend : 'Ext.panel.Panel' ,
alias : 'widget.pbsDriveStatus' ,
mixins : [ 'Proxmox.Mixin.CBind' ] ,
cbindData : function ( config ) {
let me = this ;
me . setTitle ( ` ${ gettext ( 'Drive' ) } : ${ me . drive } ` ) ;
return {
driveStatusUrl : ` /api2/json/tape/drive/ ${ me . drive } /status ` ,
} ;
} ,
scrollable : true ,
bodyPadding : 5 ,
2021-03-01 14:10:32 +01:00
viewModel : {
data : {
online : false ,
} ,
} ,
2021-03-01 12:22:39 +01:00
controller : {
xclass : 'Ext.app.ViewController' ,
reload : function ( ) {
let me = this ;
me . lookup ( 'statusgrid' ) . rstore . load ( ) ;
} ,
2021-03-01 14:10:32 +01:00
onLoad : function ( ) {
let me = this ;
let statusgrid = me . lookup ( 'statusgrid' ) ;
let statusFlags = ( statusgrid . getObjectValue ( 'status' ) || "" ) . split ( /\s+|\s+/ ) ;
let online = statusFlags . indexOf ( 'ONLINE' ) !== - 1 ;
let vm = me . getViewModel ( ) ;
vm . set ( 'online' , online ) ;
} ,
labelMedia : function ( ) {
let me = this ;
Ext . create ( 'PBS.TapeManagement.LabelMediaWindow' , {
driveid : me . getView ( ) . drive ,
} ) . show ( ) ;
} ,
eject : function ( ) {
let me = this ;
let view = me . getView ( ) ;
let driveid = view . drive ;
PBS . Utils . driveCommand ( driveid , 'eject-media' , {
waitMsgTarget : view ,
method : 'POST' ,
success : function ( response ) {
Ext . create ( 'Proxmox.window.TaskProgress' , {
upid : response . result . data ,
taskDone : function ( ) {
me . reload ( ) ;
} ,
} ) . show ( ) ;
} ,
} ) ;
} ,
catalog : function ( ) {
let me = this ;
let view = me . getView ( ) ;
let drive = view . drive ;
PBS . Utils . driveCommand ( drive , 'catalog' , {
waitMsgTarget : view ,
method : 'POST' ,
success : function ( response ) {
Ext . create ( 'Proxmox.window.TaskViewer' , {
upid : response . result . data ,
taskDone : function ( ) {
me . reload ( ) ;
} ,
} ) . show ( ) ;
} ,
} ) ;
} ,
init : function ( view ) {
let me = this ;
me . mon ( me . lookup ( 'statusgrid' ) . getStore ( ) . rstore , 'load' , 'onLoad' ) ;
} ,
2021-03-01 12:22:39 +01:00
} ,
listeners : {
activate : 'reload' ,
} ,
tbar : [
{
xtype : 'proxmoxButton' ,
handler : 'reload' ,
text : gettext ( 'Reload' ) ,
} ,
2021-03-01 14:10:32 +01:00
'-' ,
{
text : gettext ( 'Label Media' ) ,
xtype : 'proxmoxButton' ,
handler : 'labelMedia' ,
iconCls : 'fa fa-barcode' ,
disabled : true ,
bind : {
disabled : '{!online}' ,
} ,
} ,
{
text : gettext ( 'Eject' ) ,
xtype : 'proxmoxButton' ,
handler : 'ejectMedia' ,
iconCls : 'fa fa-eject' ,
disabled : true ,
bind : {
disabled : '{!online}' ,
} ,
} ,
{
text : gettext ( 'Catalog' ) ,
xtype : 'proxmoxButton' ,
handler : 'catalog' ,
iconCls : 'fa fa-book' ,
disabled : true ,
bind : {
disabled : '{!online}' ,
} ,
} ,
2021-03-01 12:22:39 +01:00
] ,
items : [
{
xtype : 'container' ,
layout : {
type : 'hbox' ,
align : 'stretch' ,
} ,
defaults : {
padding : 5 ,
flex : 1 ,
} ,
items : [
{
xtype : 'pbsDriveInfoPanel' ,
cbind : {
drive : '{drive}' ,
} ,
} ,
{
xtype : 'pbsDriveStatusGrid' ,
reference : 'statusgrid' ,
cbind : {
url : '{driveStatusUrl}' ,
} ,
} ,
] ,
} ,
] ,
} ) ;
Ext . define ( 'PBS.TapeManagement.DriveStatusGrid' , {
extend : 'Proxmox.grid.ObjectGrid' ,
alias : 'widget.pbsDriveStatusGrid' ,
title : gettext ( 'Status' ) ,
rows : {
'blocksize' : {
required : true ,
header : gettext ( 'Blocksize' ) ,
renderer : function ( value ) {
if ( ! value ) {
return gettext ( 'Dynamic' ) ;
}
return ` ${ gettext ( 'Fixed' ) } - ${ Proxmox . Utils . format _size ( value ) } ` ;
} ,
} ,
'options' : {
required : true ,
header : gettext ( 'Options' ) ,
defaultValue : '' ,
} ,
'status' : {
required : true ,
header : gettext ( 'Status' ) ,
} ,
'density' : {
header : gettext ( 'Tape Density' ) ,
} ,
'manufactured' : {
header : gettext ( 'Tape Manufacture Date' ) ,
renderer : function ( value ) {
if ( value ) {
return new Date ( value * 1000 ) ;
}
return "" ;
} ,
} ,
'bytes-read' : {
header : gettext ( 'Tape Read' ) ,
renderer : Proxmox . Utils . format _size ,
} ,
'bytes-written' : {
header : gettext ( 'Tape Written' ) ,
renderer : Proxmox . Utils . format _size ,
} ,
} ,
} ) ;
Ext . define ( 'PBS.TapeManagement.DriveInfoPanel' , {
extend : 'Ext.panel.Panel' ,
alias : 'widget.pbsDriveInfoPanel' ,
title : gettext ( 'Information' ) ,
defaults : {
printBar : false ,
padding : 5 ,
} ,
bodyPadding : 15 ,
viewModel : {
data : { } ,
} ,
items : [
{
xtype : 'pmxInfoWidget' ,
title : gettext ( 'Name' ) ,
bind : {
data : {
text : '{name}' ,
} ,
} ,
} ,
{
xtype : 'pmxInfoWidget' ,
title : gettext ( 'Vendor' ) ,
bind : {
data : {
text : '{vendor}' ,
} ,
} ,
} ,
{
xtype : 'pmxInfoWidget' ,
title : gettext ( 'Model' ) ,
bind : {
data : {
text : '{model}' ,
} ,
} ,
} ,
{
xtype : 'pmxInfoWidget' ,
title : gettext ( 'Serial' ) ,
bind : {
data : {
text : '{serial}' ,
} ,
} ,
} ,
{
xtype : 'pmxInfoWidget' ,
title : gettext ( 'Path' ) ,
bind : {
data : {
text : '{path}' ,
} ,
} ,
} ,
] ,
updateData : function ( record ) {
let me = this ;
if ( ! record ) {
return ;
}
let vm = me . getViewModel ( ) ;
for ( const [ key , value ] of Object . entries ( record . data ) ) {
vm . set ( key , value ) ;
}
} ,
initComponent : function ( ) {
let me = this ;
if ( ! me . drive ) {
throw "no drive given" ;
}
let tapeStore = Ext . ComponentQuery . query ( 'navigationtree' ) [ 0 ] . tapestore ;
me . mon ( tapeStore , 'load' , function ( ) {
let driveRecord = tapeStore . findRecord ( 'name' , me . drive , 0 , false , true , true ) ;
me . updateData ( driveRecord ) ;
} ) ;
if ( ! tapeStore . isLoading ) {
let driveRecord = tapeStore . findRecord ( 'name' , me . drive , 0 , false , true , true ) ;
me . updateData ( driveRecord ) ;
}
me . callParent ( ) ;
} ,
} ) ;