Skip to content

Commit 14e1691

Browse files
committed
fix: 修复场景创建跳转路径 && 修复批量创建显示连接池为0的问题
1 parent 6090b24 commit 14e1691

5 files changed

Lines changed: 80 additions & 59 deletions

File tree

app/templates/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1524,7 +1524,7 @@ export default function TemplatesPage() {
15241524

15251525
// 延迟跳转到分组页面
15261526
setTimeout(() => {
1527-
router.push('/groups');
1527+
router.push('/tunnels');
15281528
}, 1500);
15291529
} catch (error) {
15301530
console.error('创建失败:', error);

app/tunnels/components/toolbox.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ export const TunnelToolBox: React.FC<TunnelToolBoxProps> = ({
535535
</Button>
536536

537537
{/* 创建按钮组 */}
538-
<ButtonGroup className="flex-1">
538+
<ButtonGroup className="flex-1 ">
539539
<Button
540540
color="primary"
541541
startContent={loading ? <Spinner size="sm" /> : <FontAwesomeIcon icon={faPlus} />}

internal/api/tunnel.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,13 @@ func (h *TunnelHandler) HandleCreateTunnel(w http.ResponseWriter, r *http.Reques
152152
return
153153
}
154154

155-
// 对于未设置的min/max,使用-1表示"未设置"状态(在请求中传递,但数据库存储时会转为NULL)
156-
if !minSet {
157-
minVal = -1
155+
// 根据设置情况决定是否使用指针
156+
var minPtr, maxPtr *int
157+
if minSet {
158+
minPtr = &minVal
158159
}
159-
if !maxSet {
160-
maxVal = -1
160+
if maxSet {
161+
maxPtr = &maxVal
161162
}
162163

163164
req := tunnel.CreateTunnelRequest{
@@ -173,8 +174,8 @@ func (h *TunnelHandler) HandleCreateTunnel(w http.ResponseWriter, r *http.Reques
173174
KeyPath: raw.KeyPath,
174175
LogLevel: tunnel.LogLevel(raw.LogLevel),
175176
Password: raw.Password,
176-
Min: minVal,
177-
Max: maxVal,
177+
Min: minPtr,
178+
Max: maxPtr,
178179
}
179180

180181
log.Infof("[Master-%v] 创建隧道请求: %v", req.EndpointID, req.Name)
@@ -557,12 +558,13 @@ func (h *TunnelHandler) HandleUpdateTunnel(w http.ResponseWriter, r *http.Reques
557558
minVal, minSet, _ := parseIntFieldLocal(rawCreate.Min)
558559
maxVal, maxSet, _ := parseIntFieldLocal(rawCreate.Max)
559560

560-
// 对于未设置的min/max,使用-1表示"未设置"状态
561-
if !minSet {
562-
minVal = -1
561+
// 根据设置情况决定是否使用指针
562+
var minPtr, maxPtr *int
563+
if minSet {
564+
minPtr = &minVal
563565
}
564-
if !maxSet {
565-
maxVal = -1
566+
if maxSet {
567+
maxPtr = &maxVal
566568
}
567569

568570
createReq := tunnel.CreateTunnelRequest{
@@ -578,8 +580,8 @@ func (h *TunnelHandler) HandleUpdateTunnel(w http.ResponseWriter, r *http.Reques
578580
KeyPath: rawCreate.KeyPath,
579581
LogLevel: tunnel.LogLevel(rawCreate.LogLevel),
580582
Password: rawCreate.Password,
581-
Min: minVal,
582-
Max: maxVal,
583+
Min: minPtr,
584+
Max: maxPtr,
583585
}
584586

585587
// 使用等待模式创建新隧道,超时时间为 3 秒
@@ -2854,11 +2856,12 @@ func (h *TunnelHandler) HandleUpdateTunnelV2(w http.ResponseWriter, r *http.Requ
28542856
// 重新创建,处理min/max未设置状态
28552857
minVal, minSet, _ := parseIntV2(raw.Min)
28562858
maxVal, maxSet, _ := parseIntV2(raw.Max)
2857-
if !minSet {
2858-
minVal = -1
2859+
var minPtr, maxPtr *int
2860+
if minSet {
2861+
minPtr = &minVal
28592862
}
2860-
if !maxSet {
2861-
maxVal = -1
2863+
if maxSet {
2864+
maxPtr = &maxVal
28622865
}
28632866
createReq := tunnel.CreateTunnelRequest{
28642867
Name: raw.Name,
@@ -2873,8 +2876,8 @@ func (h *TunnelHandler) HandleUpdateTunnelV2(w http.ResponseWriter, r *http.Requ
28732876
KeyPath: raw.KeyPath,
28742877
LogLevel: tunnel.LogLevel(raw.LogLevel),
28752878
Password: raw.Password,
2876-
Min: minVal,
2877-
Max: maxVal,
2879+
Min: minPtr,
2880+
Max: maxPtr,
28782881
}
28792882
newTunnel, crtErr := h.tunnelService.CreateTunnelAndWait(createReq, 3*time.Second)
28802883
if crtErr != nil {

internal/tunnel/models.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ type CreateTunnelRequest struct {
117117
KeyPath string `json:"keyPath,omitempty"`
118118
LogLevel LogLevel `json:"logLevel"`
119119
Password string `json:"password,omitempty"`
120-
Min int `json:"min,omitempty"`
121-
Max int `json:"max,omitempty"`
120+
Min *int `json:"min,omitempty"`
121+
Max *int `json:"max,omitempty"`
122122
Restart bool `json:"restart"`
123123
}
124124

@@ -209,9 +209,9 @@ type UpdateTunnelRequest struct {
209209
KeyPath string `json:"keyPath,omitempty"`
210210
LogLevel LogLevel `json:"logLevel,omitempty"`
211211
Password string `json:"password,omitempty"`
212-
Min int `json:"min,omitempty"`
212+
Min *int `json:"min,omitempty"`
213+
Max *int `json:"max,omitempty"`
213214
Restart bool `json:"restart"`
214-
Max int `json:"max,omitempty"`
215215
}
216216

217217
// TunnelActionRequest 隧道操作请求

internal/tunnel/service.go

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -418,11 +418,11 @@ func (s *Service) CreateTunnel(req CreateTunnelRequest) (*Tunnel, error) {
418418
}
419419

420420
if req.Mode == "client" {
421-
if req.Min >= 0 {
422-
queryParams = append(queryParams, fmt.Sprintf("min=%d", req.Min))
421+
if req.Min != nil {
422+
queryParams = append(queryParams, fmt.Sprintf("min=%d", *req.Min))
423423
}
424-
if req.Max >= 0 {
425-
queryParams = append(queryParams, fmt.Sprintf("max=%d", req.Max))
424+
if req.Max != nil {
425+
queryParams = append(queryParams, fmt.Sprintf("max=%d", *req.Max))
426426
}
427427
}
428428

@@ -473,13 +473,13 @@ func (s *Service) CreateTunnel(req CreateTunnelRequest) (*Tunnel, error) {
473473
commandLine,
474474
req.Password,
475475
func() interface{} {
476-
if req.Min >= 0 {
476+
if req.Min != nil {
477477
return req.Min
478478
}
479479
return nil
480480
}(),
481481
func() interface{} {
482-
if req.Max >= 0 {
482+
if req.Max != nil {
483483
return req.Max
484484
}
485485
return nil
@@ -544,14 +544,14 @@ func (s *Service) CreateTunnel(req CreateTunnelRequest) (*Tunnel, error) {
544544
CommandLine: commandLine,
545545
Password: req.Password,
546546
Min: func() *int {
547-
if req.Min >= 0 {
548-
return &req.Min
547+
if req.Min != nil {
548+
return req.Min
549549
}
550550
return nil
551551
}(),
552552
Max: func() *int {
553-
if req.Max >= 0 {
554-
return &req.Max
553+
if req.Max != nil {
554+
return req.Max
555555
}
556556
return nil
557557
}(),
@@ -1220,11 +1220,11 @@ func (s *Service) CreateTunnelAndWait(req CreateTunnelRequest, timeout time.Dura
12201220
}
12211221
}
12221222
if req.Mode == "client" {
1223-
if req.Min >= 0 {
1224-
queryParams = append(queryParams, fmt.Sprintf("min=%d", req.Min))
1223+
if req.Min != nil {
1224+
queryParams = append(queryParams, fmt.Sprintf("min=%d", *req.Min))
12251225
}
1226-
if req.Max >= 0 {
1227-
queryParams = append(queryParams, fmt.Sprintf("max=%d", req.Max))
1226+
if req.Max != nil {
1227+
queryParams = append(queryParams, fmt.Sprintf("max=%d", *req.Max))
12281228
}
12291229
}
12301230
if len(queryParams) > 0 {
@@ -1312,14 +1312,14 @@ func (s *Service) CreateTunnelAndWait(req CreateTunnelRequest, timeout time.Dura
13121312
CommandLine: commandLine,
13131313
Password: req.Password,
13141314
Min: func() *int {
1315-
if req.Min >= 0 {
1316-
return &req.Min
1315+
if req.Min != nil {
1316+
return req.Min
13171317
}
13181318
return nil
13191319
}(),
13201320
Max: func() *int {
1321-
if req.Max >= 0 {
1322-
return &req.Max
1321+
if req.Max != nil {
1322+
return req.Max
13231323
}
13241324
return nil
13251325
}(),
@@ -1358,13 +1358,13 @@ func (s *Service) CreateTunnelAndWait(req CreateTunnelRequest, timeout time.Dura
13581358
req.TLSMode, req.CertPath, req.KeyPath, req.LogLevel, commandLine,
13591359
req.Password,
13601360
func() interface{} {
1361-
if req.Min >= 0 {
1361+
if req.Min != nil {
13621362
return req.Min
13631363
}
13641364
return nil
13651365
}(),
13661366
func() interface{} {
1367-
if req.Max >= 0 {
1367+
if req.Max != nil {
13681368
return req.Max
13691369
}
13701370
return nil
@@ -1429,14 +1429,14 @@ func (s *Service) CreateTunnelAndWait(req CreateTunnelRequest, timeout time.Dura
14291429
CommandLine: commandLine,
14301430
Password: req.Password,
14311431
Min: func() *int {
1432-
if req.Min >= 0 {
1433-
return &req.Min
1432+
if req.Min != nil {
1433+
return req.Min
14341434
}
14351435
return nil
14361436
}(),
14371437
Max: func() *int {
1438-
if req.Max >= 0 {
1439-
return &req.Max
1438+
if req.Max != nil {
1439+
return req.Max
14401440
}
14411441
return nil
14421442
}(),
@@ -1682,8 +1682,26 @@ func (s *Service) QuickCreateTunnel(endpointID int64, rawURL string, name string
16821682
KeyPath: cfg.KeyPath,
16831683
LogLevel: LogLevel(cfg.LogLevel),
16841684
Password: cfg.Password,
1685-
Min: func() int { v, _ := strconv.Atoi(cfg.Min); return v }(),
1686-
Max: func() int { v, _ := strconv.Atoi(cfg.Max); return v }(),
1685+
Min: func() *int {
1686+
if cfg.Min == "" {
1687+
return nil
1688+
}
1689+
v, err := strconv.Atoi(cfg.Min)
1690+
if err != nil {
1691+
return nil
1692+
}
1693+
return &v
1694+
}(),
1695+
Max: func() *int {
1696+
if cfg.Max == "" {
1697+
return nil
1698+
}
1699+
v, err := strconv.Atoi(cfg.Max)
1700+
if err != nil {
1701+
return nil
1702+
}
1703+
return &v
1704+
}(),
16871705
}
16881706
_, err := s.CreateTunnelAndWait(req, 3*time.Second)
16891707
return err
@@ -1709,16 +1727,16 @@ func (s *Service) QuickCreateTunnelAndWait(endpointID int64, rawURL string, name
17091727
}
17101728

17111729
// 正确处理min和max值,区分未设置和设置为0的情况
1712-
var minVal, maxVal int
1730+
var minVal, maxVal *int
17131731
if cfg.Min != "" {
1714-
minVal, _ = strconv.Atoi(cfg.Min)
1715-
} else {
1716-
minVal = -1 // 使用-1表示未设置
1732+
if val, err := strconv.Atoi(cfg.Min); err == nil {
1733+
minVal = &val
1734+
}
17171735
}
17181736
if cfg.Max != "" {
1719-
maxVal, _ = strconv.Atoi(cfg.Max)
1720-
} else {
1721-
maxVal = -1 // 使用-1表示未设置
1737+
if val, err := strconv.Atoi(cfg.Max); err == nil {
1738+
maxVal = &val
1739+
}
17221740
}
17231741

17241742
req := CreateTunnelRequest{

0 commit comments

Comments
 (0)