Przeglądaj źródła

temp fix - exclude non-ready users from session endpoint

Mike 10 miesięcy temu
rodzic
commit
07ed269b56
2 zmienionych plików z 25 dodań i 12 usunięć
  1. 12 6
      server/http/mgmt_api.go
  2. 13 6
      server/http/mgmt_api_test.go

+ 12 - 6
server/http/mgmt_api.go

@@ -220,11 +220,13 @@ func getSessionHandler(w http.ResponseWriter, r *http.Request, sessionRetriever
 	}
 
 	ou := onlineUsers{
-		Count:    len(allUsers),
-		Sessions: make([]sessionHandle, len(allUsers)),
+		Sessions: make([]sessionHandle, 0, len(allUsers)),
 	}
 
-	for i, s := range allUsers {
+	for _, s := range allUsers {
+		if !s.SignonComplete() {
+			continue
+		}
 		// report 0 if the user is not idle
 		idleSeconds := funcTimeSince(s.IdleTime()).Seconds()
 		if !s.Idle() {
@@ -232,7 +234,7 @@ func getSessionHandler(w http.ResponseWriter, r *http.Request, sessionRetriever
 		}
 		onlineSeconds := funcTimeSince(s.SignonTime()).Seconds()
 
-		ou.Sessions[i] = sessionHandle{
+		handle := sessionHandle{
 			ID:            s.IdentScreenName().String(),
 			ScreenName:    s.DisplayScreenName().String(),
 			OnlineSeconds: onlineSeconds,
@@ -240,14 +242,18 @@ func getSessionHandler(w http.ResponseWriter, r *http.Request, sessionRetriever
 			IdleSeconds:   idleSeconds,
 			IsICQ:         s.UIN() > 0,
 		}
+
 		ra := s.RemoteAddr()
 		if ra != nil {
-			ou.Sessions[i].RemoteAddr = ra.Addr().String()
-			ou.Sessions[i].RemotePort = ra.Port()
+			handle.RemoteAddr = ra.Addr().String()
+			handle.RemotePort = ra.Port()
 		}
 
+		ou.Sessions = append(ou.Sessions, handle)
 	}
 
+	ou.Count = len(ou.Sessions)
+
 	if err := json.NewEncoder(w).Encode(ou); err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return

+ 13 - 6
server/http/mgmt_api_test.go

@@ -23,11 +23,14 @@ import (
 )
 
 func TestSessionHandler_GET(t *testing.T) {
-	fnNewSess := func(screenName string, uin uint32) *state.Session {
+	fnNewSess := func(screenName string, uin uint32, signonComplete bool) *state.Session {
 		sess := state.NewSession()
 		sess.SetIdentScreenName(state.NewIdentScreenName(screenName))
 		sess.SetDisplayScreenName(state.DisplayScreenName(screenName))
 		sess.SetUIN(uin)
+		if signonComplete {
+			sess.SetSignonComplete()
+		}
 		ip, _ := netip.ParseAddrPort("1.2.3.4:1234")
 		sess.SetRemoteAddr(&ip)
 		return sess
@@ -63,9 +66,10 @@ func TestSessionHandler_GET(t *testing.T) {
 					sessionRetrieverAllSessionsParams: sessionRetrieverAllSessionsParams{
 						{
 							result: []*state.Session{
-								fnNewSess("userA", 0),
-								fnNewSess("userB", 0),
-								fnNewSess("100003", 100003),
+								fnNewSess("userA", 0, true),
+								fnNewSess("userB", 0, true),
+								fnNewSess("100003", 100003, true),
+								fnNewSess("userC", 0, false),
 							},
 						},
 					},
@@ -100,11 +104,14 @@ func TestSessionHandler_GET(t *testing.T) {
 }
 
 func TestSessionHandlerScreenname_GET(t *testing.T) {
-	fnNewSess := func(screenName string, uin uint32) *state.Session {
+	fnNewSess := func(screenName string, uin uint32, signonComplete bool) *state.Session {
 		sess := state.NewSession()
 		sess.SetIdentScreenName(state.NewIdentScreenName(screenName))
 		sess.SetDisplayScreenName(state.DisplayScreenName(screenName))
 		sess.SetUIN(uin)
+		if signonComplete {
+			sess.SetSignonComplete()
+		}
 		ip, _ := netip.ParseAddrPort("1.2.3.4:1234")
 		sess.SetRemoteAddr(&ip)
 		return sess
@@ -146,7 +153,7 @@ func TestSessionHandlerScreenname_GET(t *testing.T) {
 					retrieveSessionByNameParams: retrieveSessionByNameParams{
 						{
 							screenName: state.NewIdentScreenName("userA"),
-							result:     fnNewSess("userA", 0),
+							result:     fnNewSess("userA", 0, true),
 						},
 					},
 				},