@@ -40,6 +40,7 @@ type Client struct {
40
40
client * retryablehttp.Client
41
41
token string
42
42
baseURL * url.URL
43
+ grafanaURL * url.URL
43
44
disableRetries bool
44
45
limiter * rate.Limiter
45
46
UserAgent string
@@ -59,6 +60,22 @@ type Client struct {
59
60
UserNotificationRules * UserNotificationRuleService
60
61
}
61
62
63
+ func NewWithGrafanaURL (base_url , token , grafana_url string ) (* Client , error ) {
64
+ if token == "" {
65
+ return nil , fmt .Errorf ("Token required" )
66
+ }
67
+
68
+ if base_url == "" {
69
+ return nil , fmt .Errorf ("BaseUrl required" )
70
+ }
71
+ client , err := newClient (base_url , grafana_url )
72
+ if err != nil {
73
+ return nil , err
74
+ }
75
+ client .token = token
76
+ return client , nil
77
+ }
78
+
62
79
func New (base_url , token string ) (* Client , error ) {
63
80
if token == "" {
64
81
return nil , fmt .Errorf ("Token required" )
@@ -67,15 +84,15 @@ func New(base_url, token string) (*Client, error) {
67
84
if base_url == "" {
68
85
return nil , fmt .Errorf ("BaseUrl required" )
69
86
}
70
- client , err := newClient (base_url )
87
+ client , err := newClient (base_url , "" )
71
88
if err != nil {
72
89
return nil , err
73
90
}
74
91
client .token = token
75
92
return client , nil
76
93
}
77
94
78
- func newClient (url string ) (* Client , error ) {
95
+ func newClient (url , grafana_url string ) (* Client , error ) {
79
96
c := & Client {}
80
97
81
98
// Configure the HTTP client.
@@ -96,6 +113,12 @@ func newClient(url string) (*Client, error) {
96
113
if err != nil {
97
114
return nil , err
98
115
}
116
+
117
+ err = c .setGrafanaURL (grafana_url )
118
+ if err != nil {
119
+ return nil , err
120
+ }
121
+
99
122
c .UserAgent = defaultUserAgent
100
123
101
124
// Create services. Keep in sync with Client struct
@@ -135,6 +158,18 @@ func (c *Client) setBaseURL(urlStr string) error {
135
158
return nil
136
159
}
137
160
161
+ func (c * Client ) setGrafanaURL (urlStr string ) error {
162
+ if urlStr != "" {
163
+ grafanaUrl , err := url .Parse (urlStr )
164
+ if err != nil {
165
+ return err
166
+ }
167
+ c .grafanaURL = grafanaUrl
168
+ }
169
+
170
+ return nil
171
+ }
172
+
138
173
func (c * Client ) NewRequest (method , path string , opt interface {}) (* retryablehttp.Request , error ) {
139
174
u := * c .baseURL
140
175
unescaped , err := url .PathUnescape (path )
@@ -147,6 +182,9 @@ func (c *Client) NewRequest(method, path string, opt interface{}) (*retryablehtt
147
182
reqHeaders := make (http.Header )
148
183
reqHeaders .Set ("Accept" , "application/json" )
149
184
reqHeaders .Set ("Authorization" , c .token )
185
+ if c .grafanaURL != nil {
186
+ reqHeaders .Set ("X-Grafana-URL" , c .grafanaURL .String ())
187
+ }
150
188
if c .UserAgent != "" {
151
189
reqHeaders .Set ("User-Agent" , c .UserAgent )
152
190
}
@@ -318,3 +356,11 @@ func (c *Client) BaseURL() *url.URL {
318
356
u := * c .baseURL
319
357
return & u
320
358
}
359
+
360
+ func (c * Client ) GrafanaURL () * url.URL {
361
+ if c .grafanaURL == nil {
362
+ return nil
363
+ }
364
+ u := * c .grafanaURL
365
+ return & u
366
+ }
0 commit comments