mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-06 18:06:36 +08:00
feat(flow): expose forward owner metadata
This commit is contained in:
@@ -11,6 +11,8 @@ import (
|
|||||||
|
|
||||||
type FlowUploadForwardMeta struct {
|
type FlowUploadForwardMeta struct {
|
||||||
ForwardID int64
|
ForwardID int64
|
||||||
|
UserID int64
|
||||||
|
UserTunnelID int64
|
||||||
TunnelID int64
|
TunnelID int64
|
||||||
TrafficRatio float64
|
TrafficRatio float64
|
||||||
TunnelFlow int64
|
TunnelFlow int64
|
||||||
@@ -59,6 +61,8 @@ func (r *Repository) GetFlowUploadForwardMetas(forwardIDs []int64) (map[int64]Fl
|
|||||||
|
|
||||||
type row struct {
|
type row struct {
|
||||||
ForwardID int64 `gorm:"column:forward_id"`
|
ForwardID int64 `gorm:"column:forward_id"`
|
||||||
|
UserID int64 `gorm:"column:user_id"`
|
||||||
|
UserTunnelID int64 `gorm:"column:user_tunnel_id"`
|
||||||
TunnelID int64 `gorm:"column:tunnel_id"`
|
TunnelID int64 `gorm:"column:tunnel_id"`
|
||||||
TrafficRatio float64 `gorm:"column:traffic_ratio"`
|
TrafficRatio float64 `gorm:"column:traffic_ratio"`
|
||||||
TunnelFlow int64 `gorm:"column:tunnel_flow"`
|
TunnelFlow int64 `gorm:"column:tunnel_flow"`
|
||||||
@@ -68,8 +72,9 @@ func (r *Repository) GetFlowUploadForwardMetas(forwardIDs []int64) (map[int64]Fl
|
|||||||
for _, chunk := range chunkFlowUploadForwardIDs(ids) {
|
for _, chunk := range chunkFlowUploadForwardIDs(ids) {
|
||||||
var rows []row
|
var rows []row
|
||||||
err := r.db.Table("forward AS f").
|
err := r.db.Table("forward AS f").
|
||||||
Select("f.id AS forward_id, f.tunnel_id AS tunnel_id, t.traffic_ratio AS traffic_ratio, t.flow AS tunnel_flow").
|
Select("f.id AS forward_id, f.user_id AS user_id, COALESCE(ut.id, 0) AS user_tunnel_id, f.tunnel_id AS tunnel_id, t.traffic_ratio AS traffic_ratio, t.flow AS tunnel_flow").
|
||||||
Joins("LEFT JOIN tunnel t ON t.id = f.tunnel_id").
|
Joins("LEFT JOIN tunnel t ON t.id = f.tunnel_id").
|
||||||
|
Joins("LEFT JOIN user_tunnel ut ON ut.user_id = f.user_id AND ut.tunnel_id = f.tunnel_id").
|
||||||
Where("f.id IN ?", chunk).
|
Where("f.id IN ?", chunk).
|
||||||
Scan(&rows).Error
|
Scan(&rows).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -84,6 +89,8 @@ func (r *Repository) GetFlowUploadForwardMetas(forwardIDs []int64) (map[int64]Fl
|
|||||||
}
|
}
|
||||||
out[row.ForwardID] = FlowUploadForwardMeta{
|
out[row.ForwardID] = FlowUploadForwardMeta{
|
||||||
ForwardID: row.ForwardID,
|
ForwardID: row.ForwardID,
|
||||||
|
UserID: row.UserID,
|
||||||
|
UserTunnelID: row.UserTunnelID,
|
||||||
TunnelID: row.TunnelID,
|
TunnelID: row.TunnelID,
|
||||||
TrafficRatio: row.TrafficRatio,
|
TrafficRatio: row.TrafficRatio,
|
||||||
TunnelFlow: row.TunnelFlow,
|
TunnelFlow: row.TunnelFlow,
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ func TestGetFlowUploadForwardMetasAndApplyFlowUploadDeltasBatch(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("get metas: %v", err)
|
t.Fatalf("get metas: %v", err)
|
||||||
}
|
}
|
||||||
if metas[20].TunnelID != 1 || metas[20].TrafficRatio != 2 || metas[20].TunnelFlow != 3 {
|
if metas[20].UserID != 2 || metas[20].UserTunnelID != 10 || metas[20].TunnelID != 1 || metas[20].TrafficRatio != 2 || metas[20].TunnelFlow != 3 {
|
||||||
t.Fatalf("unexpected meta for forward 20: %#v", metas[20])
|
t.Fatalf("unexpected meta for forward 20: %#v", metas[20])
|
||||||
}
|
}
|
||||||
if _, ok := metas[99]; ok {
|
if _, ok := metas[99]; ok {
|
||||||
@@ -106,7 +106,7 @@ func TestGetFlowUploadForwardMetasKeepsForwardsWhenTunnelRowMissing(t *testing.T
|
|||||||
if !ok {
|
if !ok {
|
||||||
t.Fatalf("expected metadata for forward with missing tunnel row")
|
t.Fatalf("expected metadata for forward with missing tunnel row")
|
||||||
}
|
}
|
||||||
if meta.ForwardID != 25 || meta.TunnelID != 99 || meta.TrafficRatio != 1 || meta.TunnelFlow != 1 {
|
if meta.ForwardID != 25 || meta.UserID != 2 || meta.UserTunnelID != 0 || meta.TunnelID != 99 || meta.TrafficRatio != 1 || meta.TunnelFlow != 1 {
|
||||||
t.Fatalf("unexpected fallback meta: %#v", meta)
|
t.Fatalf("unexpected fallback meta: %#v", meta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user