online.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package sessdata
  2. import (
  3. "bytes"
  4. "net"
  5. "sort"
  6. "time"
  7. "github.com/bjdgyc/anylink/pkg/utils"
  8. )
  9. type Online struct {
  10. Token string `json:"token"`
  11. Username string `json:"username"`
  12. Group string `json:"group"`
  13. MacAddr string `json:"mac_addr"`
  14. UniqueMac bool `json:"unique_mac"`
  15. Ip net.IP `json:"ip"`
  16. RemoteAddr string `json:"remote_addr"`
  17. TunName string `json:"tun_name"`
  18. Mtu int `json:"mtu"`
  19. Client string `json:"client"`
  20. BandwidthUp string `json:"bandwidth_up"`
  21. BandwidthDown string `json:"bandwidth_down"`
  22. BandwidthUpAll string `json:"bandwidth_up_all"`
  23. BandwidthDownAll string `json:"bandwidth_down_all"`
  24. LastLogin time.Time `json:"last_login"`
  25. }
  26. type Onlines []Online
  27. func (o Onlines) Len() int {
  28. return len(o)
  29. }
  30. func (o Onlines) Less(i, j int) bool {
  31. return bytes.Compare(o[i].Ip, o[j].Ip) < 0
  32. }
  33. func (o Onlines) Swap(i, j int) {
  34. o[i], o[j] = o[j], o[i]
  35. }
  36. func OnlineSess() []Online {
  37. var datas Onlines
  38. sessMux.Lock()
  39. for _, v := range sessions {
  40. v.mux.Lock()
  41. if v.IsActive {
  42. val := Online{
  43. Token: v.Token,
  44. Ip: v.CSess.IpAddr,
  45. Username: v.Username,
  46. Group: v.Group,
  47. MacAddr: v.MacAddr,
  48. UniqueMac: v.UniqueMac,
  49. RemoteAddr: v.CSess.RemoteAddr,
  50. TunName: v.CSess.IfName,
  51. Mtu: v.CSess.Mtu,
  52. Client: v.CSess.Client,
  53. BandwidthUp: utils.HumanByte(v.CSess.BandwidthUpPeriod.Load()) + "/s",
  54. BandwidthDown: utils.HumanByte(v.CSess.BandwidthDownPeriod.Load()) + "/s",
  55. BandwidthUpAll: utils.HumanByte(v.CSess.BandwidthUpAll.Load()),
  56. BandwidthDownAll: utils.HumanByte(v.CSess.BandwidthDownAll.Load()),
  57. LastLogin: v.LastLogin,
  58. }
  59. datas = append(datas, val)
  60. }
  61. v.mux.Unlock()
  62. }
  63. sessMux.Unlock()
  64. sort.Sort(&datas)
  65. return datas
  66. }