From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 489CC673A2 for ; Mon, 9 Nov 2020 15:53:44 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 401FC18110 for ; Mon, 9 Nov 2020 15:53:14 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 1306C18103 for ; Mon, 9 Nov 2020 15:53:13 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id D264345E4D for ; Mon, 9 Nov 2020 15:53:12 +0100 (CET) From: Fabian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 9 Nov 2020 15:53:07 +0100 Message-Id: <20201109145308.29679-1-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.027 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup 1/2] ui: prune: show which rule keeps backup X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Nov 2020 14:53:44 -0000 and adjust layout so the description fits. Signed-off-by: Fabian Ebner --- www/datastore/Prune.js | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/www/datastore/Prune.js b/www/datastore/Prune.js index 7475aa9e..531204f1 100644 --- a/www/datastore/Prune.js +++ b/www/datastore/Prune.js @@ -44,6 +44,46 @@ Ext.define('PBS.DataStorePruneInputPanel', { reload: function() { var view = this.getView(); + // helper to allow showing why a backup is kept + let addKeepReasons = function(backups, params) { + const rules = [ + 'keep-last', + 'keep-hourly', + 'keep-daily', + 'keep-weekly', + 'keep-monthly', + 'keep-yearly', + 'keep-all', // when all keep options are not set + ]; + let counter = {}; + + backups.sort(function(a, b) { + return a["backup-time"] < b["backup-time"]; + }); + + let ruleIndex = -1; + let nextRule = function() { + let rule; + do { + ruleIndex++; + rule = rules[ruleIndex]; + } while (!params[rule] && rule !== 'keep-all'); + counter[rule] = 0; + return rule; + }; + + let rule = nextRule(); + for (let backup of backups) { + if (backup.keep) { + counter[rule]++; + backup.keepReason = rule; + if (rule !== 'keep-all' && counter[rule] >= params[rule]) { + rule = nextRule(); + } + } + } + }; + let params = view.getValues(); params["dry-run"] = true; @@ -59,6 +99,7 @@ Ext.define('PBS.DataStorePruneInputPanel', { }, success: function(response, options) { var data = response.result.data; + addKeepReasons(data, params); view.prune_store.setData(data); }, }); @@ -146,6 +187,14 @@ Ext.define('PBS.DataStorePruneInputPanel', { { text: "keep", dataIndex: 'keep', + renderer: function(value, metaData, record) { + if (record.data.keep) { + return 'true (' + record.data.keepReason + ')'; + } else { + return 'false'; + } + }, + flex: 1, }, ], }, @@ -163,6 +212,8 @@ Ext.define('PBS.DataStorePrune', { isCreate: true, + fieldDefaults: { labelWidth: 120 }, + initComponent: function() { var me = this; -- 2.20.1