ui: tape: add DriveStatus panel
not used yet Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
1552d9699c
commit
7b60850334
@ -29,6 +29,7 @@ TAPE_UI_FILES= \
|
||||
tape/ChangerConfig.js \
|
||||
tape/ChangerStatus.js \
|
||||
tape/DriveConfig.js \
|
||||
tape/DriveStatus.js \
|
||||
tape/EncryptionKeys.js \
|
||||
tape/PoolConfig.js \
|
||||
tape/TapeInventory.js \
|
||||
|
212
www/tape/DriveStatus.js
Normal file
212
www/tape/DriveStatus.js
Normal file
@ -0,0 +1,212 @@
|
||||
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,
|
||||
|
||||
controller: {
|
||||
xclass: 'Ext.app.ViewController',
|
||||
|
||||
reload: function() {
|
||||
let me = this;
|
||||
me.lookup('statusgrid').rstore.load();
|
||||
},
|
||||
},
|
||||
|
||||
listeners: {
|
||||
activate: 'reload',
|
||||
},
|
||||
|
||||
tbar: [
|
||||
{
|
||||
xtype: 'proxmoxButton',
|
||||
handler: 'reload',
|
||||
text: gettext('Reload'),
|
||||
},
|
||||
],
|
||||
|
||||
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();
|
||||
},
|
||||
});
|
Loading…
Reference in New Issue
Block a user