implement session stats, fixes last (admin|user) left at won't work for any provider that removed users after logout.

This commit is contained in:
Miroslav Šedivý 2024-09-07 18:55:27 +02:00
parent 356a566bc6
commit 4f401ac2b6
7 changed files with 124 additions and 21 deletions

View file

@ -121,6 +121,14 @@ func (session *SessionCtx) ConnectWebSocketPeer(websocketPeer types.WebSocketPee
session.state.ConnectedSince = &now
session.state.NotConnectedSince = nil
if session.profile.IsAdmin {
session.manager.totalAdmins.Add(1)
session.manager.lastAdminLeftAt.Store((*time.Time)(nil))
} else {
session.manager.totalUsers.Add(1)
session.manager.lastUserLeftAt.Store((*time.Time)(nil))
}
session.manager.emmiter.Emit("connected", session)
// if there is a previous peer, destroy it
@ -180,6 +188,16 @@ func (session *SessionCtx) DisconnectWebSocketPeer(websocketPeer types.WebSocket
session.state.ConnectedSince = nil
session.state.NotConnectedSince = &now
if session.profile.IsAdmin {
if session.manager.totalAdmins.Add(-1) == 0 {
session.manager.lastAdminLeftAt.Store(&now)
}
} else {
if session.manager.totalUsers.Add(-1) == 0 {
session.manager.lastUserLeftAt.Store(&now)
}
}
session.manager.emmiter.Emit("disconnected", session)
session.websocketMu.Lock()