From 356deada8c5ade0652ac7f3922214cd5d6e717f2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 13 Nov 2023 20:13:50 +0100 Subject: [PATCH] lib/htmlcomponents: use relative links for the top page and for favicon.ico This allows hiding VictoriaMetrics components behind proxies with arbitrary path prefixes. For example, vmagent HTTP handlers can be served via /vmagent/ path prefix: - http://proxy/vmagent/targets - http://proxy/vmagent/service-discovery The path prefix can be arbitrary. For example, below are vmagent urls for /tenantID/vmagent/ path prefix: - http://proxy/tenantID/vmagent/targets - http://proxy/tenantID/vmagent/service-discovery While at it, consistently serve favicon.ico from any path directory. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5306 Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5307 --- app/vmselect/main.go | 6 +- app/vmui/packages/vmui/public/favicon.ico | Bin 15086 -> 0 bytes docs/CHANGELOG.md | 1 + lib/htmlcomponents/components.qtpl | 3 +- lib/htmlcomponents/components.qtpl.go | 94 +++++++++--------- .../vmui => lib/httpserver}/favicon.ico | Bin lib/httpserver/httpserver.go | 16 ++- 7 files changed, 64 insertions(+), 56 deletions(-) delete mode 100644 app/vmui/packages/vmui/public/favicon.ico rename {app/vmselect/vmui => lib/httpserver}/favicon.ico (100%) diff --git a/app/vmselect/main.go b/app/vmselect/main.go index 0f198f46c..72fba898e 100644 --- a/app/vmselect/main.go +++ b/app/vmselect/main.go @@ -323,9 +323,9 @@ func selectHandler(qt *querytracer.Tracer, startTime time.Time, w http.ResponseW fmt.Fprintf(w, "See docs
") fmt.Fprintf(w, "Useful endpoints:
") fmt.Fprintf(w, `Web UI
`) - fmt.Fprintf(w, `metric-level relabel debugging
`) - fmt.Fprintf(w, `target-level relabel debugging
`) - fmt.Fprintf(w, `WITH expressions' tutorial
`) + fmt.Fprintf(w, `metric-level relabel debugging
`) + fmt.Fprintf(w, `target-level relabel debugging
`) + fmt.Fprintf(w, `WITH expressions' tutorial
`) fmt.Fprintf(w, `tsdb status page
`) fmt.Fprintf(w, `top queries
`) fmt.Fprintf(w, `active queries
`) diff --git a/app/vmui/packages/vmui/public/favicon.ico b/app/vmui/packages/vmui/public/favicon.ico deleted file mode 100644 index efeb4570290716d4e69698fcb9751434b8789197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 + {% endfunc %} // Navbar writes navigation bar for /targets-like pages {% func Navbar() %}