| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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
- }
|