diff --git a/database/db.go b/database/db.go
index d3730bb2..c75953f0 100644
--- a/database/db.go
+++ b/database/db.go
@@ -53,7 +53,7 @@ func initInbound() error {
}
func initOutbound() error {
- return db.AutoMigrate(&model.Outbound{})
+ return db.AutoMigrate(&model.OutboundTraffics{})
}
func initSetting() error {
diff --git a/database/model/model.go b/database/model/model.go
index b66e114f..32ab255f 100644
--- a/database/model/model.go
+++ b/database/model/model.go
@@ -45,7 +45,7 @@ type Inbound struct {
Sniffing string `json:"sniffing" form:"sniffing"`
}
-type Outbound struct {
+type OutboundTraffics struct {
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement"`
Tag string `json:"tag" form:"tag" gorm:"unique"`
Up int64 `json:"up" form:"up" gorm:"default:0"`
diff --git a/web/controller/xray_setting.go b/web/controller/xray_setting.go
index 09e9115f..430cc77b 100644
--- a/web/controller/xray_setting.go
+++ b/web/controller/xray_setting.go
@@ -10,6 +10,7 @@ type XraySettingController struct {
XraySettingService service.XraySettingService
SettingService service.SettingService
InboundService service.InboundService
+ OutboundService service.OutboundService
XrayService service.XrayService
}
@@ -27,6 +28,7 @@ func (a *XraySettingController) initRouter(g *gin.RouterGroup) {
g.GET("/getXrayResult", a.getXrayResult)
g.GET("/getDefaultJsonConfig", a.getDefaultXrayConfig)
g.POST("/warp/:action", a.warp)
+ g.GET("/getOutboundsTraffic", a.getOutboundsTraffic)
}
func (a *XraySettingController) getXraySetting(c *gin.Context) {
@@ -84,3 +86,12 @@ func (a *XraySettingController) warp(c *gin.Context) {
jsonObj(c, resp, err)
}
+
+func (a *XraySettingController) getOutboundsTraffic(c *gin.Context) {
+ outboundsTraffic, err := a.OutboundService.GetOutboundsTraffic()
+ if err != nil {
+ jsonMsg(c, "Error getting traffics", err)
+ return
+ }
+ jsonObj(c, outboundsTraffic, nil)
+}
diff --git a/web/html/xui/xray.html b/web/html/xui/xray.html
index d6f0c0f8..8c2c9344 100644
--- a/web/html/xui/xray.html
+++ b/web/html/xui/xray.html
@@ -378,6 +378,9 @@
reality
+
+ [[ findOutboundTraffic(outbound) ]]
+
@@ -463,6 +466,7 @@
{ title: '{{ i18n "pages.xray.outbound.tag"}}', dataIndex: 'tag', align: 'center', width: 50 },
{ title: '{{ i18n "protocol"}}', align: 'center', width: 50, scopedSlots: { customRender: 'protocol' } },
{ title: '{{ i18n "pages.xray.outbound.address"}}', align: 'center', width: 50, scopedSlots: { customRender: 'address' } },
+ { title: '{{ i18n "pages.inbounds.traffic" }}', align: 'center', width: 50, scopedSlots: { customRender: 'traffic' } },
];
const reverseColumns = [
@@ -483,6 +487,7 @@
oldXraySetting: '',
xraySetting: '',
inboundTags: [],
+ outboundsTraffic: [],
saveBtnDisable: true,
restartResult: '',
isMobile: window.innerWidth <= 768,
@@ -581,6 +586,12 @@
loading(spinning = true) {
this.spinning = spinning;
},
+ async getOutboundsTraffic() {
+ const msg = await HttpUtil.get("/panel/xray/getOutboundsTraffic");
+ if (msg.success) {
+ this.outboundsTraffic = msg.obj;
+ }
+ },
async getXraySetting() {
this.loading(true);
const msg = await HttpUtil.post("/panel/xray/");
@@ -759,6 +770,14 @@
}
return true;
},
+ findOutboundTraffic(o) {
+ for (const otraffic of this.outboundsTraffic) {
+ if (otraffic.tag == o.tag) {
+ return sizeFormat(otraffic.up) + ' / ' + sizeFormat(otraffic.down);
+ }
+ }
+ return sizeFormat(0) + ' / ' + sizeFormat(0);
+ },
findOutboundAddress(o) {
serverObj = null;
switch(o.protocol){
@@ -949,6 +968,7 @@
async mounted() {
await this.getXraySetting();
await this.getXrayResult();
+ await this.getOutboundsTraffic();
while (true) {
await PromiseUtil.sleep(800);
this.saveBtnDisable = this.oldXraySetting === this.xraySetting;
diff --git a/web/service/outbound.go b/web/service/outbound.go
index 9684c651..dc0e0742 100644
--- a/web/service/outbound.go
+++ b/web/service/outbound.go
@@ -3,6 +3,7 @@ package service
import (
"x-ui/database"
"x-ui/database/model"
+ "x-ui/logger"
"x-ui/xray"
"gorm.io/gorm"
@@ -43,9 +44,9 @@ func (s *OutboundService) addOutboundTraffic(tx *gorm.DB, traffics []*xray.Traff
for _, traffic := range traffics {
if traffic.IsOutbound {
- var outbound model.Outbound
+ var outbound model.OutboundTraffics
- err = tx.Model(&model.Outbound{}).Where("tag = ?", traffic.Tag).
+ err = tx.Model(&model.OutboundTraffics{}).Where("tag = ?", traffic.Tag).
FirstOrCreate(&outbound).Error
if err != nil {
return err
@@ -64,3 +65,16 @@ func (s *OutboundService) addOutboundTraffic(tx *gorm.DB, traffics []*xray.Traff
}
return nil
}
+
+func (s *OutboundService) GetOutboundsTraffic() ([]*model.OutboundTraffics, error) {
+ db := database.GetDB()
+ var traffics []*model.OutboundTraffics
+
+ err := db.Model(model.OutboundTraffics{}).Find(&traffics).Error
+ if err != nil {
+ logger.Warning(err)
+ return nil, err
+ }
+
+ return traffics, nil
+}