2021-02-02 14:00:39 +01:00
Ext . define ( 'pbs-model-tapes' , {
extend : 'Ext.data.Model' ,
fields : [
'catalog' ,
'ctime' ,
'expired' ,
'label-text' ,
'location' ,
'media-set-ctime' ,
'media-set-name' ,
'media-set-uuid' ,
2021-02-18 09:26:44 +01:00
{
name : 'pool' ,
defaultValue : '' ,
} ,
2021-02-02 14:00:39 +01:00
'seq-nr' ,
'status' ,
'uuid' ,
] ,
idProperty : 'label-text' ,
proxy : {
type : 'proxmox' ,
url : '/api2/json/tape/media/list' ,
2021-02-15 15:22:21 +01:00
timeout : 5 * 60 * 1000 ,
2021-02-02 14:00:39 +01:00
} ,
} ) ;
Ext . define ( 'PBS.TapeManagement.TapeInventory' , {
extend : 'Ext.grid.Panel' ,
alias : 'widget.pbsTapeInventory' ,
controller : {
xclass : 'Ext.app.ViewController' ,
2021-02-15 15:22:22 +01:00
addTape : function ( ) {
Ext . create ( 'PBS.TapeManagement.LabelMediaWindow' ) . show ( ) ;
} ,
2021-02-16 09:35:25 +01:00
erase : function ( ) {
let me = this ;
let view = me . getView ( ) ;
let selection = view . getSelection ( ) ;
if ( ! selection || selection . length < 1 ) {
return ;
}
let label = selection [ 0 ] . data [ 'label-text' ] ;
2021-02-16 12:48:10 +01:00
let inChanger = selection [ 0 ] . data . location . startsWith ( 'online-' ) ;
let changer ;
if ( inChanger ) {
changer = selection [ 0 ] . data . location . slice ( "online-" . length ) ;
}
Ext . create ( 'PBS.TapeManagement.EraseWindow' , {
label ,
changer ,
2021-02-16 09:35:25 +01:00
listeners : {
destroy : function ( ) {
me . reload ( ) ;
} ,
} ,
} ) . show ( ) ;
} ,
2021-02-11 14:11:20 +01:00
moveToVault : function ( ) {
let me = this ;
let view = me . getView ( ) ;
let selection = view . getSelection ( ) ;
if ( ! selection || selection . length < 1 ) {
return ;
}
let label = selection [ 0 ] . data [ 'label-text' ] ;
let inVault = selection [ 0 ] . data . location . startsWith ( 'vault-' ) ;
let vault = "" ;
if ( inVault ) {
vault = selection [ 0 ] . data . location . slice ( "vault-" . length ) ;
}
Ext . create ( 'Proxmox.window.Edit' , {
title : gettext ( 'Set Tape Location' ) ,
url : ` /api2/extjs/tape/media/move ` ,
method : 'POST' ,
items : [
{
xtype : 'displayfield' ,
name : 'label-text' ,
value : label ,
submitValue : true ,
fieldLabel : gettext ( 'Media' ) ,
} ,
{
xtype : 'proxmoxtextfield' ,
fieldLabel : gettext ( 'Vault' ) ,
name : 'vault-name' ,
value : vault ,
emptyText : gettext ( 'On-site' ) ,
skipEmpty : true ,
} ,
] ,
listeners : {
destroy : function ( ) {
me . reload ( ) ;
} ,
} ,
} ) . show ( ) ;
} ,
2021-02-02 14:00:39 +01:00
reload : function ( ) {
2021-02-15 15:22:21 +01:00
this . getView ( ) . getStore ( ) . load ( ) ;
2021-02-02 14:00:39 +01:00
} ,
} ,
listeners : {
2021-02-15 15:22:21 +01:00
activate : 'reload' ,
2021-02-02 14:00:39 +01:00
} ,
store : {
2021-02-15 15:22:21 +01:00
storeid : 'proxmox-tape-tapes' ,
model : 'pbs-model-tapes' ,
2021-02-02 14:00:39 +01:00
sorters : 'label-text' ,
2021-02-18 07:30:37 +01:00
groupField : 'pool' ,
2021-02-02 14:00:39 +01:00
} ,
2021-02-11 14:11:20 +01:00
tbar : [
2021-02-15 15:22:21 +01:00
{
text : gettext ( 'Reload' ) ,
handler : 'reload' ,
} ,
'-' ,
2021-02-15 15:22:22 +01:00
{
text : gettext ( 'Add Tape' ) ,
handler : 'addTape' ,
} ,
2021-02-11 14:11:20 +01:00
{
xtype : 'proxmoxButton' ,
text : gettext ( 'Set Tape Location' ) ,
disabled : true ,
handler : 'moveToVault' ,
enableFn : ( rec ) => ! rec . data . location . startsWith ( 'online-' ) ,
} ,
2021-02-16 09:35:25 +01:00
{
xtype : 'proxmoxButton' ,
text : gettext ( 'Erase' ) ,
disabled : true ,
handler : 'erase' ,
} ,
2021-02-11 14:11:20 +01:00
] ,
2021-02-18 07:30:37 +01:00
features : [
{
ftype : 'grouping' ,
groupHeaderTpl : [
'{name:this.formatName} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})' ,
{
formatName : function ( pool ) {
if ( pool === "" ) {
return "Free (no pool assignment)" ;
} else {
return pool ;
}
}
}
]
}
] ,
2021-02-02 14:00:39 +01:00
columns : [
{
text : gettext ( 'Label' ) ,
dataIndex : 'label-text' ,
flex : 1 ,
} ,
{
text : gettext ( 'Media Set' ) ,
dataIndex : 'media-set-name' ,
flex : 2 ,
sorter : function ( a , b ) {
return ( a . data [ 'media-set-ctime' ] || 0 ) - ( b . data [ 'media-set-ctime' ] || 0 ) ;
} ,
2021-02-18 07:30:37 +01:00
renderer : function ( value ) {
if ( value === undefined ) {
return "-- empty --" ;
} else {
return value ;
}
}
2021-02-02 14:00:39 +01:00
} ,
{
text : gettext ( 'Location' ) ,
dataIndex : 'location' ,
flex : 1 ,
renderer : function ( value ) {
if ( value === 'offline' ) {
2021-02-11 14:11:20 +01:00
return ` <i class="fa fa-circle-o"></i> ${ gettext ( "Offline" ) } ( ${ gettext ( 'On-site' ) } ) ` ;
2021-02-02 14:00:39 +01:00
} else if ( value . startsWith ( 'online-' ) ) {
let location = value . substring ( value . indexOf ( '-' ) + 1 ) ;
return ` <i class="fa fa-dot-circle-o"></i> ${ gettext ( "Online" ) } - ${ location } ` ;
} else if ( value . startsWith ( 'vault-' ) ) {
let location = value . substring ( value . indexOf ( '-' ) + 1 ) ;
return ` <i class="fa fa-archive"></i> ${ gettext ( "Vault" ) } - ${ location } ` ;
} else {
return value ;
}
} ,
} ,
{
text : gettext ( 'Status' ) ,
dataIndex : 'status' ,
2021-02-09 15:40:43 +01:00
renderer : function ( value , mD , record ) {
return record . data . expired ? 'expired' : value ;
} ,
2021-02-02 14:00:39 +01:00
flex : 1 ,
} ,
] ,
} ) ;