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;