interfaceLog.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package v1
  2. import (
  3. "context"
  4. "designs/app/common/request"
  5. "designs/app/common/response"
  6. "designs/global"
  7. "github.com/gin-gonic/gin"
  8. "strconv"
  9. "time"
  10. )
  11. // 总览,返回当天的 接口访问总数,登录人数,新增用户数
  12. func Overview(c *gin.Context) {
  13. form := request.Check(c, &struct {
  14. Day string `form:"day" json:"day" binding:"required"`
  15. }{})
  16. //查询接口访问次数
  17. dayCount, err := global.App.Redis.Get(context.Background(), "dayLog:"+form.Day).Result()
  18. if err != nil {
  19. global.App.Log.Error("redis incr error", "err", err)
  20. }
  21. dayLoginLog, err := global.App.Redis.Get(context.Background(), "dayLog:"+form.Day).Result()
  22. if err != nil {
  23. global.App.Log.Error("redis get error", "err", err)
  24. }
  25. //查询新注册人数
  26. dayRegisterLog, err := global.App.Redis.Get(context.Background(), "registerDayLog:"+form.Day).Result()
  27. if err != nil {
  28. global.App.Log.Error("redis get error", "err", err)
  29. }
  30. response.Success(c, gin.H{
  31. "data": map[string]interface{}{
  32. "dayCount": dayCount,
  33. "dayLoginLog": dayLoginLog,
  34. "dayRegisterLog": dayRegisterLog,
  35. },
  36. })
  37. }
  38. // 获取指定接口的请求次数 (小时的, 天的)
  39. // 后期还可以根据游戏,平台 ,甚至用户等参数,去获取接口访问的频率
  40. func GetInterfaceLog(c *gin.Context) {
  41. form := request.Check(c, &struct {
  42. Day string `form:"day" json:"day" binding:""`
  43. Hour string `form:"hour" json:"hour" binding:""`
  44. Interface string `form:"interface" json:"interface" binding:"required"`
  45. Pf string `form:"pf" json:"pf" binding:""`
  46. Gid string `form:"gid" json:"gid" binding:""`
  47. }{})
  48. if form.Hour == "" && form.Day == "" {
  49. response.Fail(c, 1003, "day ,和hour 参数必须选一个传")
  50. }
  51. var key string
  52. if form.Day != "" {
  53. key = "dayLog:"
  54. } else if form.Hour != "" {
  55. key = "hourInterfaceLog:"
  56. }
  57. if form.Pf != "" && form.Gid != "" {
  58. key = key + form.Gid + ":" + form.Pf
  59. }
  60. key = key + ":" + form.Interface
  61. if form.Day != "" {
  62. key = key + ":" + form.Day
  63. } else if form.Hour != "" {
  64. key = key + ":" + form.Hour
  65. }
  66. //查询新注册人数
  67. res, err := global.App.Redis.Get(context.Background(), key).Result()
  68. if err != nil {
  69. global.App.Log.Error("redis get error", "err", err)
  70. }
  71. response.Success(c, gin.H{
  72. "data": res,
  73. })
  74. }
  75. // 获取所有的接口,以及接口的名字
  76. func GetInterfaceInfo(c *gin.Context) {
  77. response.Success(c, gin.H{
  78. "data": []struct {
  79. Name string `json:"name"`
  80. Path string `json:"path"`
  81. }{
  82. {Name: "登录", Path: "/v1/user/login"},
  83. {Name: "刷新", Path: "/v1/user/refreshToken"},
  84. {Name: "添加游戏配置", Path: "/v1/user/addGidConfig"},
  85. {Name: "查看游戏配置", Path: "/v1/user/getGidConfig"},
  86. {Name: "查看系统时间", Path: "/v1/user/getSysTime"},
  87. {Name: "获取用户数据", Path: "/v1/user/getUserData"},
  88. {Name: "设置游戏数据", Path: "/v1/user/setGameData"},
  89. {Name: "获取游戏数据", Path: "/v1/user/getGameData"},
  90. {Name: "更新用户信息", Path: "/v1/user/updateUserInfo"},
  91. {Name: "设置排行数据", Path: "/v1/user/SetRankData"},
  92. {Name: "获取排行数据", Path: "/v1/user/getRankData"},
  93. {Name: "设置省内排行数据", Path: "/v1/user/setProvinceRankData"},
  94. {Name: "获取省内排行数据", Path: "/v1/user/getProvinceRankData"},
  95. {Name: "更新用户位置数据", Path: "/v1/user/getProvinceRankSumData"},
  96. {Name: "获取省内排行总榜数据", Path: "/v1/user/updateUserlocation"},
  97. },
  98. })
  99. }
  100. // 获取某一日内,接口每个小时的访问数
  101. func GetInterfaceData(c *gin.Context) {
  102. form := request.Check(c, &struct {
  103. Day string `form:"day" json:"day" binding:""`
  104. Interface string `form:"interface" json:"interface" binding:"required"`
  105. Pf string `form:"pf" json:"pf" binding:""`
  106. Gid string `form:"gid" json:"gid" binding:""`
  107. }{})
  108. type hourDara struct {
  109. Hour int `json:"hour"`
  110. Data int `json:"data"`
  111. }
  112. var res []hourDara
  113. for i := 1; i <= 24; i++ {
  114. key := "hourInterfaceLog:" + form.Interface + ":" + form.Day + strconv.Itoa(i)
  115. if form.Pf != "" && form.Gid != "" {
  116. key = "hourInterfaceLog:" + form.Gid + ":" + form.Pf + ":" + form.Interface + ":" + form.Day + strconv.Itoa(i)
  117. }
  118. data, err := global.App.Redis.Get(context.Background(), key).Result()
  119. if err != nil {
  120. global.App.Log.Error("redis get error", "err", err)
  121. }
  122. dataInt, _ := strconv.Atoi(data)
  123. res = append(res, hourDara{
  124. Hour: i,
  125. Data: dataInt,
  126. })
  127. }
  128. response.Success(c, gin.H{
  129. "data": res,
  130. })
  131. }
  132. // 获取某一区间内,接口每天的访问数
  133. func GetInterfaceDataByDay(c *gin.Context) {
  134. form := request.Check(c, &struct {
  135. Start string `form:"start" json:"start" binding:""`
  136. End string `form:"end" json:"end" binding:""`
  137. Interface string `form:"interface" json:"interface" binding:"required"`
  138. Pf string `form:"pf" json:"pf" binding:""`
  139. Gid string `form:"gid" json:"gid" binding:""`
  140. }{})
  141. dayRange, err := GenerateDaysBetween(form.Start, form.End)
  142. if err != nil {
  143. response.Fail(c, 1003, err.Error())
  144. return
  145. }
  146. type dayData struct {
  147. Day string `json:"day"`
  148. Data int `json:"data"`
  149. }
  150. var res []dayData
  151. for _, v := range dayRange {
  152. key := "dayLog:" + form.Interface + ":" + v
  153. if form.Pf != "" && form.Gid != "" {
  154. key = "dayLog:" + form.Gid + ":" + form.Pf + ":" + form.Interface + ":" + v
  155. }
  156. data, err := global.App.Redis.Get(context.Background(), key).Result()
  157. if err != nil {
  158. global.App.Log.Error("redis get error", "err", err)
  159. }
  160. dataInt, _ := strconv.Atoi(data)
  161. res = append(res, dayData{
  162. Day: v,
  163. Data: dataInt,
  164. })
  165. }
  166. response.Success(c, gin.H{
  167. "data": res,
  168. })
  169. }
  170. func GenerateDaysBetween(startDate, endDate string) ([]string, error) {
  171. start, err := time.Parse("20060102", startDate)
  172. if err != nil {
  173. return nil, err
  174. }
  175. end, err := time.Parse("20060102", endDate)
  176. if err != nil {
  177. return nil, err
  178. }
  179. var days []time.Time
  180. for curr := start; !curr.After(end); curr = curr.AddDate(0, 0, 1) {
  181. days = append(days, curr)
  182. }
  183. var res []string
  184. for _, v := range days {
  185. res = append(res, v.Format("20060102"))
  186. }
  187. return res, nil
  188. }