From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id DDD9B6A5C8 for ; Mon, 15 Mar 2021 09:15:04 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D5BBA1DA93 for ; Mon, 15 Mar 2021 09:15:04 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id D62171DA7C for ; Mon, 15 Mar 2021 09:15:03 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id A22C441C04 for ; Mon, 15 Mar 2021 09:15:03 +0100 (CET) From: Thomas Lamprecht To: pve-devel@lists.proxmox.com Date: Mon, 15 Mar 2021 09:14:56 +0100 Message-Id: <20210315081457.3543519-4-t.lamprecht@proxmox.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210315081457.3543519-1-t.lamprecht@proxmox.com> References: <20210315081457.3543519-1-t.lamprecht@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.048 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH manager 4/5] metrics: influx: allow one to add an API URL-path prefix X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Mar 2021 08:15:04 -0000 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 --- 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 ':/' 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