From f734c821d6e62eca5a206b6048f3cd7d65f3e665 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Mon, 4 Dec 2023 19:13:21 +0100 Subject: [PATCH] online users backend #1286 --- web/controller/inbound.go | 5 +++++ web/service/inbound.go | 18 ++++++++++++++++++ web/service/server.go | 2 +- xray/process.go | 10 ++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/web/controller/inbound.go b/web/controller/inbound.go index 8b64fe6e..0fa54cd4 100644 --- a/web/controller/inbound.go +++ b/web/controller/inbound.go @@ -37,6 +37,7 @@ func (a *InboundController) initRouter(g *gin.RouterGroup) { g.POST("/resetAllTraffics", a.resetAllTraffics) g.POST("/resetAllClientTraffics/:id", a.resetAllClientTraffics) g.POST("/delDepletedClients/:id", a.delDepletedClients) + g.POST("/onlines", a.onlines) } func (a *InboundController) getInbounds(c *gin.Context) { @@ -278,3 +279,7 @@ func (a *InboundController) delDepletedClients(c *gin.Context) { } jsonMsg(c, "All delpeted clients are deleted", nil) } + +func (a *InboundController) onlines(c *gin.Context) { + jsonObj(c, a.inboundService.GetOnlineClinets(), nil) +} diff --git a/web/service/inbound.go b/web/service/inbound.go index 1646b5ed..5972d9a5 100644 --- a/web/service/inbound.go +++ b/web/service/inbound.go @@ -716,9 +716,15 @@ func (s *InboundService) addInboundTraffic(tx *gorm.DB, traffics []*xray.Traffic func (s *InboundService) addClientTraffic(tx *gorm.DB, traffics []*xray.ClientTraffic) (err error) { if len(traffics) == 0 { + // Empty onlineUsers + if p != nil { + p.SetOnlineClients(nil) + } return nil } + var onlineClients []string + emails := make([]string, 0, len(traffics)) for _, traffic := range traffics { emails = append(emails, traffic.Email) @@ -744,11 +750,19 @@ func (s *InboundService) addClientTraffic(tx *gorm.DB, traffics []*xray.ClientTr if dbClientTraffics[dbTraffic_index].Email == traffics[traffic_index].Email { dbClientTraffics[dbTraffic_index].Up += traffics[traffic_index].Up dbClientTraffics[dbTraffic_index].Down += traffics[traffic_index].Down + + // Add user in onlineUsers array on traffic + if traffics[traffic_index].Up+traffics[traffic_index].Down > 0 { + onlineClients = append(onlineClients, traffics[traffic_index].Email) + } break } } } + // Set onlineUsers + p.SetOnlineClients(onlineClients) + err = tx.Save(dbClientTraffics).Error if err != nil { logger.Warning("AddClientTraffic update data ", err) @@ -1675,3 +1689,7 @@ func (s *InboundService) MigrateDB() { s.MigrationRequirements() s.MigrationRemoveOrphanedTraffics() } + +func (s *InboundService) GetOnlineClinets() []string { + return p.GetOnlineClients() +} diff --git a/web/service/server.go b/web/service/server.go index d88fa098..629d9253 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -230,7 +230,7 @@ func (s *ServerService) GetStatus(lastStatus *Status) *Status { status.AppStats.Mem = rtm.Sys status.AppStats.Threads = uint32(runtime.NumGoroutine()) - if p.IsRunning() { + if p != nil && p.IsRunning() { status.AppStats.Uptime = p.GetUptime() } else { status.AppStats.Uptime = 0 diff --git a/xray/process.go b/xray/process.go index 2e545fba..a3c37fd5 100644 --- a/xray/process.go +++ b/xray/process.go @@ -98,6 +98,8 @@ type process struct { version string apiPort int + onlineClients []string + config *Config lines *queue.Queue exitErr error @@ -153,6 +155,14 @@ func (p *Process) GetConfig() *Config { return p.config } +func (p *Process) GetOnlineClients() []string { + return p.onlineClients +} + +func (p *Process) SetOnlineClients(users []string) { + p.onlineClients = users +} + func (p *Process) GetUptime() uint64 { return uint64(time.Since(p.startTime).Seconds()) }