Commit 58cefe73 by Marcus Efraimsson Committed by GitHub

Datasources: Handle URL parsing error (#25742)

Adds handling of error returned from URL parsing.

Fixes #25714
parent c16890c2
...@@ -242,7 +242,10 @@ func (e *ApplicationInsightsDatasource) createRequest(ctx context.Context, dsInf ...@@ -242,7 +242,10 @@ func (e *ApplicationInsightsDatasource) createRequest(ctx context.Context, dsInf
appInsightsAppID := dsInfo.JsonData.Get("appInsightsAppId").MustString() appInsightsAppID := dsInfo.JsonData.Get("appInsightsAppId").MustString()
proxyPass := fmt.Sprintf("%s/v1/apps/%s", pluginRouteName, appInsightsAppID) proxyPass := fmt.Sprintf("%s/v1/apps/%s", pluginRouteName, appInsightsAppID)
u, _ := url.Parse(dsInfo.Url) u, err := url.Parse(dsInfo.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, fmt.Sprintf("/v1/apps/%s", appInsightsAppID)) u.Path = path.Join(u.Path, fmt.Sprintf("/v1/apps/%s", appInsightsAppID))
req, err := http.NewRequest(http.MethodGet, u.String(), nil) req, err := http.NewRequest(http.MethodGet, u.String(), nil)
......
...@@ -184,7 +184,10 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A ...@@ -184,7 +184,10 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A
} }
func (e *AzureLogAnalyticsDatasource) createRequest(ctx context.Context, dsInfo *models.DataSource) (*http.Request, error) { func (e *AzureLogAnalyticsDatasource) createRequest(ctx context.Context, dsInfo *models.DataSource) (*http.Request, error) {
u, _ := url.Parse(dsInfo.Url) u, err := url.Parse(dsInfo.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, "render") u.Path = path.Join(u.Path, "render")
req, err := http.NewRequest(http.MethodGet, u.String(), nil) req, err := http.NewRequest(http.MethodGet, u.String(), nil)
......
...@@ -221,7 +221,10 @@ func (e *AzureMonitorDatasource) createRequest(ctx context.Context, dsInfo *mode ...@@ -221,7 +221,10 @@ func (e *AzureMonitorDatasource) createRequest(ctx context.Context, dsInfo *mode
cloudName := dsInfo.JsonData.Get("cloudName").MustString("azuremonitor") cloudName := dsInfo.JsonData.Get("cloudName").MustString("azuremonitor")
proxyPass := fmt.Sprintf("%s/subscriptions", cloudName) proxyPass := fmt.Sprintf("%s/subscriptions", cloudName)
u, _ := url.Parse(dsInfo.Url) u, err := url.Parse(dsInfo.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, "render") u.Path = path.Join(u.Path, "render")
req, err := http.NewRequest(http.MethodGet, u.String(), nil) req, err := http.NewRequest(http.MethodGet, u.String(), nil)
......
...@@ -154,12 +154,14 @@ func (c *baseClientImpl) encodeBatchRequests(requests []*multiRequest) ([]byte, ...@@ -154,12 +154,14 @@ func (c *baseClientImpl) encodeBatchRequests(requests []*multiRequest) ([]byte,
} }
func (c *baseClientImpl) executeRequest(method, uriPath, uriQuery string, body []byte) (*response, error) { func (c *baseClientImpl) executeRequest(method, uriPath, uriQuery string, body []byte) (*response, error) {
u, _ := url.Parse(c.ds.Url) u, err := url.Parse(c.ds.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, uriPath) u.Path = path.Join(u.Path, uriPath)
u.RawQuery = uriQuery u.RawQuery = uriQuery
var req *http.Request var req *http.Request
var err error
if method == http.MethodPost { if method == http.MethodPost {
req, err = http.NewRequest(http.MethodPost, u.String(), bytes.NewBuffer(body)) req, err = http.NewRequest(http.MethodPost, u.String(), bytes.NewBuffer(body))
} else { } else {
......
...@@ -154,7 +154,10 @@ func (e *GraphiteExecutor) parseResponse(res *http.Response) ([]TargetResponseDT ...@@ -154,7 +154,10 @@ func (e *GraphiteExecutor) parseResponse(res *http.Response) ([]TargetResponseDT
} }
func (e *GraphiteExecutor) createRequest(dsInfo *models.DataSource, data url.Values) (*http.Request, error) { func (e *GraphiteExecutor) createRequest(dsInfo *models.DataSource, data url.Values) (*http.Request, error) {
u, _ := url.Parse(dsInfo.Url) u, err := url.Parse(dsInfo.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, "render") u.Path = path.Join(u.Path, "render")
req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode())) req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode()))
......
...@@ -79,7 +79,10 @@ func (e *OpenTsdbExecutor) Query(ctx context.Context, dsInfo *models.DataSource, ...@@ -79,7 +79,10 @@ func (e *OpenTsdbExecutor) Query(ctx context.Context, dsInfo *models.DataSource,
} }
func (e *OpenTsdbExecutor) createRequest(dsInfo *models.DataSource, data OpenTsdbQuery) (*http.Request, error) { func (e *OpenTsdbExecutor) createRequest(dsInfo *models.DataSource, data OpenTsdbQuery) (*http.Request, error) {
u, _ := url.Parse(dsInfo.Url) u, err := url.Parse(dsInfo.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, "api/query") u.Path = path.Join(u.Path, "api/query")
postData, err := json.Marshal(data) postData, err := json.Marshal(data)
......
...@@ -656,7 +656,10 @@ func calcBucketBound(bucketOptions stackdriverBucketOptions, n int) string { ...@@ -656,7 +656,10 @@ func calcBucketBound(bucketOptions stackdriverBucketOptions, n int) string {
} }
func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.DataSource, query *stackdriverQuery, proxyPass string) (*http.Request, error) { func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.DataSource, query *stackdriverQuery, proxyPass string) (*http.Request, error) {
u, _ := url.Parse(dsInfo.Url) u, err := url.Parse(dsInfo.Url)
if err != nil {
return nil, err
}
u.Path = path.Join(u.Path, "render") u.Path = path.Join(u.Path, "render")
req, err := http.NewRequest(http.MethodGet, "https://monitoring.googleapis.com/", nil) req, err := http.NewRequest(http.MethodGet, "https://monitoring.googleapis.com/", nil)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment