mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-05-29 01:12:02 +00:00
ui: add MetricServerView and use it
simple CRUD interface to show/add/edit/delete metric servers it's a bit different from PVE's so it's harder to reuse that than to copy it. If we need it again, we can still refactor and combine them. introduce 'PBS.Schema' class to hold the server type/xtype mappings Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
3d6b21bf05
commit
f7ff48ded4
@ -36,6 +36,7 @@ TAPE_UI_FILES= \
|
|||||||
|
|
||||||
JSSRC= \
|
JSSRC= \
|
||||||
Utils.js \
|
Utils.js \
|
||||||
|
Schema.js \
|
||||||
form/TokenSelector.js \
|
form/TokenSelector.js \
|
||||||
form/AuthidSelector.js \
|
form/AuthidSelector.js \
|
||||||
form/RemoteSelector.js \
|
form/RemoteSelector.js \
|
||||||
@ -62,6 +63,7 @@ JSSRC= \
|
|||||||
config/WebauthnView.js \
|
config/WebauthnView.js \
|
||||||
config/CertificateView.js \
|
config/CertificateView.js \
|
||||||
config/NodeOptionView.js \
|
config/NodeOptionView.js \
|
||||||
|
config/MetricServerView.js \
|
||||||
window/ACLEdit.js \
|
window/ACLEdit.js \
|
||||||
window/BackupFileDownloader.js \
|
window/BackupFileDownloader.js \
|
||||||
window/BackupGroupChangeOwner.js \
|
window/BackupGroupChangeOwner.js \
|
||||||
|
15
www/Schema.js
Normal file
15
www/Schema.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Ext.define('PBS.Schema', {
|
||||||
|
|
||||||
|
singleton: true,
|
||||||
|
|
||||||
|
metricServer: {
|
||||||
|
'influxdb-http': {
|
||||||
|
type: 'InfluxDB (HTTP)',
|
||||||
|
xtype: 'InfluxDbHttp',
|
||||||
|
},
|
||||||
|
'influxdb-udp': {
|
||||||
|
type: 'InfluxDB (UDP)',
|
||||||
|
xtype: 'InfluxDbUdp',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
@ -45,6 +45,12 @@ Ext.define('PBS.SystemConfiguration', {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: gettext('Metric Server'),
|
||||||
|
iconCls: 'fa fa-bar-chart',
|
||||||
|
xtype: 'pbsMetricServerView',
|
||||||
|
itemId: 'metrics',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
xtype: 'panel',
|
xtype: 'panel',
|
||||||
title: gettext('Other'),
|
title: gettext('Other'),
|
||||||
|
128
www/config/MetricServerView.js
Normal file
128
www/config/MetricServerView.js
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
Ext.define('PBS.config.MetricServerView', {
|
||||||
|
extend: 'Ext.grid.Panel',
|
||||||
|
alias: ['widget.pbsMetricServerView'],
|
||||||
|
|
||||||
|
stateful: true,
|
||||||
|
stateId: 'grid-metricserver',
|
||||||
|
|
||||||
|
controller: {
|
||||||
|
xclass: 'Ext.app.ViewController',
|
||||||
|
|
||||||
|
editWindow: function(xtype, id) {
|
||||||
|
let me = this;
|
||||||
|
Ext.create(`PBS.window.${xtype}Edit`, {
|
||||||
|
serverid: id,
|
||||||
|
autoShow: true,
|
||||||
|
autoLoad: !!id,
|
||||||
|
listeners: {
|
||||||
|
destroy: () => me.reload(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
addServer: function(button) {
|
||||||
|
this.editWindow(PBS.Schema.metricServer[button.type]?.xtype);
|
||||||
|
},
|
||||||
|
|
||||||
|
editServer: function() {
|
||||||
|
let me = this;
|
||||||
|
let view = me.getView();
|
||||||
|
let selection = view.getSelection();
|
||||||
|
if (!selection || selection.length < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let cfg = selection[0].data;
|
||||||
|
|
||||||
|
me.editWindow(PBS.Schema.metricServer[cfg.type]?.xtype, cfg.name);
|
||||||
|
},
|
||||||
|
|
||||||
|
reload: function() {
|
||||||
|
this.getView().getStore().load();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
store: {
|
||||||
|
autoLoad: true,
|
||||||
|
id: 'metricservers',
|
||||||
|
proxy: {
|
||||||
|
type: 'proxmox',
|
||||||
|
url: '/api2/json/admin/metrics',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
text: gettext('Name'),
|
||||||
|
flex: 2,
|
||||||
|
dataIndex: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: gettext('Type'),
|
||||||
|
width: 150,
|
||||||
|
dataIndex: 'type',
|
||||||
|
renderer: (v) => PBS.Schema.metricServer[v]?.type ?? v,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
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/metrics/${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());
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user