From f734c821d6e62eca5a206b6048f3cd7d65f3e665 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Mon, 4 Dec 2023 19:13:21 +0100 Subject: online users backend #1286 --- web/controller/inbound.go | 5 +++++ web/service/inbound.go | 18 ++++++++++++++++++ web/service/server.go | 2 +- 3 files changed, 24 insertions(+), 1 deletion(-) (limited to 'web') 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 -- cgit v1.2.3