From d57f8d948277bc943160febab28d77d72dcfe497 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Sat, 21 Nov 2020 20:36:31 +0100 Subject: [PATCH] ui/api: metrics: move server to subpath, post to path with ID We actually wanted to use that scheme for more new API paths, lets see if it is really fitting starting with this. Use the new widget-toolkit submitUrl helper to add the ID on create. And unify the edit/create window creation, which may fit better in a separate commit, it's quite small and was to cumbersome to untangle, so just go against my one rules here... :( Signed-off-by: Thomas Lamprecht --- PVE/API2/Cluster.pm | 6 ++-- PVE/API2/Cluster/MetricServer.pm | 37 ++++++++++++++++++++++--- www/manager6/dc/MetricServerView.js | 43 ++++++++++++----------------- 3 files changed, 53 insertions(+), 33 deletions(-) diff --git a/PVE/API2/Cluster.pm b/PVE/API2/Cluster.pm index d67a2495..8f8032c2 100644 --- a/PVE/API2/Cluster.pm +++ b/PVE/API2/Cluster.pm @@ -46,7 +46,7 @@ __PACKAGE__->register_method ({ __PACKAGE__->register_method ({ subclass => "PVE::API2::Cluster::MetricServer", - path => 'metricserver', + path => 'metrics', }); __PACKAGE__->register_method ({ @@ -138,8 +138,8 @@ __PACKAGE__->register_method ({ { name => 'config' }, { name => 'acme' }, { name => 'ceph' }, - { name => 'metricserver' }, - ]; + { name => 'metrics' }, + ]; if ($have_sdn) { push(@{$result}, { name => 'sdn' }); diff --git a/PVE/API2/Cluster/MetricServer.pm b/PVE/API2/Cluster/MetricServer.pm index 7032b618..b96228b0 100644 --- a/PVE/API2/Cluster/MetricServer.pm +++ b/PVE/API2/Cluster/MetricServer.pm @@ -17,6 +17,35 @@ __PACKAGE__->register_method ({ name => 'index', path => '', method => 'GET', + description => "Metrics index.", + permissions => { user => 'all' }, + parameters => { + additionalProperties => 0, + properties => {}, + }, + returns => { + type => 'array', + items => { + type => "object", + properties => {}, + }, + links => [ { rel => 'child', href => "{name}" } ], + }, + code => sub { + my ($param) = @_; + + my $result = [ + { name => 'server' }, + ]; + + return $result; + } +}); + +__PACKAGE__->register_method ({ + name => 'server_index', + path => 'server', + method => 'GET', description => "List configured metric servers.", permissions => { check => ['perm', '/', ['Sys.Audit']], @@ -76,7 +105,7 @@ __PACKAGE__->register_method ({ __PACKAGE__->register_method ({ name => 'read', - path => '{id}', + path => 'server/{id}', method => 'GET', description => "Read metric server configuration.", permissions => { @@ -107,7 +136,7 @@ __PACKAGE__->register_method ({ __PACKAGE__->register_method ({ name => 'create', - path => '', + path => 'server/{id}', protected => 1, method => 'POST', description => "Create a new external metric server config", @@ -143,7 +172,7 @@ __PACKAGE__->register_method ({ __PACKAGE__->register_method ({ name => 'update', protected => 1, - path => '{id}', + path => 'server/{id}', method => 'PUT', description => "Update metric server configuration.", permissions => { @@ -194,7 +223,7 @@ __PACKAGE__->register_method ({ __PACKAGE__->register_method ({ name => 'delete', protected => 1, - path => '{id}', + path => 'server/{id}', method => 'DELETE', description => "Remove Metric server.", permissions => { diff --git a/www/manager6/dc/MetricServerView.js b/www/manager6/dc/MetricServerView.js index c08c5453..823605b8 100644 --- a/www/manager6/dc/MetricServerView.js +++ b/www/manager6/dc/MetricServerView.js @@ -16,10 +16,10 @@ Ext.define('PVE.dc.MetricServerView', { } }, - addInfluxDB: function() { + editWindow: function(xtype, id) { let me = this; - Ext.create(`PVE.dc.InfluxDBEdit`, { - url: `/api2/extjs/cluster/metricserver`, + Ext.create(`PVE.dc.${xtype}Edit`, { + serverid: id, autoShow: true, listeners: { destroy: () => me.reload(), @@ -27,15 +27,8 @@ Ext.define('PVE.dc.MetricServerView', { }); }, - addGraphite: function() { - let me = this; - Ext.create(`PVE.dc.GraphiteEdit`, { - url: `/api2/extjs/cluster/metricserver`, - autoShow: true, - listeners: { - destroy: () => me.reload(), - }, - }); + addServer: function(button) { + this.editWindow(button.text); }, editServer: function() { @@ -46,17 +39,10 @@ Ext.define('PVE.dc.MetricServerView', { return; } - let rec = selection[0]; + let cfg = selection[0].data; - let xtype = me.render_type(rec.data.type); - Ext.create(`PVE.dc.${xtype}Edit`, { - url: `/api2/extjs/cluster/metricserver/${rec.data.id}`, - serverid: rec.data.id, - autoShow: true, - listeners: { - destroy: () => me.reload(), - }, - }); + let xtype = me.render_type(cfg.type); + me.editWindow(xtype, cfg.id); }, reload: function() { @@ -69,7 +55,7 @@ Ext.define('PVE.dc.MetricServerView', { id: 'metricservers', proxy: { type: 'proxmox', - url: '/api2/json/cluster/metricserver', + url: '/api2/json/cluster/metrics/server', }, }, @@ -109,11 +95,11 @@ Ext.define('PVE.dc.MetricServerView', { menu: [ { text: 'Graphite', - handler: 'addGraphite', + handler: 'addServer', }, { text: 'InfluxDB', - handler: 'addInfluxDB', + handler: 'addServer', }, ], }, @@ -125,7 +111,7 @@ Ext.define('PVE.dc.MetricServerView', { }, { xtype: 'proxmoxStdRemoveButton', - baseurl: `/api2/extjs/cluster/metricserver`, + baseurl: `/api2/extjs/cluster/metrics/server`, callback: 'reload', }, ], @@ -151,6 +137,7 @@ Ext.define('PVE.dc.MetricServerBaseEdit', { let me = this; me.isCreate = !me.serverid; me.serverid = me.serverid || ""; + me.url = `/api2/extjs/cluster/metrics/server/${me.serverid}`; me.method = me.isCreate ? 'POST' : 'PUT'; if (!me.isCreate) { me.subject = `${me.subject}: ${me.serverid}`; @@ -158,6 +145,10 @@ Ext.define('PVE.dc.MetricServerBaseEdit', { return {}; }, + submitUrl: function(url, values) { + return this.isCreate ? `${url}/${values.id}` : url; + }, + initComponent: function() { let me = this;