Merge pull request #18418 from saikocat/promtool-query-instant-header

promtool: add --header flag to query instant command
This commit is contained in:
Bryan Boreham 2026-04-07 12:23:01 +01:00 committed by GitHub
commit e58f16abc6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 22 additions and 4 deletions

View File

@ -180,6 +180,7 @@ func main() {
queryInstantCmd.Arg("server", "Prometheus server to query.").Required().URLVar(&serverURL)
queryInstantExpr := queryInstantCmd.Arg("expr", "PromQL query expression.").Required().String()
queryInstantTime := queryInstantCmd.Flag("time", "Query evaluation time (RFC3339 or Unix timestamp).").String()
queryInstantHeaders := queryInstantCmd.Flag("header", "Extra headers to send to server.").StringMap()
queryRangeCmd := queryCmd.Command("range", "Run range query.")
queryRangeCmd.Arg("server", "Prometheus server to query.").Required().URLVar(&serverURL)
@ -393,7 +394,7 @@ func main() {
os.Exit(PushMetrics(remoteWriteURL, httpRoundTripper, *pushMetricsHeaders, *pushMetricsTimeout, *pushMetricsProtoMsg, *pushMetricsLabels, *metricFiles...))
case queryInstantCmd.FullCommand():
os.Exit(QueryInstant(serverURL, httpRoundTripper, *queryInstantExpr, *queryInstantTime, p))
os.Exit(QueryInstant(serverURL, httpRoundTripper, *queryInstantHeaders, *queryInstantExpr, *queryInstantTime, p))
case queryRangeCmd.FullCommand():
os.Exit(QueryRange(serverURL, httpRoundTripper, *queryRangeHeaders, *queryRangeExpr, *queryRangeBegin, *queryRangeEnd, *queryRangeStep, p))

View File

@ -95,7 +95,7 @@ func TestQueryInstant(t *testing.T) {
require.NoError(t, err)
p := &promqlPrinter{}
exitCode := QueryInstant(urlObject, http.DefaultTransport, "up", "300", p)
exitCode := QueryInstant(urlObject, http.DefaultTransport, map[string]string{}, "up", "300", p)
require.Equal(t, "/api/v1/query", getRequest().URL.Path)
form := getRequest().Form
require.Equal(t, "up", form.Get("query"))
@ -103,6 +103,22 @@ func TestQueryInstant(t *testing.T) {
require.Equal(t, 0, exitCode)
}
func TestQueryInstantHeaders(t *testing.T) {
t.Parallel()
s, getRequest := mockServer(200, `{"status": "success", "data": {"resultType": "vector", "result": []}}`)
defer s.Close()
urlObject, err := url.Parse(s.URL)
require.NoError(t, err)
p := &promqlPrinter{}
headers := map[string]string{"X-Scope-OrgID": "prom", "X-Custom": "value"}
exitCode := QueryInstant(urlObject, http.DefaultTransport, headers, "up", "300", p)
require.Equal(t, 0, exitCode)
require.Equal(t, "prom", getRequest().Header.Get("X-Scope-OrgID"))
require.Equal(t, "value", getRequest().Header.Get("X-Custom"))
}
func mockServer(code int, body string) (*httptest.Server, func() *http.Request) {
var req *http.Request
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

View File

@ -61,8 +61,8 @@ func newAPI(url *url.URL, roundTripper http.RoundTripper, headers map[string]str
}
// QueryInstant performs an instant query against a Prometheus server.
func QueryInstant(url *url.URL, roundTripper http.RoundTripper, query, evalTime string, p printer) int {
api, err := newAPI(url, roundTripper, nil)
func QueryInstant(url *url.URL, roundTripper http.RoundTripper, headers map[string]string, query, evalTime string, p printer) int {
api, err := newAPI(url, roundTripper, headers)
if err != nil {
fmt.Fprintln(os.Stderr, "error creating API client:", err)
return failureExitCode

View File

@ -240,6 +240,7 @@ Run instant query.
| Flag | Description |
| --- | --- |
| <code class="text-nowrap">--time</code> | Query evaluation time (RFC3339 or Unix timestamp). |
| <code class="text-nowrap">--header</code> | Extra headers to send to server. |