From: Fabian Ebner <f.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [RFC v2 widget-toolkit 10/10] APT: show warnings for repositories
Date: Fri, 26 Feb 2021 16:09:59 +0100 [thread overview]
Message-ID: <20210226150959.9518-11-f.ebner@proxmox.com> (raw)
In-Reply-To: <20210226150959.9518-1-f.ebner@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
Changes from v1:
* Use the row body feature to pin warnings to the repository they are for
and make warnings more prominent.
* Also check the subscription status.
Sent as an RFC, because there's probably a better way than using the
title bar for the global warning.
src/node/APTRepositories.js | 116 +++++++++++++++++++++++++++++++++++-
1 file changed, 115 insertions(+), 1 deletion(-)
diff --git a/src/node/APTRepositories.js b/src/node/APTRepositories.js
index f4a3a43..c8033df 100644
--- a/src/node/APTRepositories.js
+++ b/src/node/APTRepositories.js
@@ -21,6 +21,51 @@ Ext.define('Proxmox.node.APTRepositories', {
sortableColumns: false,
+ viewModel: {
+ data: {
+ subscriptionActive: '',
+ noSubscriptionRepo: '',
+ enterpriseRepo: '',
+ },
+ formulas: {
+ globalWarning: function(get) {
+ if (get('subscriptionActive') === '' ||
+ get('noSubscriptionRepo') === '' ||
+ get('enterpriseRepo') === '') {
+ return '';
+ }
+
+ if (!get('subscriptionActive') && get('enterpriseRepo')) {
+ return "WARNING: The enterprise repository is configured " +
+ "but there is no active subscription!";
+ }
+
+ if (get('noSubscriptionRepo')) {
+ return "WARNING: The no-subscription repository is not " +
+ "recommended for production use!";
+ }
+
+ if (!get('enterpriseRepo') && !get('noSubscriptionRepo')) {
+ return "WARNING: Neither the enterprise nor the " +
+ "no-subscription repository is active!";
+ }
+
+ return '';
+ },
+ },
+ },
+
+ tbar: [
+ {
+ xtype: 'label',
+ text: 'default',
+ style: 'color: red;',
+ bind: {
+ text: '{globalWarning}',
+ },
+ },
+ ],
+
columns: [
{
header: gettext('Enabled'),
@@ -94,6 +139,71 @@ Ext.define('Proxmox.node.APTRepositories', {
},
],
+ check_repositories: function(rowBodyFeature) {
+ let me = this;
+ let vm = me.getViewModel();
+
+ Proxmox.Utils.API2Request({
+ url: `/nodes/${me.nodename}/apt/checkrepositories`,
+ method: 'GET',
+ failure: function(response, opts) {
+ Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+ },
+ success: function(response, opts) {
+ const data = response.result.data;
+
+ vm.set('enterpriseRepo', data.enterprise);
+ vm.set('noSubscriptionRepo', data.nosubscription);
+
+ let warnings = {};
+ for (const warning of data.warnings) {
+ const key = `${warning.Path}:${warning.Number}`;
+ if (warnings[key]) {
+ warnings[key] += "\n";
+ warnings[key] += "Warning: " + warning.Warning;
+ } else {
+ warnings[key] = "Warning: " + warning.Warning;
+ }
+ }
+
+ rowBodyFeature.getAdditionalData = function(innerData, rowIndex, record, orig) {
+ let headerCt = this.view.headerCt;
+ let colspan = headerCt.getColumnCount();
+
+ const key = `${innerData.Path}:${innerData.Number}`;
+ const warning_text = warnings[key];
+
+ return {
+ rowBody: '<div style="color: red; white-space: pre-line">' +
+ Ext.String.htmlEncode(warning_text) +
+ '</div>',
+ rowBodyCls: warning_text ? '' : Ext.baseCSSPrefix + 'grid-row-body-hidden',
+ rowBodyColspan: colspan,
+ };
+ };
+ },
+ });
+ },
+
+ check_subscription: function() {
+ let me = this;
+ let vm = me.getViewModel();
+
+ Proxmox.Utils.API2Request({
+ url: `/nodes/${me.nodename}/subscription`,
+ method: 'GET',
+ failure: function(response, opts) {
+ Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+ },
+ success: function(response, opts) {
+ const res = response.result;
+ const subscription = !(res === null || res === undefined ||
+ !res || res.data.status.toLowerCase() !== 'active');
+ vm.set('subscriptionActive', subscription);
+ },
+ });
+ },
+
initComponent: function() {
let me = this;
@@ -116,6 +226,8 @@ Ext.define('Proxmox.node.APTRepositories', {
],
});
+ let rowBodyFeature = Ext.create('Ext.grid.feature.RowBody', {});
+
let groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
groupHeaderTpl: '{[ "File: " + values.name ]} ({rows.length} ' +
'repositor{[values.rows.length > 1 ? "ies" : "y"]})',
@@ -124,6 +236,8 @@ Ext.define('Proxmox.node.APTRepositories', {
let reload = function() {
store.load();
+ me.check_repositories(rowBodyFeature);
+ me.check_subscription();
};
let sm = Ext.create('Ext.selection.RowModel', {});
@@ -131,7 +245,7 @@ Ext.define('Proxmox.node.APTRepositories', {
Ext.apply(me, {
store: store,
selModel: sm,
- features: [groupingFeature],
+ features: [groupingFeature, rowBodyFeature],
listeners: {
activate: reload,
},
--
2.20.1
prev parent reply other threads:[~2021-02-26 15:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-26 15:09 [pbs-devel] [PATCH/RFC-SERIES v2] APT repositories API/UI Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-apt 01/10] initial commit Fabian Ebner
2021-03-10 15:14 ` Wolfgang Bumiller
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-apt 02/10] add files for Debian packaging Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-apt 03/10] add functions to check for Proxmox repositories Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-apt 04/10] add check_repositories function Fabian Ebner
2021-03-10 15:17 ` Wolfgang Bumiller
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-backup 05/10] cargo: depend on new proxmox-apt crate Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-backup 06/10] api: apt: add repositories call Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 widget-toolkit 07/10] add UI for APT repositories Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [PATCH v2 proxmox-backup 08/10] ui: add grid " Fabian Ebner
2021-02-26 15:09 ` [pbs-devel] [RFC v2 proxmox-backup 09/10] api: apt: add check_repositories_call Fabian Ebner
2021-02-26 15:09 ` Fabian Ebner [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210226150959.9518-11-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox