* [pbs-devel] [PATCH proxmox-backup 2/5] ui: tape: add Changer config grid
2021-01-29 13:57 [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dominik Csapak
@ 2021-01-29 13:57 ` Dominik Csapak
2021-01-29 15:55 ` [pbs-devel] applied: " Dietmar Maurer
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 3/5] ui: tape/ChangerStatus: add import action for import/export slots Dominik Csapak
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Dominik Csapak @ 2021-01-29 13:57 UTC (permalink / raw)
To: pbs-devel
analogous to the drive grid
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/Makefile | 1 +
www/tape/ChangerConfig.js | 128 +++++++++++++++++++++++++++++++++++++
www/tape/TapeManagement.js | 7 +-
3 files changed, 135 insertions(+), 1 deletion(-)
create mode 100644 www/tape/ChangerConfig.js
diff --git a/www/Makefile b/www/Makefile
index 91899028..7a47ad8d 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -21,6 +21,7 @@ TAPE_UI_FILES= \
tape/window/PoolEdit.js \
tape/window/TapeBackup.js \
tape/BackupOverview.js \
+ tape/ChangerConfig.js \
tape/ChangerStatus.js \
tape/DriveConfig.js \
tape/PoolConfig.js \
diff --git a/www/tape/ChangerConfig.js b/www/tape/ChangerConfig.js
new file mode 100644
index 00000000..a4258dfd
--- /dev/null
+++ b/www/tape/ChangerConfig.js
@@ -0,0 +1,128 @@
+Ext.define('pbs-model-changers', {
+ extend: 'Ext.data.Model',
+ fields: ['path', 'model', 'name', 'serial', 'vendor', 'export-slots'],
+ idProperty: 'name',
+});
+
+Ext.define('PBS.TapeManagement.ChangerPanel', {
+ extend: 'Ext.grid.Panel',
+ alias: 'widget.pbsTapeChangerPanel',
+
+ controller: {
+ xclass: 'Ext.app.ViewController',
+
+ onAdd: function() {
+ let me = this;
+ Ext.create('PBS.TapeManagement.ChangerEditWindow', {
+ listeners: {
+ destroy: function() {
+ me.reload();
+ },
+ },
+ }).show();
+ },
+
+ onEdit: function() {
+ let me = this;
+ let view = me.getView();
+ let selection = view.getSelection();
+ if (!selection || selection.length < 1) {
+ return;
+ }
+ Ext.create('PBS.TapeManagement.ChangerEditWindow', {
+ changerid: selection[0].data.name,
+ autoLoad: true,
+ listeners: {
+ destroy: () => me.reload(),
+ },
+ }).show();
+ },
+
+ reload: function() {
+ this.getView().getStore().rstore.load();
+ },
+
+ stopStore: function() {
+ this.getView().getStore().rstore.stopUpdate();
+ },
+
+ startStore: function() {
+ this.getView().getStore().rstore.startUpdate();
+ },
+ },
+
+ listeners: {
+ beforedestroy: 'stopStore',
+ deactivate: 'stopStore',
+ activate: 'startStore',
+ itemdblclick: 'onEdit',
+ },
+
+ store: {
+ type: 'diff',
+ rstore: {
+ type: 'update',
+ storeid: 'proxmox-tape-changers',
+ model: 'pbs-model-changers',
+ proxy: {
+ type: 'proxmox',
+ url: "/api2/json/tape/changer",
+ },
+ },
+ sorters: 'name',
+ },
+
+ tbar: [
+ {
+ text: gettext('Add'),
+ xtype: 'proxmoxButton',
+ handler: 'onAdd',
+ selModel: false,
+ },
+ '-',
+ {
+ text: gettext('Edit'),
+ xtype: 'proxmoxButton',
+ handler: 'onEdit',
+ disabled: true,
+ },
+ {
+ xtype: 'proxmoxStdRemoveButton',
+ baseurl: '/api2/extjs/config/changer',
+ callback: 'reload',
+ },
+ ],
+ columns: [
+ {
+ text: gettext('Name'),
+ dataIndex: 'name',
+ flex: 1,
+ },
+ {
+ text: gettext('Path'),
+ dataIndex: 'path',
+ flex: 2,
+ },
+ {
+ text: gettext('Vendor'),
+ dataIndex: 'vendor',
+ flex: 1,
+ },
+ {
+ text: gettext('Model'),
+ dataIndex: 'model',
+ flex: 1,
+ },
+ {
+ text: gettext('Serial'),
+ dataIndex: 'serial',
+ flex: 1,
+ },
+ {
+ text: gettext('Import/Export Slots'),
+ dataIndex: 'export-slots',
+ flex: 1,
+ },
+ ],
+});
+
diff --git a/www/tape/TapeManagement.js b/www/tape/TapeManagement.js
index f61c26d7..8461b0b3 100644
--- a/www/tape/TapeManagement.js
+++ b/www/tape/TapeManagement.js
@@ -16,10 +16,15 @@ Ext.define('PBS.TapeManagement', {
itemId: 'backup',
xtype: 'pbsBackupOverview',
},
+ {
+ title: gettext('Library'),
+ itemId: 'library',
+ xtype: 'pbsChangerStatus',
+ },
{
title: gettext('Changers'),
itemId: 'changers',
- xtype: 'pbsChangerStatus',
+ xtype: 'pbsTapeChangerPanel',
},
{
title: gettext('Drives'),
--
2.20.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pbs-devel] [PATCH proxmox-backup 3/5] ui: tape/ChangerStatus: add import action for import/export slots
2021-01-29 13:57 [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dominik Csapak
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 2/5] ui: tape: add Changer config grid Dominik Csapak
@ 2021-01-29 13:57 ` Dominik Csapak
2021-01-29 15:55 ` [pbs-devel] applied: " Dietmar Maurer
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 4/5] ui: tape: change wrong window title Dominik Csapak
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Dominik Csapak @ 2021-01-29 13:57 UTC (permalink / raw)
To: pbs-devel
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/tape/ChangerStatus.js | 43 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git a/www/tape/ChangerStatus.js b/www/tape/ChangerStatus.js
index 75af75ce..59cc74c8 100644
--- a/www/tape/ChangerStatus.js
+++ b/www/tape/ChangerStatus.js
@@ -49,6 +49,39 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
}).show();
},
+ importTape: function(view, rI, cI, button, el, record) {
+ let me = this;
+ let vm = me.getViewModel();
+ let from = record.data['entry-id'];
+ let changer = encodeURIComponent(vm.get('changer'));
+ Ext.create('Proxmox.window.Edit', {
+ title: gettext('Import'),
+ isCreate: true,
+ submitText: gettext('OK'),
+ method: 'POST',
+ url: `/api2/extjs/tape/changer/${changer}/transfer`,
+ items: [
+ {
+ xtype: 'displayfield',
+ name: 'from',
+ value: from,
+ submitValue: true,
+ fieldLabel: gettext('From Slot'),
+ },
+ {
+ xtype: 'proxmoxintegerfield',
+ name: 'to',
+ fieldLabel: gettext('To Slot'),
+ },
+ ],
+ listeners: {
+ destroy: function() {
+ me.reload();
+ },
+ },
+ }).show();
+ },
+
slotTransfer: function(view, rI, cI, button, el, record) {
let me = this;
let vm = me.getViewModel();
@@ -618,7 +651,15 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
},
{
text: gettext('Actions'),
- items: [],
+ xtype: 'actioncolumn',
+ items: [
+ {
+ iconCls: 'fa fa-rotate-270 fa-upload',
+ handler: 'importTape',
+ tooltip: gettext('Import'),
+ isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
+ },
+ ],
width: 80,
},
],
--
2.20.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pbs-devel] [PATCH proxmox-backup 4/5] ui: tape: change wrong window title
2021-01-29 13:57 [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dominik Csapak
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 2/5] ui: tape: add Changer config grid Dominik Csapak
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 3/5] ui: tape/ChangerStatus: add import action for import/export slots Dominik Csapak
@ 2021-01-29 13:57 ` Dominik Csapak
2021-01-29 15:56 ` [pbs-devel] applied: " Dietmar Maurer
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 5/5] ui: tape/ChangerStatus: add missing tooltips Dominik Csapak
2021-01-29 15:37 ` [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dietmar Maurer
4 siblings, 1 reply; 11+ messages in thread
From: Dominik Csapak @ 2021-01-29 13:57 UTC (permalink / raw)
To: pbs-devel
this is the 'status' msgbox not the label information
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/tape/ChangerStatus.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/www/tape/ChangerStatus.js b/www/tape/ChangerStatus.js
index 59cc74c8..ecfdc424 100644
--- a/www/tape/ChangerStatus.js
+++ b/www/tape/ChangerStatus.js
@@ -316,7 +316,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
let txt = lines.join('<br>');
Ext.Msg.show({
- title: gettext('Label Information'),
+ title: gettext('Status'),
message: txt,
icon: undefined,
});
--
2.20.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pbs-devel] [PATCH proxmox-backup 5/5] ui: tape/ChangerStatus: add missing tooltips
2021-01-29 13:57 [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dominik Csapak
` (2 preceding siblings ...)
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 4/5] ui: tape: change wrong window title Dominik Csapak
@ 2021-01-29 13:57 ` Dominik Csapak
2021-01-29 15:56 ` [pbs-devel] applied: " Dietmar Maurer
2021-01-29 15:37 ` [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dietmar Maurer
4 siblings, 1 reply; 11+ messages in thread
From: Dominik Csapak @ 2021-01-29 13:57 UTC (permalink / raw)
To: pbs-devel
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/tape/ChangerStatus.js | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/www/tape/ChangerStatus.js b/www/tape/ChangerStatus.js
index ecfdc424..78265024 100644
--- a/www/tape/ChangerStatus.js
+++ b/www/tape/ChangerStatus.js
@@ -527,11 +527,13 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
{
iconCls: 'fa fa-rotate-90 fa-exchange',
handler: 'slotTransfer',
+ tooltip: gettext('Transfer'),
isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
},
{
iconCls: 'fa fa-rotate-90 fa-upload',
handler: 'load',
+ tooltip: gettext('Load'),
isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
},
],
@@ -601,29 +603,35 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
{
iconCls: 'fa fa-rotate-270 fa-upload',
handler: 'unload',
+ tooltip: gettext('Unload'),
isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
},
{
iconCls: 'fa fa-hdd-o',
handler: 'cartridgeMemory',
+ tooltip: gettext('Cartridge Memory'),
isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
},
{
iconCls: 'fa fa-line-chart',
handler: 'volumeStatistics',
+ tooltip: gettext('Volume Statistics'),
isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
},
{
iconCls: 'fa fa-tag',
handler: 'readLabel',
+ tooltip: gettext('Read Label'),
isDisabled: (v, r, c, i, rec) => !rec.data['label-text'],
},
{
iconCls: 'fa fa-info-circle',
+ tooltip: gettext('Status'),
handler: 'status',
},
{
iconCls: 'fa fa-shower',
+ tooltip: gettext('Clean Drive'),
handler: 'cleanDrive',
},
],
--
2.20.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry
2021-01-29 13:57 [pbs-devel] [PATCH proxmox-backup 1/5] api2/tape: add export_slots to DriveListEntry Dominik Csapak
` (3 preceding siblings ...)
2021-01-29 13:57 ` [pbs-devel] [PATCH proxmox-backup 5/5] ui: tape/ChangerStatus: add missing tooltips Dominik Csapak
@ 2021-01-29 15:37 ` Dietmar Maurer
2021-01-30 8:39 ` Dietmar Maurer
4 siblings, 1 reply; 11+ messages in thread
From: Dietmar Maurer @ 2021-01-29 15:37 UTC (permalink / raw)
To: Proxmox Backup Server development discussion, Dominik Csapak
Stupid question, but why does list_drives and list_changers
return DriveListEntry?
Those function should simple return the configuration?
Vec<ScsiTapeChanger> and Vec<LinuxTapeDrive>
What do I miss?
^ permalink raw reply [flat|nested] 11+ messages in thread