fix: load probe target with tunnel record

This commit is contained in:
sagitchu
2026-05-01 23:24:48 +08:00
parent cc0b8de2e1
commit a259dd83b2
4 changed files with 44 additions and 29 deletions
@@ -242,7 +242,7 @@ func (p *tunnelQualityProber) probeTunnel(tunnelID int64) {
pingTimeoutMS: tunnelQualityPingTimeoutMs,
timeoutMessage: "探测超时",
}
probeTarget := p.probeTargetForTunnel(tunnelID)
probeTarget := effectiveTunnelProbeTargetValues(tunnel.ProbeTargetHost, tunnel.ProbeTargetPort)
p.probeBestExitOwners(tunnelID, inNodes, midNodesGrouped, outNodes, ipPreference, options, probeTarget)
switch tunnel.Type {
@@ -422,22 +422,6 @@ func (p *tunnelQualityProber) probeBestExitOwners(tunnelID int64, inNodes []chai
}
}
func (p *tunnelQualityProber) probeTargetForTunnel(tunnelID int64) tunnelProbeTarget {
if p == nil || p.handler == nil || p.handler.repo == nil {
return defaultTunnelProbeTarget()
}
tunnels, err := p.handler.repo.ListTunnels()
if err != nil {
return defaultTunnelProbeTarget()
}
for _, tunnel := range tunnels {
if asInt64(tunnel["id"], 0) == tunnelID {
return effectiveTunnelProbeTargetValues(asString(tunnel["probeTargetHost"]), asInt(tunnel["probeTargetPort"], 0))
}
}
return defaultTunnelProbeTarget()
}
func (p *tunnelQualityProber) tcpPingNode(nodeID int64, ip string, port int, options diagnosisExecOptions) (latency float64, loss float64, err error) {
h := p.handler
if h == nil {
+8 -6
View File
@@ -555,12 +555,14 @@ type ForwardRecord struct {
// TunnelRecord is a minimal tunnel view used by control plane.
type TunnelRecord struct {
ID int64
Type int
Status int
Flow int64
TrafficRatio float64
Protocol string
ID int64
Type int
Status int
Flow int64
TrafficRatio float64
Protocol string
ProbeTargetHost string
ProbeTargetPort int
}
type UserQuotaView struct {
@@ -253,12 +253,14 @@ func (r *Repository) GetTunnelRecord(tunnelID int64) (*model.TunnelRecord, error
return nil, err
}
tr := model.TunnelRecord{
ID: t.ID,
Type: t.Type,
Status: t.Status,
Flow: t.Flow,
TrafficRatio: t.TrafficRatio,
Protocol: t.Protocol,
ID: t.ID,
Type: t.Type,
Status: t.Status,
Flow: t.Flow,
TrafficRatio: t.TrafficRatio,
Protocol: t.Protocol,
ProbeTargetHost: t.ProbeTargetHost,
ProbeTargetPort: t.ProbeTargetPort,
}
if tr.Flow <= 0 {
tr.Flow = 1
@@ -111,6 +111,33 @@ func TestGetFlowUploadForwardMetasKeepsForwardsWhenTunnelRowMissing(t *testing.T
}
}
func TestGetTunnelRecordIncludesProbeTarget(t *testing.T) {
r, err := Open(filepath.Join(t.TempDir(), "tunnel-record-probe-target.db"))
if err != nil {
t.Fatalf("open repo: %v", err)
}
defer r.Close()
now := time.Now().UnixMilli()
if err := r.DB().Exec(`
INSERT INTO tunnel(id, name, traffic_ratio, type, protocol, flow, created_time, updated_time, status, in_ip, inx, probe_target_host, probe_target_port)
VALUES(1, 't1', 1, 2, 'tls', 1, ?, ?, 1, NULL, 0, 'speed.example.com', 8443)
`, now, now).Error; err != nil {
t.Fatalf("insert tunnel: %v", err)
}
record, err := r.GetTunnelRecord(1)
if err != nil {
t.Fatalf("get tunnel record: %v", err)
}
if record == nil {
t.Fatalf("expected tunnel record")
}
if record.ProbeTargetHost != "speed.example.com" || record.ProbeTargetPort != 8443 {
t.Fatalf("unexpected probe target on record: %#v", record)
}
}
func TestAddUserQuotaUsageBatchReturnsNormalizedViews(t *testing.T) {
r, err := Open(filepath.Join(t.TempDir(), "quota-batch.db"))
if err != nil {