From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v5 8/8] ui: add MetricServerView and use it
Date: Wed, 2 Feb 2022 10:50:19 +0100 [thread overview]
Message-ID: <20220202095019.1799843-11-d.csapak@proxmox.com> (raw)
In-Reply-To: <20220202095019.1799843-1-d.csapak@proxmox.com>
simple CRUD interface to show/add/edit/delete metric servers
it's a bit different from PVE's so that it's harder to reuse that to
copy it. If we need it again, we can still refactor and combine them.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/Makefile | 1 +
www/NavigationTree.js | 6 ++
www/config/MetricServerView.js | 145 +++++++++++++++++++++++++++++++++
3 files changed, 152 insertions(+)
create mode 100644 www/config/MetricServerView.js
diff --git a/www/Makefile b/www/Makefile
index df471e2c..08062dfc 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -56,6 +56,7 @@ JSSRC= \
config/WebauthnView.js \
config/CertificateView.js \
config/NodeOptionView.js \
+ config/MetricServerView.js \
window/ACLEdit.js \
window/BackupFileDownloader.js \
window/BackupGroupChangeOwner.js \
diff --git a/www/NavigationTree.js b/www/NavigationTree.js
index 576d05ab..4d7d4280 100644
--- a/www/NavigationTree.js
+++ b/www/NavigationTree.js
@@ -62,6 +62,12 @@ Ext.define('PBS.store.NavigationStore', {
path: 'pbsCertificateConfiguration',
leaf: true,
},
+ {
+ text: gettext('Metric Server'),
+ iconCls: 'fa fa-bar-chart',
+ path: 'pbsMetricServerView',
+ leaf: true,
+ },
{
text: gettext('Subscription'),
iconCls: 'fa fa-support',
diff --git a/www/config/MetricServerView.js b/www/config/MetricServerView.js
new file mode 100644
index 00000000..b904a427
--- /dev/null
+++ b/www/config/MetricServerView.js
@@ -0,0 +1,145 @@
+Ext.define('PBS.config.MetricServerView', {
+ extend: 'Ext.grid.Panel',
+ alias: ['widget.pbsMetricServerView'],
+
+ stateful: true,
+ stateId: 'grid-metricserver',
+
+ controller: {
+ xclass: 'Ext.app.ViewController',
+
+ render_type: function(value) {
+ switch (value) {
+ case 'influxdb-http': return "InfluxDB (HTTP)";
+ case 'influxdb-udp': return "InfluxDB (UDP)";
+ default: return Proxmox.Utils.unknownText;
+ }
+ },
+
+ get_xtype: function(value) {
+ switch (value) {
+ case 'influxdb-http': return "InfluxDbHttp";
+ case 'influxdb-udp': return "InfluxDbUdp";
+ default: throw "invalid type";
+ }
+ },
+
+ editWindow: function(xtype, id) {
+ let me = this;
+ Ext.create(`PBS.window.${xtype}Edit`, {
+ serverid: id,
+ autoShow: true,
+ autoLoad: true,
+ listeners: {
+ destroy: () => me.reload(),
+ },
+ });
+ },
+
+ addServer: function(button) {
+ this.editWindow(this.get_xtype(button.type));
+ },
+
+ editServer: function() {
+ let me = this;
+ let view = me.getView();
+ let selection = view.getSelection();
+ if (!selection || selection.length < 1) {
+ return;
+ }
+
+ let cfg = selection[0].data;
+
+ let xtype = me.get_xtype(cfg.type);
+ me.editWindow(xtype, cfg.name);
+ },
+
+ reload: function() {
+ this.getView().getStore().load();
+ },
+ },
+
+ store: {
+ autoLoad: true,
+ id: 'metricservers',
+ proxy: {
+ type: 'proxmox',
+ url: '/api2/json/admin/metricserver',
+ },
+ },
+
+ columns: [
+ {
+ text: gettext('Name'),
+ flex: 2,
+ dataIndex: 'name',
+ },
+ {
+ text: gettext('Type'),
+ width: 150,
+ dataIndex: 'type',
+ renderer: 'render_type',
+ },
+ {
+ text: gettext('Enabled'),
+ dataIndex: 'disable',
+ width: 100,
+ renderer: Proxmox.Utils.format_neg_boolean,
+ },
+ {
+ text: gettext('Target Server'),
+ width: 200,
+ dataIndex: 'server',
+ },
+ {
+ text: gettext('Comment'),
+ flex: 3,
+ dataIndex: 'comment',
+ renderer: Ext.htmlEncode,
+ },
+ ],
+
+ tbar: [
+ {
+ text: gettext('Add'),
+ menu: [
+ {
+ text: 'InfluxDB (HTTP)',
+ type: 'influxdb-http',
+ iconCls: 'fa fa-fw fa-bar-chart',
+ handler: 'addServer',
+ },
+ {
+ text: 'InfluxDB (UDP)',
+ type: 'influxdb-udp',
+ iconCls: 'fa fa-fw fa-bar-chart',
+ handler: 'addServer',
+ },
+ ],
+ },
+ {
+ text: gettext('Edit'),
+ xtype: 'proxmoxButton',
+ handler: 'editServer',
+ disabled: true,
+ },
+ {
+ xtype: 'proxmoxStdRemoveButton',
+ getUrl: (rec) => `/api2/extjs/config/metricserver/${rec.data.type}/${rec.data.name}`,
+ getRecordName: (rec) => rec.data.name,
+ callback: 'reload',
+ },
+ ],
+
+ listeners: {
+ itemdblclick: 'editServer',
+ },
+
+ initComponent: function() {
+ var me = this;
+
+ me.callParent();
+
+ Proxmox.Utils.monStoreErrors(me, me.getStore());
+ },
+});
--
2.30.2
prev parent reply other threads:[~2022-02-02 9:50 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-02 9:50 [pbs-devel] [PATCH proxmox/proxmox-backup v5] add metrics server capability Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox v5 1/2] proxmox-async: add udp::connect() helper Dominik Csapak
2022-02-02 12:22 ` [pbs-devel] applied: " Wolfgang Bumiller
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox v5 2/2] proxmox-metrics: implement metrics server client code Dominik Csapak
2022-02-02 12:25 ` [pbs-devel] applied: " Wolfgang Bumiller
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 1/8] use 'fs_info' from proxmox-sys Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 2/8] pbs-api-types: add metrics api types Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 3/8] pbs-config: add metrics config class Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 4/8] backup-proxy: decouple stats gathering from rrd update Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 5/8] proxmox-backup-proxy: send metrics to configured metrics server Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 6/8] api: add metricserver endpoints Dominik Csapak
2022-02-02 9:50 ` [pbs-devel] [PATCH proxmox-backup v5 7/8] ui: add window/InfluxDbEdit Dominik Csapak
2022-02-02 9:50 ` Dominik Csapak [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=20220202095019.1799843-11-d.csapak@proxmox.com \
--to=d.csapak@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