all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 4/5] metrics: influx: allow one to add an API URL-path prefix
Date: Mon, 15 Mar 2021 09:14:56 +0100	[thread overview]
Message-ID: <20210315081457.3543519-4-t.lamprecht@proxmox.com> (raw)
In-Reply-To: <20210315081457.3543519-1-t.lamprecht@proxmox.com>

I normally use a reverse proxy in front of my influxdb instances,
proxying all from the /influx/ path to the only locally listening
influxdb. So here I'd need to set "influx" as api-path-prefix.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
---
 PVE/Status/InfluxDB.pm | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/PVE/Status/InfluxDB.pm b/PVE/Status/InfluxDB.pm
index 137aec1b..542d8006 100644
--- a/PVE/Status/InfluxDB.pm
+++ b/PVE/Status/InfluxDB.pm
@@ -38,6 +38,12 @@ sub properties {
 	    type => 'string',
 	    optional => 1,
 	},
+	'api-path-prefix' => {
+	    description => "An API path prefix inserted between '<host>:<port>/' and '/api2/'."
+	        ." Can be useful if the InfluxDB service runs behind a reverse proxy.",
+	    type => 'string',
+	    optional => 1,
+	},
 	influxdbproto => {
 	    type => 'string',
 	    enum => ['udp', 'http', 'https'],
@@ -64,6 +70,7 @@ sub options {
 	influxdbproto => { optional => 1},
 	timeout => { optional => 1},
 	'max-body-size' => { optional => 1 },
+	'api-path-prefix' => { optional => 1 },
    };
 }
 
@@ -161,6 +168,16 @@ sub _disconnect {
     return;
 }
 
+sub _get_v2url {
+    my ($cfg, $api_path) = @_;
+    my ($proto, $host, $port) = $cfg->@{qw(influxdbproto server port)};
+    my $api_prefix = $cfg->{'api-path-prefix'} // '/';
+    if ($api_prefix ne '' && $api_prefix =~ m!^/*(.+)/*$!) {
+	$api_prefix = "/$1/";
+    }
+    return "${proto}://${host}:${port}${api_prefix}api/v2/${api_path}";
+}
+
 sub _connect {
     my ($class, $cfg, $id) = @_;
 
@@ -182,7 +199,7 @@ sub _connect {
 	my $token = get_credentials($id);
 	my $org = $cfg->{organization} // 'proxmox';
 	my $bucket = $cfg->{bucket} // 'proxmox';
-	my $url = "${proto}://${host}:${port}/api/v2/write?org=${org}&bucket=${bucket}";
+	my $url = _get_v2url($cfg, "write?org=${org}&bucket=${bucket}");
 
 	my $req = HTTP::Request->new(POST => $url);
 	if (defined($token)) {
@@ -202,9 +219,7 @@ sub test_connection {
     if ($proto eq 'udp') {
 	return $class->SUPER::test_connection($cfg, $id);
     } elsif ($proto =~ m/^https?$/) {
-	my $host = $cfg->{server};
-	my $port = $cfg->{port};
-	my $url = "${proto}://${host}:${port}/health";
+	my $url = _get_v2url($cfg, "health");
 	my $ua = LWP::UserAgent->new();
 	$ua->timeout($cfg->{timeout} // 1);
 	# in the initial add connection test, the token may still be in $cfg
-- 
2.29.2





  parent reply	other threads:[~2021-03-15  8:15 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-15  8:14 [pve-devel] [PATCH manager 1/5] metrics: influx: include unrecognized protocol value in error Thomas Lamprecht
2021-03-15  8:14 ` [pve-devel] [PATCH manager 2/5] metrics: influx: send along auth token on connection test too Thomas Lamprecht
2021-03-15  8:14 ` [pve-devel] [PATCH manager 3/5] metrics: influx: do not error out when credendtials could not be loaded Thomas Lamprecht
2021-03-15  8:14 ` Thomas Lamprecht [this message]
2021-03-15  8:14 ` [pve-devel] [PATCH manager 5/5] ui: metrics: influxdb: add support for new api-path-prefix field Thomas Lamprecht
2021-03-15 14:32 ` [pve-devel] applied-series: [PATCH manager 1/5] metrics: influx: include unrecognized protocol value in error Dominik Csapak
2021-03-15 15:04   ` Thomas Lamprecht

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=20210315081457.3543519-4-t.lamprecht@proxmox.com \
    --to=t.lamprecht@proxmox.com \
    --cc=pve-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal