dockerfiles/anylink/server/sessdata/online.go

75 lines
2.0 KiB
Go

package sessdata
import (
"bytes"
"net"
"sort"
"time"
"github.com/bjdgyc/anylink/pkg/utils"
)
type Online struct {
Token string `json:"token"`
Username string `json:"username"`
Group string `json:"group"`
MacAddr string `json:"mac_addr"`
UniqueMac bool `json:"unique_mac"`
Ip net.IP `json:"ip"`
RemoteAddr string `json:"remote_addr"`
TunName string `json:"tun_name"`
Mtu int `json:"mtu"`
Client string `json:"client"`
BandwidthUp string `json:"bandwidth_up"`
BandwidthDown string `json:"bandwidth_down"`
BandwidthUpAll string `json:"bandwidth_up_all"`
BandwidthDownAll string `json:"bandwidth_down_all"`
LastLogin time.Time `json:"last_login"`
}
type Onlines []Online
func (o Onlines) Len() int {
return len(o)
}
func (o Onlines) Less(i, j int) bool {
return bytes.Compare(o[i].Ip, o[j].Ip) < 0
}
func (o Onlines) Swap(i, j int) {
o[i], o[j] = o[j], o[i]
}
func OnlineSess() []Online {
var datas Onlines
sessMux.Lock()
for _, v := range sessions {
v.mux.Lock()
if v.IsActive {
val := Online{
Token: v.Token,
Ip: v.CSess.IpAddr,
Username: v.Username,
Group: v.Group,
MacAddr: v.MacAddr,
UniqueMac: v.UniqueMac,
RemoteAddr: v.CSess.RemoteAddr,
TunName: v.CSess.IfName,
Mtu: v.CSess.Mtu,
Client: v.CSess.Client,
BandwidthUp: utils.HumanByte(v.CSess.BandwidthUpPeriod.Load()) + "/s",
BandwidthDown: utils.HumanByte(v.CSess.BandwidthDownPeriod.Load()) + "/s",
BandwidthUpAll: utils.HumanByte(v.CSess.BandwidthUpAll.Load()),
BandwidthDownAll: utils.HumanByte(v.CSess.BandwidthDownAll.Load()),
LastLogin: v.LastLogin,
}
datas = append(datas, val)
}
v.mux.Unlock()
}
sessMux.Unlock()
sort.Sort(&datas)
return datas
}