Skip to content

Commit fcc3f8e

Browse files
authored
feat: optimize the invocation of proxy servers (#7755)
1 parent 0d15a28 commit fcc3f8e

File tree

22 files changed

+169
-149
lines changed

22 files changed

+169
-149
lines changed

agent/app/service/app.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ import (
2626
"github.com/1Panel-dev/1Panel/agent/utils/common"
2727
"github.com/1Panel-dev/1Panel/agent/utils/docker"
2828
"github.com/1Panel-dev/1Panel/agent/utils/files"
29-
http2 "github.com/1Panel-dev/1Panel/agent/utils/http"
30-
httpUtil "github.com/1Panel-dev/1Panel/agent/utils/http"
29+
"github.com/1Panel-dev/1Panel/agent/utils/req_helper"
3130
"github.com/1Panel-dev/1Panel/agent/utils/xpack"
3231
"gopkg.in/yaml.v3"
3332
)
@@ -260,7 +259,7 @@ func (a AppService) GetAppDetail(appID uint, version, appType string) (response.
260259
if appDetailDTO.DockerCompose == "" {
261260
filename := filepath.Base(appDetailDTO.DownloadUrl)
262261
dockerComposeUrl := fmt.Sprintf("%s%s", strings.TrimSuffix(appDetailDTO.DownloadUrl, filename), "docker-compose.yml")
263-
statusCode, composeRes, err := httpUtil.HandleGet(dockerComposeUrl, http.MethodGet, constant.TimeOut20s)
262+
statusCode, composeRes, err := req_helper.HandleRequest(dockerComposeUrl, http.MethodGet, constant.TimeOut20s)
264263
if err != nil {
265264
return appDetailDTO, buserr.WithDetail("ErrGetCompose", err.Error(), err)
266265
}
@@ -773,7 +772,7 @@ func (a AppService) GetAppUpdate() (*response.AppUpdateRes, error) {
773772
}
774773

775774
versionUrl := fmt.Sprintf("%s/%s/1panel.json.version.txt", global.CONF.System.AppRepo, global.CONF.System.Mode)
776-
_, versionRes, err := http2.HandleGet(versionUrl, http.MethodGet, constant.TimeOut20s)
775+
_, versionRes, err := req_helper.HandleRequest(versionUrl, http.MethodGet, constant.TimeOut20s)
777776
if err != nil {
778777
return nil, err
779778
}
@@ -936,15 +935,14 @@ func (a AppService) SyncAppListFromRemote(taskID string) (err error) {
936935
oldAppIds = append(oldAppIds, old.ID)
937936
}
938937

939-
transport := xpack.LoadRequestTransport()
940938
baseRemoteUrl := fmt.Sprintf("%s/%s/1panel", global.CONF.System.AppRepo, global.CONF.System.Mode)
941939

942940
appsMap := getApps(oldApps, list.Apps, setting.SystemVersion, t)
943941

944942
t.LogStart(i18n.GetMsgByKey("SyncAppDetail"))
945943
for _, l := range list.Apps {
946944
app := appsMap[l.AppProperty.Key]
947-
_, iconRes, err := httpUtil.HandleGetWithTransport(l.Icon, http.MethodGet, transport, constant.TimeOut20s)
945+
_, iconRes, err := req_helper.HandleRequest(l.Icon, http.MethodGet, constant.TimeOut20s)
948946
if err != nil {
949947
return err
950948
}
@@ -977,7 +975,7 @@ func (a AppService) SyncAppListFromRemote(taskID string) (err error) {
977975
}
978976
if _, ok := InitTypes[app.Type]; ok {
979977
dockerComposeUrl := fmt.Sprintf("%s/%s", versionUrl, "docker-compose.yml")
980-
_, composeRes, err := httpUtil.HandleGetWithTransport(dockerComposeUrl, http.MethodGet, transport, constant.TimeOut20s)
978+
_, composeRes, err := req_helper.HandleRequest(dockerComposeUrl, http.MethodGet, constant.TimeOut20s)
981979
if err != nil {
982980
return err
983981
}

agent/app/service/app_install.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"strings"
1616

1717
"github.com/1Panel-dev/1Panel/agent/utils/files"
18-
httpUtil "github.com/1Panel-dev/1Panel/agent/utils/http"
18+
"github.com/1Panel-dev/1Panel/agent/utils/req_helper"
1919
"github.com/docker/docker/api/types"
2020
"gopkg.in/yaml.v3"
2121

@@ -553,7 +553,7 @@ func (a *AppInstallService) GetUpdateVersions(req request.AppUpdateVersion) ([]d
553553
if req.UpdateVersion != "" && req.UpdateVersion == detail.Version && detail.DockerCompose == "" && !app.IsLocalApp() {
554554
filename := filepath.Base(detail.DownloadUrl)
555555
dockerComposeUrl := fmt.Sprintf("%s%s", strings.TrimSuffix(detail.DownloadUrl, filename), "docker-compose.yml")
556-
statusCode, composeRes, err := httpUtil.HandleGet(dockerComposeUrl, http.MethodGet, constant.TimeOut20s)
556+
statusCode, composeRes, err := req_helper.HandleRequest(dockerComposeUrl, http.MethodGet, constant.TimeOut20s)
557557
if err != nil {
558558
return versions, err
559559
}

agent/app/service/app_utils.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626

2727
"github.com/docker/docker/api/types"
2828

29-
httpUtil "github.com/1Panel-dev/1Panel/agent/utils/http"
29+
"github.com/1Panel-dev/1Panel/agent/utils/req_helper"
3030
"github.com/docker/docker/api/types/container"
3131

3232
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
@@ -1758,5 +1758,5 @@ func RequestDownloadCallBack(downloadCallBackUrl string) {
17581758
if downloadCallBackUrl == "" {
17591759
return
17601760
}
1761-
_, _, _ = httpUtil.HandleGet(downloadCallBackUrl, http.MethodGet, constant.TimeOut5s)
1761+
_, _, _ = req_helper.HandleRequest(downloadCallBackUrl, http.MethodGet, constant.TimeOut5s)
17621762
}

agent/app/service/website_ssl.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"crypto/x509"
77
"encoding/pem"
88
"fmt"
9-
http2 "github.com/1Panel-dev/1Panel/agent/utils/http"
109
"log"
1110
"os"
1211
"path"
@@ -25,6 +24,7 @@ import (
2524
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
2625
"github.com/1Panel-dev/1Panel/agent/utils/common"
2726
"github.com/1Panel-dev/1Panel/agent/utils/files"
27+
"github.com/1Panel-dev/1Panel/agent/utils/req_helper"
2828
"github.com/1Panel-dev/1Panel/agent/utils/ssl"
2929
"github.com/go-acme/lego/v4/certcrypto"
3030
legoLogger "github.com/go-acme/lego/v4/log"
@@ -205,7 +205,7 @@ func reloadSystemSSL(websiteSSL *model.WebsiteSSL, logger *log.Logger) {
205205
logger.Printf("Failed to update the SSL certificate for 1Panel System domain [%s] , err:%s", websiteSSL.PrimaryDomain, err.Error())
206206
return
207207
}
208-
if err := http2.PostLocalCore("/core/settings/ssl/reload"); err != nil {
208+
if err := req_helper.PostLocalCore("/core/settings/ssl/reload"); err != nil {
209209
logger.Printf("Failed to update the SSL certificate for 1Panel System domain [%s] , err:%s", websiteSSL.PrimaryDomain, err.Error())
210210
return
211211
}

agent/utils/files/file_op.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121

2222
"github.com/1Panel-dev/1Panel/agent/constant"
2323
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
24-
http2 "github.com/1Panel-dev/1Panel/agent/utils/http"
24+
"github.com/1Panel-dev/1Panel/agent/utils/req_helper"
2525
cZip "github.com/klauspost/compress/zip"
2626
"golang.org/x/text/encoding/simplifiedchinese"
2727
"golang.org/x/text/transform"
@@ -315,7 +315,7 @@ func (f FileOp) DownloadFileWithProcess(url, dst, key string, ignoreCertificate
315315
}
316316

317317
func (f FileOp) DownloadFile(url, dst string) error {
318-
resp, err := http2.GetHttpRes(url)
318+
resp, err := req_helper.HandleGet(url)
319319
if err != nil {
320320
return err
321321
}
@@ -334,7 +334,7 @@ func (f FileOp) DownloadFile(url, dst string) error {
334334
}
335335

336336
func (f FileOp) DownloadFileWithProxy(url, dst string) error {
337-
_, resp, err := http2.HandleGet(url, http.MethodGet, constant.TimeOut5m)
337+
_, resp, err := req_helper.HandleRequest(url, http.MethodGet, constant.TimeOut5m)
338338
if err != nil {
339339
return err
340340
}

agent/utils/http/get.go

Lines changed: 0 additions & 42 deletions
This file was deleted.

agent/utils/http/request.go

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
package http
1+
package req_helper
22

33
import (
44
"bytes"
55
"fmt"
6-
"github.com/1Panel-dev/1Panel/agent/app/repo"
76
"net/http"
7+
8+
"github.com/1Panel-dev/1Panel/agent/app/repo"
89
)
910

1011
func PostLocalCore(url string) error {

agent/utils/req_helper/request.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package req_helper
2+
3+
import (
4+
"context"
5+
"crypto/tls"
6+
"errors"
7+
"io"
8+
"net"
9+
"net/http"
10+
"strings"
11+
"time"
12+
13+
"github.com/1Panel-dev/1Panel/agent/buserr"
14+
"github.com/1Panel-dev/1Panel/agent/global"
15+
)
16+
17+
func HandleGet(url string) (*http.Response, error) {
18+
client := &http.Client{
19+
Timeout: time.Second * 300,
20+
}
21+
client.Transport = loadRequestTransport()
22+
23+
req, err := http.NewRequestWithContext(context.Background(), "GET", url, nil)
24+
if err != nil {
25+
return nil, buserr.WithMap("ErrCreateHttpClient", map[string]interface{}{"err": err.Error()}, err)
26+
}
27+
28+
resp, err := client.Do(req)
29+
if err != nil {
30+
if errors.Is(err, context.DeadlineExceeded) {
31+
return nil, buserr.WithMap("ErrHttpReqTimeOut", map[string]interface{}{"err": err.Error()}, err)
32+
} else {
33+
if strings.Contains(err.Error(), "no such host") {
34+
return nil, buserr.New("ErrNoSuchHost")
35+
}
36+
return nil, buserr.WithMap("ErrHttpReqFailed", map[string]interface{}{"err": err.Error()}, err)
37+
}
38+
}
39+
if resp.StatusCode == 404 {
40+
return nil, buserr.New("ErrHttpReqNotFound")
41+
}
42+
43+
return resp, nil
44+
}
45+
46+
func HandleRequest(url, method string, timeout int) (int, []byte, error) {
47+
defer func() {
48+
if r := recover(); r != nil {
49+
global.LOG.Errorf("handle request failed, error message: %v", r)
50+
return
51+
}
52+
}()
53+
54+
transport := loadRequestTransport()
55+
client := http.Client{Timeout: time.Duration(timeout) * time.Second, Transport: transport}
56+
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second)
57+
defer cancel()
58+
request, err := http.NewRequestWithContext(ctx, method, url, nil)
59+
if err != nil {
60+
return 0, nil, err
61+
}
62+
request.Header.Set("Content-Type", "application/json")
63+
resp, err := client.Do(request)
64+
if err != nil {
65+
return 0, nil, err
66+
}
67+
if resp.StatusCode != http.StatusOK {
68+
return 0, nil, errors.New(resp.Status)
69+
}
70+
body, err := io.ReadAll(resp.Body)
71+
if err != nil {
72+
return 0, nil, err
73+
}
74+
defer resp.Body.Close()
75+
76+
return resp.StatusCode, body, nil
77+
}
78+
79+
func loadRequestTransport() *http.Transport {
80+
return &http.Transport{
81+
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
82+
DialContext: (&net.Dialer{
83+
Timeout: 60 * time.Second,
84+
KeepAlive: 60 * time.Second,
85+
}).DialContext,
86+
TLSHandshakeTimeout: 5 * time.Second,
87+
ResponseHeaderTimeout: 10 * time.Second,
88+
IdleConnTimeout: 15 * time.Second,
89+
}
90+
}

agent/utils/xpack/xpack.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,8 @@
33
package xpack
44

55
import (
6-
"crypto/tls"
76
"fmt"
8-
"net"
9-
"net/http"
107
"strings"
11-
"time"
128

139
"github.com/1Panel-dev/1Panel/agent/app/dto"
1410
"github.com/1Panel-dev/1Panel/agent/app/model"
@@ -19,19 +15,6 @@ import (
1915

2016
func RemoveTamper(website string) {}
2117

22-
func LoadRequestTransport() *http.Transport {
23-
return &http.Transport{
24-
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
25-
DialContext: (&net.Dialer{
26-
Timeout: 60 * time.Second,
27-
KeepAlive: 60 * time.Second,
28-
}).DialContext,
29-
TLSHandshakeTimeout: 5 * time.Second,
30-
ResponseHeaderTimeout: 10 * time.Second,
31-
IdleConnTimeout: 15 * time.Second,
32-
}
33-
}
34-
3518
func LoadGpuInfo() []interface{} {
3619
return nil
3720
}

0 commit comments

Comments
 (0)