Skip to content

Commit 39b478e

Browse files
authored
Added example api code showing how to add auth tokens and user agents to prom client. (#817)
* Added example api code showing how to add auth tokens and user agents to prom client. Signed-off-by: Bartlomiej Plotka <[email protected]> * Ran go mod tidy. Signed-off-by: Bartlomiej Plotka <[email protected]>
1 parent 06b1a0a commit 39b478e

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed

Diff for: api/prometheus/v1/example_test.go

+114
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ package v1_test
1818
import (
1919
"context"
2020
"fmt"
21+
"net/http"
2122
"os"
2223
"time"
2324

2425
"github.com/prometheus/client_golang/api"
2526
v1 "github.com/prometheus/client_golang/api/prometheus/v1"
27+
"github.com/prometheus/common/config"
2628
)
2729

2830
func ExampleAPI_query() {
@@ -76,6 +78,118 @@ func ExampleAPI_queryRange() {
7678
fmt.Printf("Result:\n%v\n", result)
7779
}
7880

81+
type userAgentRoundTripper struct {
82+
name string
83+
rt http.RoundTripper
84+
}
85+
86+
// RoundTrip implements the http.RoundTripper interface.
87+
func (u userAgentRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
88+
if r.UserAgent() == "" {
89+
// The specification of http.RoundTripper says that it shouldn't mutate
90+
// the request so make a copy of req.Header since this is all that is
91+
// modified.
92+
r2 := new(http.Request)
93+
*r2 = *r
94+
r2.Header = make(http.Header)
95+
for k, s := range r.Header {
96+
r2.Header[k] = s
97+
}
98+
r2.Header.Set("User-Agent", u.name)
99+
r = r2
100+
}
101+
return u.rt.RoundTrip(r)
102+
}
103+
104+
func ExampleAPI_queryRangeWithUserAgent() {
105+
client, err := api.NewClient(api.Config{
106+
Address: "http://demo.robustperception.io:9090",
107+
RoundTripper: userAgentRoundTripper{name: "Client-Golang", rt: api.DefaultRoundTripper},
108+
})
109+
if err != nil {
110+
fmt.Printf("Error creating client: %v\n", err)
111+
os.Exit(1)
112+
}
113+
114+
v1api := v1.NewAPI(client)
115+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
116+
defer cancel()
117+
r := v1.Range{
118+
Start: time.Now().Add(-time.Hour),
119+
End: time.Now(),
120+
Step: time.Minute,
121+
}
122+
result, warnings, err := v1api.QueryRange(ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r)
123+
if err != nil {
124+
fmt.Printf("Error querying Prometheus: %v\n", err)
125+
os.Exit(1)
126+
}
127+
if len(warnings) > 0 {
128+
fmt.Printf("Warnings: %v\n", warnings)
129+
}
130+
fmt.Printf("Result:\n%v\n", result)
131+
}
132+
133+
func ExampleAPI_queryRangeWithBasicAuth() {
134+
client, err := api.NewClient(api.Config{
135+
Address: "http://demo.robustperception.io:9090",
136+
// We can use amazing github.com/prometheus/common/config helper!
137+
RoundTripper: config.NewBasicAuthRoundTripper("me", "defintely_me", "", api.DefaultRoundTripper),
138+
})
139+
if err != nil {
140+
fmt.Printf("Error creating client: %v\n", err)
141+
os.Exit(1)
142+
}
143+
144+
v1api := v1.NewAPI(client)
145+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
146+
defer cancel()
147+
r := v1.Range{
148+
Start: time.Now().Add(-time.Hour),
149+
End: time.Now(),
150+
Step: time.Minute,
151+
}
152+
result, warnings, err := v1api.QueryRange(ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r)
153+
if err != nil {
154+
fmt.Printf("Error querying Prometheus: %v\n", err)
155+
os.Exit(1)
156+
}
157+
if len(warnings) > 0 {
158+
fmt.Printf("Warnings: %v\n", warnings)
159+
}
160+
fmt.Printf("Result:\n%v\n", result)
161+
}
162+
163+
func ExampleAPI_queryRangeWithAuthBearerToken() {
164+
client, err := api.NewClient(api.Config{
165+
Address: "http://demo.robustperception.io:9090",
166+
// We can use amazing github.com/prometheus/common/config helper!
167+
RoundTripper: config.NewBearerAuthRoundTripper("secret_token", api.DefaultRoundTripper),
168+
})
169+
if err != nil {
170+
fmt.Printf("Error creating client: %v\n", err)
171+
os.Exit(1)
172+
}
173+
174+
v1api := v1.NewAPI(client)
175+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
176+
defer cancel()
177+
r := v1.Range{
178+
Start: time.Now().Add(-time.Hour),
179+
End: time.Now(),
180+
Step: time.Minute,
181+
}
182+
result, warnings, err := v1api.QueryRange(ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r)
183+
if err != nil {
184+
fmt.Printf("Error querying Prometheus: %v\n", err)
185+
os.Exit(1)
186+
}
187+
if len(warnings) > 0 {
188+
fmt.Printf("Warnings: %v\n", warnings)
189+
}
190+
fmt.Printf("Result:\n%v\n", result)
191+
}
192+
79193
func ExampleAPI_series() {
80194
client, err := api.NewClient(api.Config{
81195
Address: "http://demo.robustperception.io:9090",

Diff for: go.sum

+4
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
143143
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
144144
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
145145
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
146+
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
146147
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
147148
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
148149
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -189,6 +190,7 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9
189190
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
190191
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc=
191192
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
193+
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
192194
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
193195
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
194196
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
@@ -333,6 +335,7 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR
333335
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
334336
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
335337
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
338+
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
336339
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
337340
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
338341
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -370,6 +373,7 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w
370373
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211 h1:9UQO31fZ+0aKQOFldThf7BKPMJTiBfWycGh/u3UoO88=
371374
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
372375
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
376+
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
373377
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
374378
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
375379
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

0 commit comments

Comments
 (0)