mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-14 16:09:32 +01:00
parent
8b2f6de3e0
commit
baab8bf6c8
@ -55,15 +55,17 @@ func (client *Client) Sessions() (sessions []*Session) {
|
||||
}
|
||||
|
||||
type SessionData struct {
|
||||
ctime time.Time
|
||||
atime time.Time
|
||||
ip net.IP
|
||||
hostname string
|
||||
certfp string
|
||||
deviceID string
|
||||
connInfo string
|
||||
sessionID int64
|
||||
caps []string
|
||||
ctime time.Time
|
||||
atime time.Time
|
||||
ip net.IP
|
||||
hostname string
|
||||
certfp string
|
||||
deviceID string
|
||||
connInfo string
|
||||
sessionID int64
|
||||
caps []string
|
||||
bytesRead uint64
|
||||
bytesWritten uint64
|
||||
}
|
||||
|
||||
func (client *Client) AllSessionData(currentSession *Session, hasPrivs bool) (data []SessionData, currentIndex int) {
|
||||
@ -76,13 +78,16 @@ func (client *Client) AllSessionData(currentSession *Session, hasPrivs bool) (da
|
||||
if session == currentSession {
|
||||
currentIndex = i
|
||||
}
|
||||
bytesRead, bytesWritten := session.socket.Stats()
|
||||
data[i] = SessionData{
|
||||
atime: session.lastActive,
|
||||
ctime: session.ctime,
|
||||
hostname: session.rawHostname,
|
||||
certfp: session.certfp,
|
||||
deviceID: session.deviceID,
|
||||
sessionID: session.sessionID,
|
||||
atime: session.lastActive,
|
||||
ctime: session.ctime,
|
||||
hostname: session.rawHostname,
|
||||
certfp: session.certfp,
|
||||
deviceID: session.deviceID,
|
||||
sessionID: session.sessionID,
|
||||
bytesRead: bytesRead,
|
||||
bytesWritten: bytesWritten,
|
||||
}
|
||||
if session.proxiedIP != nil {
|
||||
data[i].ip = session.proxiedIP
|
||||
|
@ -1275,6 +1275,7 @@ func nsClientsListHandler(service *ircService, server *Server, client *Client, p
|
||||
service.Notice(rb, fmt.Sprintf(client.t("IRCv3 CAPs: %s"), capStr))
|
||||
}
|
||||
}
|
||||
service.Notice(rb, fmt.Sprintf(client.t("Bytes RX/TX: %d / %d"), session.bytesRead, session.bytesWritten))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,9 @@ type Socket struct {
|
||||
sendQExceeded bool
|
||||
finalData []byte // what to send when we die
|
||||
finalized bool
|
||||
|
||||
bytesRead uint64
|
||||
bytesWritten uint64
|
||||
}
|
||||
|
||||
// NewSocket returns a new Socket.
|
||||
@ -56,6 +59,12 @@ func (socket *Socket) Close() {
|
||||
socket.wakeWriter()
|
||||
}
|
||||
|
||||
func (socket *Socket) Stats() (bytesRead, bytesWritten uint64) {
|
||||
socket.Lock()
|
||||
defer socket.Unlock()
|
||||
return socket.bytesRead, socket.bytesWritten
|
||||
}
|
||||
|
||||
// Read returns a single IRC line from a Socket.
|
||||
func (socket *Socket) Read() (string, error) {
|
||||
// immediately fail if Close() has been called, even if there's
|
||||
@ -67,6 +76,10 @@ func (socket *Socket) Read() (string, error) {
|
||||
lineBytes, err := socket.conn.ReadLine()
|
||||
line := string(lineBytes)
|
||||
|
||||
socket.Lock()
|
||||
socket.bytesRead += uint64(len(lineBytes))
|
||||
socket.Unlock()
|
||||
|
||||
if err == io.EOF {
|
||||
socket.Close()
|
||||
}
|
||||
@ -96,6 +109,7 @@ func (socket *Socket) Write(data []byte) (err error) {
|
||||
} else {
|
||||
socket.buffers = append(socket.buffers, data)
|
||||
socket.totalLength = prospectiveLen
|
||||
socket.bytesWritten += uint64(len(data))
|
||||
}
|
||||
}
|
||||
socket.Unlock()
|
||||
@ -136,6 +150,10 @@ func (socket *Socket) BlockingWrite(data []byte) (err error) {
|
||||
return io.EOF
|
||||
}
|
||||
|
||||
socket.Lock()
|
||||
socket.bytesWritten += uint64(len(data))
|
||||
socket.Unlock()
|
||||
|
||||
err = socket.conn.WriteLine(data)
|
||||
if err != nil {
|
||||
socket.finalize()
|
||||
|
Loading…
Reference in New Issue
Block a user