saveDb.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package logs
  2. import (
  3. "bp.jydev.jianyu360.cn/BaseService/gateway/common/db"
  4. "bp.jydev.jianyu360.cn/BaseService/gateway/core/router"
  5. "encoding/json"
  6. "github.com/gogf/gf/v2/net/ghttp"
  7. "log"
  8. "strings"
  9. "sync"
  10. "time"
  11. )
  12. var (
  13. arr = []map[string]interface{}{}
  14. //对map的同步
  15. lock = &sync.Mutex{}
  16. )
  17. //SaveLogTask 定时保存日志
  18. func (s *serverLog) SaveLogTask() {
  19. lock.Lock()
  20. if len(arr) >= 1 {
  21. tmp := arr
  22. arr = make([]map[string]interface{}, 0)
  23. go func() {
  24. log.Println("timer..save..visit..log", len(tmp))
  25. db.MgoLog.SaveBulk("jy_logs", tmp...)
  26. }()
  27. }
  28. lock.Unlock()
  29. time.AfterFunc(5*time.Minute, s.SaveLogTask)
  30. }
  31. // saveLogToDb 日志存库
  32. func (s *serverLog) saveLogToDb(ctx *router.GContext, r *ghttp.Request) {
  33. md, _ := json.Marshal(r.Request.Form)
  34. m := map[string]interface{}{
  35. "ip": r.GetClientIp(),
  36. "refer": r.Referer(),
  37. "mdescribe": string(md),
  38. "client": r.UserAgent(),
  39. "os": getOS(r.UserAgent()),
  40. "browse": getBrowse(r.UserAgent()),
  41. "method": r.Method,
  42. "url": r.URL.String(),
  43. }
  44. if ctx.Sess != nil {
  45. if ctx.Sess.UserId != "" {
  46. m["userid"] = ctx.Sess.UserId
  47. }
  48. if ctx.Sess.NewUid != 0 {
  49. m["userid_new"] = ctx.Sess.NewUid
  50. }
  51. if ctx.Sess.EntId != 0 {
  52. m["userid"] = ctx.Sess.EntId
  53. }
  54. }
  55. timeNow := time.Now()
  56. m["date"] = timeNow.Unix()
  57. m["year"] = timeNow.Year()
  58. m["month"] = timeNow.Month()
  59. m["day"] = timeNow.Day()
  60. m["hour"] = timeNow.Hour()
  61. m["minutes"] = timeNow.Minute()
  62. lock.Lock()
  63. arr = append(arr, m)
  64. if len(arr) >= 500 {
  65. tmp := arr
  66. arr = make([]map[string]interface{}, 0)
  67. go func() {
  68. log.Println("save..visit..log", len(tmp), db.MgoLog.SaveBulk("jy_gateway_logs", tmp...))
  69. }()
  70. }
  71. lock.Unlock()
  72. }
  73. // getOS 获取平台类型
  74. func getOS(useros string) string {
  75. osVersion := "其他"
  76. if strings.Contains(useros, "NT 6.0") {
  77. osVersion = "Windows Vista/Server 2008"
  78. } else if strings.Contains(useros, "NT 5.2") {
  79. osVersion = "Windows Server 2003"
  80. } else if strings.Contains(useros, "NT 5.1") {
  81. osVersion = "Windows XP"
  82. } else if strings.Contains(useros, "NT 5") {
  83. osVersion = "Windows 2000"
  84. } else if strings.Contains(useros, "Mac") {
  85. osVersion = "Mac"
  86. } else if strings.Contains(useros, "Unix") {
  87. osVersion = "UNIX"
  88. } else if strings.Contains(useros, "Linux") {
  89. osVersion = "Linux"
  90. } else if strings.Contains(useros, "SunOS") {
  91. osVersion = "SunOS"
  92. } else if strings.Contains(useros, "NT 6.3") {
  93. osVersion = "Window8"
  94. } else if strings.Contains(useros, "NT 6.1") {
  95. osVersion = "Window7"
  96. } else if strings.Contains(useros, "NT 10.0") {
  97. osVersion = "Window10"
  98. }
  99. return osVersion
  100. }
  101. // getBrowse 获取浏览器类型
  102. func getBrowse(userbrowser string) string {
  103. browserVersion := "其他"
  104. if strings.Contains(userbrowser, "MSIE") {
  105. browserVersion = "IE"
  106. } else if strings.Contains(userbrowser, "Firefox") {
  107. browserVersion = "Firefox"
  108. } else if strings.Contains(userbrowser, "Chrome") {
  109. browserVersion = "Chrome"
  110. } else if strings.Contains(userbrowser, "Safari") {
  111. browserVersion = "Safari"
  112. } else if strings.Contains(userbrowser, "rv:11.0") {
  113. browserVersion = "IE11"
  114. }
  115. return browserVersion
  116. }