流量统计,修复问题

This commit is contained in:
sprov
2021-05-30 22:41:02 +08:00
parent 4bae13dcc6
commit 810dad53d5
18 changed files with 690 additions and 149 deletions

112
web/controller/inbound.go Normal file
View File

@@ -0,0 +1,112 @@
package controller
import (
"fmt"
"github.com/gin-gonic/gin"
"go.uber.org/atomic"
"strconv"
"x-ui/database/model"
"x-ui/logger"
"x-ui/web/global"
"x-ui/web/service"
"x-ui/web/session"
)
type InboundController struct {
inboundService service.InboundService
xrayService service.XrayService
isNeedXrayRestart atomic.Bool
}
func NewInboundController(g *gin.RouterGroup) *InboundController {
a := &InboundController{}
a.initRouter(g)
a.startTask()
return a
}
func (a *InboundController) initRouter(g *gin.RouterGroup) {
g = g.Group("/inbound")
g.POST("/list", a.getInbounds)
g.POST("/add", a.addInbound)
g.POST("/del/:id", a.delInbound)
g.POST("/update/:id", a.updateInbound)
}
func (a *InboundController) startTask() {
webServer := global.GetWebServer()
c := webServer.GetCron()
c.AddFunc("@every 10s", func() {
if a.isNeedXrayRestart.Load() {
err := a.xrayService.RestartXray()
if err != nil {
logger.Error("restart xray failed:", err)
}
a.isNeedXrayRestart.Store(false)
}
})
}
func (a *InboundController) getInbounds(c *gin.Context) {
user := session.GetLoginUser(c)
inbounds, err := a.inboundService.GetInbounds(user.Id)
if err != nil {
jsonMsg(c, "获取", err)
return
}
jsonObj(c, inbounds, nil)
}
func (a *InboundController) addInbound(c *gin.Context) {
inbound := &model.Inbound{}
err := c.ShouldBind(inbound)
if err != nil {
jsonMsg(c, "添加", err)
return
}
user := session.GetLoginUser(c)
inbound.UserId = user.Id
inbound.Enable = true
inbound.Tag = fmt.Sprintf("inbound-%v", inbound.Port)
err = a.inboundService.AddInbound(inbound)
jsonMsg(c, "添加", err)
if err == nil {
a.isNeedXrayRestart.Store(true)
}
}
func (a *InboundController) delInbound(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
jsonMsg(c, "删除", err)
return
}
err = a.inboundService.DelInbound(id)
jsonMsg(c, "删除", err)
if err == nil {
a.isNeedXrayRestart.Store(true)
}
}
func (a *InboundController) updateInbound(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
jsonMsg(c, "修改", err)
return
}
inbound := &model.Inbound{
Id: id,
}
err = c.ShouldBind(inbound)
if err != nil {
jsonMsg(c, "修改", err)
return
}
err = a.inboundService.UpdateInbound(inbound)
jsonMsg(c, "修改", err)
if err == nil {
a.isNeedXrayRestart.Store(true)
}
}

44
web/controller/setting.go Normal file
View File

@@ -0,0 +1,44 @@
package controller
import (
"github.com/gin-gonic/gin"
"x-ui/web/entity"
"x-ui/web/service"
)
type SettingController struct {
settingService service.SettingService
}
func NewSettingController(g *gin.RouterGroup) *SettingController {
a := &SettingController{}
a.initRouter(g)
return a
}
func (a *SettingController) initRouter(g *gin.RouterGroup) {
g = g.Group("/setting")
g.POST("/all", a.getAllSetting)
g.POST("/update", a.updateSetting)
}
func (a *SettingController) getAllSetting(c *gin.Context) {
allSetting, err := a.settingService.GetAllSetting()
if err != nil {
jsonMsg(c, "获取设置", err)
return
}
jsonObj(c, allSetting, nil)
}
func (a *SettingController) updateSetting(c *gin.Context) {
allSetting := &entity.AllSetting{}
err := c.ShouldBind(allSetting)
if err != nil {
jsonMsg(c, "修改设置", err)
return
}
err = a.settingService.UpdateAllSetting(allSetting)
jsonMsg(c, "修改设置", err)
}

