diff --git a/www/DataStoreContent.js b/www/DataStoreContent.js index 62e57817..6a5cec0e 100644 --- a/www/DataStoreContent.js +++ b/www/DataStoreContent.js @@ -10,6 +10,7 @@ Ext.define('pbs-data-store-snapshots', { }, 'files', 'owner', + 'verification', { name: 'size', type: 'int', allowNull: true, }, { name: 'crypt-mode', @@ -209,6 +210,10 @@ Ext.define('PBS.DataStoreContent', { group.size = item.size; group.owner = item.owner; } + if (item.verification && + (!group.verification || group.verification.state !== 'failed')) { + group.verification = item.verification; + } } group.count = group.children.length; @@ -563,6 +568,41 @@ Ext.define('PBS.DataStoreContent', { return (iconTxt + PBS.Utils.cryptText[v]) || Proxmox.Utils.unknownText } }, + { + header: gettext('Verify State'), + sortable: true, + dataIndex: 'verification', + renderer: (v, meta, record) => { + if (v === undefined || v === null || !v.state) { + //meta.tdCls = "x-grid-row-loading"; + return record.data.leaf ? '' : gettext('None'); + } + let task = Proxmox.Utils.parse_task_upid(v.upid); + let verify_time = Proxmox.Utils.render_timestamp(task.starttime); + let iconCls = v.state === 'ok' ? 'check good' : 'times critical'; + let tip = `Verify task started on ${verify_time}`; + if (record.parentNode.id === 'root') { + tip = v.state === 'ok' + ? 'All verification OK in backup group' + : 'At least one failed verification in backup group!'; + } + return ` + ${v.state} + `; + }, + listeners: { + dblclick: function(view, el, row, col, ev, rec) { + let data = rec.data || {}; + let verify = data.verification; + if (verify && verify.upid && rec.parentNode.id !== 'root') { + let win = Ext.create('Proxmox.window.TaskViewer', { + upid: verify.upid, + }); + win.show(); + } + }, + }, + }, ], tbar: [