mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-07 02:06:38 +08:00
fix: load probe target with tunnel record
This commit is contained in:
@@ -242,7 +242,7 @@ func (p *tunnelQualityProber) probeTunnel(tunnelID int64) {
|
|||||||
pingTimeoutMS: tunnelQualityPingTimeoutMs,
|
pingTimeoutMS: tunnelQualityPingTimeoutMs,
|
||||||
timeoutMessage: "探测超时",
|
timeoutMessage: "探测超时",
|
||||||
}
|
}
|
||||||
probeTarget := p.probeTargetForTunnel(tunnelID)
|
probeTarget := effectiveTunnelProbeTargetValues(tunnel.ProbeTargetHost, tunnel.ProbeTargetPort)
|
||||||
p.probeBestExitOwners(tunnelID, inNodes, midNodesGrouped, outNodes, ipPreference, options, probeTarget)
|
p.probeBestExitOwners(tunnelID, inNodes, midNodesGrouped, outNodes, ipPreference, options, probeTarget)
|
||||||
|
|
||||||
switch tunnel.Type {
|
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) {
|
func (p *tunnelQualityProber) tcpPingNode(nodeID int64, ip string, port int, options diagnosisExecOptions) (latency float64, loss float64, err error) {
|
||||||
h := p.handler
|
h := p.handler
|
||||||
if h == nil {
|
if h == nil {
|
||||||
|
|||||||
@@ -555,12 +555,14 @@ type ForwardRecord struct {
|
|||||||
|
|
||||||
// TunnelRecord is a minimal tunnel view used by control plane.
|
// TunnelRecord is a minimal tunnel view used by control plane.
|
||||||
type TunnelRecord struct {
|
type TunnelRecord struct {
|
||||||
ID int64
|
ID int64
|
||||||
Type int
|
Type int
|
||||||
Status int
|
Status int
|
||||||
Flow int64
|
Flow int64
|
||||||
TrafficRatio float64
|
TrafficRatio float64
|
||||||
Protocol string
|
Protocol string
|
||||||
|
ProbeTargetHost string
|
||||||
|
ProbeTargetPort int
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserQuotaView struct {
|
type UserQuotaView struct {
|
||||||
|
|||||||
@@ -253,12 +253,14 @@ func (r *Repository) GetTunnelRecord(tunnelID int64) (*model.TunnelRecord, error
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
tr := model.TunnelRecord{
|
tr := model.TunnelRecord{
|
||||||
ID: t.ID,
|
ID: t.ID,
|
||||||
Type: t.Type,
|
Type: t.Type,
|
||||||
Status: t.Status,
|
Status: t.Status,
|
||||||
Flow: t.Flow,
|
Flow: t.Flow,
|
||||||
TrafficRatio: t.TrafficRatio,
|
TrafficRatio: t.TrafficRatio,
|
||||||
Protocol: t.Protocol,
|
Protocol: t.Protocol,
|
||||||
|
ProbeTargetHost: t.ProbeTargetHost,
|
||||||
|
ProbeTargetPort: t.ProbeTargetPort,
|
||||||
}
|
}
|
||||||
if tr.Flow <= 0 {
|
if tr.Flow <= 0 {
|
||||||
tr.Flow = 1
|
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) {
|
func TestAddUserQuotaUsageBatchReturnsNormalizedViews(t *testing.T) {
|
||||||
r, err := Open(filepath.Join(t.TempDir(), "quota-batch.db"))
|
r, err := Open(filepath.Join(t.TempDir(), "quota-batch.db"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user