View File

@@ -2,31 +2,18 @@ package controller
import (
"github.com/gin-gonic/gin"
"go.uber.org/atomic"
"log"
"strconv"
"x-ui/database/model"
"x-ui/logger"
"x-ui/web/entity"
"x-ui/web/global"
"x-ui/web/service"
"x-ui/web/session"
)
type XUIController struct {
BaseController
inboundService service.InboundService
xrayService service.XrayService
settingService service.SettingService
isNeedXrayRestart atomic.Bool
inboundController *InboundController
settingController *SettingController
}
func NewXUIController(g *gin.RouterGroup) *XUIController {
a := &XUIController{}
a.initRouter(g)
a.startTask()
return a
}
@@ -36,27 +23,10 @@ func (a *XUIController) initRouter(g *gin.RouterGroup) {
g.GET("/", a.index)
g.GET("/inbounds", a.inbounds)
g.POST("/inbounds", a.getInbounds)
g.POST("/inbound/add", a.addInbound)
g.POST("/inbound/del/:id", a.delInbound)
g.POST("/inbound/update/:id", a.updateInbound)
g.GET("/setting", a.setting)
g.POST("/setting/all", a.getAllSetting)
g.POST("/setting/update", a.updateSetting)
}
func (a *XUIController) startTask() {
webServer := global.GetWebServer()
c := webServer.GetCron()
c.AddFunc("@every 10s", func() {
if a.isNeedXrayRestart.Load() {
err := a.xrayService.RestartXray()
if err != nil {
logger.Error("restart xray failed:", err)
}
a.isNeedXrayRestart.Store(false)
}
})
a.inboundController = NewInboundController(g)
a.settingController = NewSettingController(g)
}
func (a *XUIController) index(c *gin.Context) {
@@ -70,85 +40,3 @@ func (a *XUIController) inbounds(c *gin.Context) {
func (a *XUIController) setting(c *gin.Context) {
html(c, "setting.html", "设置", nil)
}
func (a *XUIController) getInbounds(c *gin.Context) {
user := session.GetLoginUser(c)
inbounds, err := a.inboundService.GetInbounds(user.Id)
if err != nil {
jsonMsg(c, "获取", err)
return
}
jsonObj(c, inbounds, nil)
}
func (a *XUIController) addInbound(c *gin.Context) {
inbound := &model.Inbound{}
err := c.ShouldBind(inbound)
if err != nil {
jsonMsg(c, "添加", err)
return
}
user := session.GetLoginUser(c)
inbound.UserId = user.Id
inbound.Enable = true
log.Println(inbound)
err = a.inboundService.AddInbound(inbound)
jsonMsg(c, "添加", err)
if err == nil {
a.isNeedXrayRestart.Store(true)
}
}
func (a *XUIController) delInbound(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
jsonMsg(c, "删除", err)
return
}
err = a.inboundService.DelInbound(id)
jsonMsg(c, "删除", err)
if err == nil {
a.isNeedXrayRestart.Store(true)
}
}
func (a *XUIController) updateInbound(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
jsonMsg(c, "修改", err)
return
}
inbound := &model.Inbound{
Id: id,
}
err = c.ShouldBind(inbound)
if err != nil {
jsonMsg(c, "修改", err)
return
}
err = a.inboundService.UpdateInbound(inbound)
jsonMsg(c, "修改", err)
if err == nil {
a.isNeedXrayRestart.Store(true)
}
}
func (a *XUIController) getAllSetting(c *gin.Context) {
allSetting, err := a.settingService.GetAllSetting()
if err != nil {
jsonMsg(c, "获取设置", err)
return
}
jsonObj(c, allSetting, nil)
}
func (a *XUIController) updateSetting(c *gin.Context) {
allSetting := &entity.AllSetting{}
err := c.ShouldBind(allSetting)
if err != nil {
jsonMsg(c, "修改设置", err)
return
}
err = a.settingService.UpdateAllSetting(allSetting)
jsonMsg(c, "修改设置", err)
}