You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2022/11/22 10:20:55 UTC

[incubator-devlake] branch release-v0.14 updated: fix: proxy connectivity checking (#3782)

This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch release-v0.14
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/release-v0.14 by this push:
     new 62f0d36d6 fix: proxy connectivity checking (#3782)
62f0d36d6 is described below

commit 62f0d36d6e38c8fadf2dfb7736a075bcf0ff01fe
Author: Klesh Wong <zh...@merico.dev>
AuthorDate: Tue Nov 22 18:20:51 2022 +0800

    fix: proxy connectivity checking (#3782)
---
 plugins/helper/api_client.go | 51 +++++++++++++++++++++++++++-----------------
 1 file changed, 31 insertions(+), 20 deletions(-)

diff --git a/plugins/helper/api_client.go b/plugins/helper/api_client.go
index 4708b8fc4..fbc015bad 100644
--- a/plugins/helper/api_client.go
+++ b/plugins/helper/api_client.go
@@ -60,25 +60,6 @@ func NewApiClient(
 	proxy string,
 	br core.BasicRes,
 ) (*ApiClient, errors.Error) {
-	parsedUrl, err := url.Parse(endpoint)
-	if err != nil {
-		return nil, errors.BadInput.Wrap(err, fmt.Sprintf("Invalid URL: %s", endpoint))
-	}
-	if parsedUrl.Scheme == "" {
-		return nil, errors.BadInput.New("Invalid URL scheme")
-	}
-	err = utils.CheckDNS(parsedUrl.Hostname())
-	if err != nil {
-		return nil, errors.Default.Wrap(err, "Failed to resolve DNS")
-	}
-	port, err := utils.ResolvePort(parsedUrl.Port(), parsedUrl.Scheme)
-	if err != nil {
-		return nil, errors.Default.New("Failed to resolve Port")
-	}
-	err = utils.CheckNetwork(parsedUrl.Hostname(), port, 10*time.Second)
-	if err != nil {
-		return nil, errors.Default.Wrap(err, "Failed to connect")
-	}
 	apiClient := &ApiClient{}
 	apiClient.Setup(
 		endpoint,
@@ -102,8 +83,38 @@ func NewApiClient(
 		if err != nil {
 			return nil, errors.Convert(err)
 		}
+		// check connectivity
+		res, err := apiClient.Get("/", nil, nil)
+		if err != nil {
+			return nil, err
+		}
+		if res.StatusCode == http.StatusBadGateway {
+			return nil, errors.BadInput.New(fmt.Sprintf("fail to connect to %v via %v", endpoint, proxy))
+		}
+	} else {
+		// check connectivity
+		parsedUrl, err := url.Parse(endpoint)
+		if err != nil {
+			return nil, errors.BadInput.Wrap(err, fmt.Sprintf("Invalid URL: %s", endpoint))
+		}
+		if parsedUrl.Scheme == "" {
+			return nil, errors.BadInput.New("Invalid URL scheme")
+		}
+		err = utils.CheckDNS(parsedUrl.Hostname())
+		if err != nil {
+			return nil, errors.Default.Wrap(err, "Failed to resolve DNS")
+		}
+		port, err := utils.ResolvePort(parsedUrl.Port(), parsedUrl.Scheme)
+		if err != nil {
+			return nil, errors.Default.New("Failed to resolve Port")
+		}
+		err = utils.CheckNetwork(parsedUrl.Hostname(), port, 10*time.Second)
+		if err != nil {
+			return nil, errors.Default.Wrap(err, "Failed to connect")
+		}
 	}
 	apiClient.SetContext(ctx)
+
 	return apiClient, nil
 }
 
@@ -259,7 +270,7 @@ func (apiClient *ApiClient) Do(
 	res, err = errors.Convert01(apiClient.client.Do(req))
 	if err != nil {
 		apiClient.logError(err, "[api-client] failed to request %s with error", req.URL.String())
-		return nil, errors.Default.Wrap(err, fmt.Sprintf("error running beforeRequest for %s", req.URL.String()))
+		return nil, errors.Default.Wrap(err, fmt.Sprintf("error requesting %s", req.URL.String()))
 	}
 	// after receive
 	if apiClient.afterResponse != nil {