瀏覽代碼

online users backend #1286

Alireza Ahmadi 1 年之前
父節點
當前提交
f734c821d6
共有 4 個文件被更改,包括 34 次插入1 次删除
  1. 5 0
      web/controller/inbound.go
  2. 18 0
      web/service/inbound.go
  3. 1 1
      web/service/server.go
  4. 10 0
      xray/process.go

+ 5 - 0
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)
+}

+ 18 - 0
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()
+}

+ 1 - 1
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

+ 10 - 0
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())
 }