From 5f4e5f7f3e605f2a25f5dbb232b504537e1109c8 Mon Sep 17 00:00:00 2001 From: Surbiks Date: Mon, 29 Jan 2024 21:01:44 +0330 Subject: [PATCH] show outbound traffic in outbounds table --- database/db.go | 2 +- database/model/model.go | 2 +- web/controller/xray_setting.go | 11 +++++++++++ web/html/xui/xray.html | 20 ++++++++++++++++++++ web/service/outbound.go | 18 ++++++++++++++++-- 5 files changed, 49 insertions(+), 4 deletions(-) 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 + @@ -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 +}