interfaceLog.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  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. //start := time.Now()
  17. //day := start.Format("20060102")
  18. //hour := start.Format("2006010215")
  19. //查询接口访问次数
  20. dayCount, err := global.App.Redis.Get(context.Background(), "dayLog:"+form.Day).Result()
  21. if err != nil {
  22. global.App.Log.Error("redis incr error", "err", err)
  23. }
  24. //hourCount, err := global.App.Redis.Get(context.Background(), "hourInterfaceLog:"+hour).Result()
  25. //if err != nil {
  26. // global.App.Log.Error("redis incr error", "err", err)
  27. //}
  28. //查询登录人数
  29. //hourLoginLog, err := global.App.Redis.Get(context.Background(), "hourLoginLog:"+hour).Result()
  30. //if err != nil {
  31. // global.App.Log.Error("redis incr error", "err", err)
  32. //}
  33. dayLoginLog, err := global.App.Redis.Get(context.Background(), "dayLog:"+form.Day).Result()
  34. if err != nil {
  35. global.App.Log.Error("redis get error", "err", err)
  36. }
  37. //查询新注册人数
  38. dayRegisterLog, err := global.App.Redis.Get(context.Background(), "registerDayLog:"+form.Day).Result()
  39. if err != nil {
  40. global.App.Log.Error("redis get error", "err", err)
  41. }
  42. response.Success(c, gin.H{
  43. "data": map[string]interface{}{
  44. "dayCount": dayCount,
  45. "dayLoginLog": dayLoginLog,
  46. "dayRegisterLog": dayRegisterLog,
  47. },
  48. })
  49. }
  50. // 获取指定接口的请求次数 (小时的, 天的)
  51. // 后期还可以根据游戏,平台 ,甚至用户等参数,去获取接口访问的频率
  52. func GetInterfaceLog(c *gin.Context) {
  53. form := request.Check(c, &struct {
  54. Day string `form:"day" json:"day" binding:""`
  55. Hour string `form:"hour" json:"hour" binding:""`
  56. Interface string `form:"interface" json:"interface" binding:"required"`
  57. Pf string `form:"pf" json:"pf" binding:""`
  58. Gid string `form:"gid" json:"gid" binding:""`
  59. }{})
  60. if form.Hour == "" && form.Day == "" {
  61. response.Fail(c, 1003, "day ,和hour 参数必须选一个传")
  62. }
  63. var key string
  64. if form.Day != "" {
  65. key = "dayLog:"
  66. } else if form.Hour != "" {
  67. key = "hourInterfaceLog:"
  68. }
  69. if form.Pf != "" && form.Gid != "" {
  70. key = key + form.Gid + ":" + form.Pf
  71. }
  72. key = key + ":" + form.Interface
  73. if form.Day != "" {
  74. key = key + ":" + form.Day
  75. } else if form.Hour != "" {
  76. key = key + ":" + form.Hour
  77. }
  78. //查询新注册人数
  79. res, err := global.App.Redis.Get(context.Background(), key).Result()
  80. if err != nil {
  81. global.App.Log.Error("redis get error", "err", err)
  82. }
  83. response.Success(c, gin.H{
  84. "data": res,
  85. })
  86. }
  87. // 获取所有的接口,以及接口的名字
  88. func GetInterfaceInfo(c *gin.Context) {
  89. //router.Use(middleware.Logmiddleware())
  90. //router.POST("/v1/user/login", v1.Login) //游戏登录
  91. //router.POST("/v1/user/refreshToken", middleware.RefreshTokenAuthMiddleware(), v1.RefreshToken) //token刷新
  92. //router.POST("/v1/user/addGidConfig", v1.AddGidConfig)
  93. //router.POST("/v1/user/getGidConfig", v1.GetGidConfig)
  94. //router.POST("/v1/user/getSysTime", v1.GetSysTime) //添加游戏配置数据
  95. //
  96. //router.POST("/v1/user/getTodayLog", v1.GetTodayLog)
  97. //
  98. //GroupV1 := router.Group("/v1")
  99. //GroupV1.Use(middleware.TokenAuthMiddleware()).Use()
  100. //{
  101. // GroupV1.POST("/user/getUserData", v1.GetUserData) //获取用户数据
  102. // GroupV1.POST("/user/setGameData", v1.SetGameData) //设置游戏数据
  103. // GroupV1.POST("/user/getGameData", v1.GetGameData) //获取游戏数据
  104. // GroupV1.POST("/user/setRankData", v1.SetRankData) //设置排行数据
  105. // GroupV1.POST("/user/getRankData", v1.GetRankData) //获取排行数据
  106. // GroupV1.POST("/user/updateUserInfo", v1.UpdateUserInfo) //更新用户数据
  107. // GroupV1.POST("/user/setProvinceRankData", v1.SetProvinceRankData) //设置省内排行数据
  108. // GroupV1.POST("/user/getProvinceRankData", v1.GetProvinceRankData) //获取排行数据
  109. // GroupV1.POST("/user/getProvinceRankSumData", v1.GetProvinceRankSumData) //获取省份排行数据
  110. // GroupV1.POST("/user/updateUserlocation", v1.UpdateUserlocation) //更新位置数据
  111. //
  112. // GroupV1.POST("/user/addUserToBlackList", v1.AddUserToBlackList)
  113. // GroupV1.POST("/user/deleteUserFormBlackList", v1.DeleteUserFormBlackList)
  114. // GroupV1.POST("/user/readBlackList", v1.ReadBlackList)
  115. response.Success(c, gin.H{
  116. "data": []struct {
  117. Name string `json:"name"`
  118. Path string `json:"path"`
  119. }{
  120. {Name: "登录", Path: "/v1/user/login"},
  121. {Name: "刷新", Path: "/v1/user/refreshToken"},
  122. {Name: "添加游戏配置", Path: "/v1/user/addGidConfig"},
  123. {Name: "查看游戏配置", Path: "/v1/user/getGidConfig"},
  124. {Name: "查看系统时间", Path: "/v1/user/getSysTime"},
  125. {Name: "获取用户数据", Path: "/v1/user/getUserData"},
  126. {Name: "设置游戏数据", Path: "/v1/user/setGameData"},
  127. {Name: "获取游戏数据", Path: "/v1/user/getGameData"},
  128. {Name: "更新用户信息", Path: "/v1/user/updateUserInfo"},
  129. {Name: "设置排行数据", Path: "/v1/user/SetRankData"},
  130. {Name: "获取排行数据", Path: "/v1/user/getRankData"},
  131. {Name: "设置省内排行数据", Path: "/v1/user/setProvinceRankData"},
  132. {Name: "获取省内排行数据", Path: "/v1/user/getProvinceRankData"},
  133. {Name: "更新用户位置数据", Path: "/v1/user/getProvinceRankSumData"},
  134. {Name: "获取省内排行总榜数据", Path: "/v1/user/updateUserlocation"},
  135. },
  136. })
  137. }
  138. // 获取某一日内,接口每个小时的访问数
  139. func GetInterfaceData(c *gin.Context) {
  140. form := request.Check(c, &struct {
  141. Day string `form:"day" json:"day" binding:""`
  142. Interface string `form:"interface" json:"interface" binding:"required"`
  143. Pf string `form:"pf" json:"pf" binding:""`
  144. Gid string `form:"gid" json:"gid" binding:""`
  145. }{})
  146. type hourDara struct {
  147. Hour int `json:"hour"`
  148. Data int `json:"data"`
  149. }
  150. var res []hourDara
  151. for i := 1; i <= 24; i++ {
  152. key := "hourInterfaceLog:" + form.Interface + ":" + form.Day + strconv.Itoa(i)
  153. if form.Pf != "" && form.Gid != "" {
  154. key = "hourInterfaceLog:" + form.Gid + ":" + form.Pf + ":" + form.Interface + ":" + form.Day + strconv.Itoa(i)
  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, hourDara{
  162. Hour: i,
  163. Data: dataInt,
  164. })
  165. }
  166. response.Success(c, gin.H{
  167. "data": res,
  168. })
  169. }
  170. // 获取某一区间内,接口每天的访问数
  171. func GetInterfaceDataByDay(c *gin.Context) {
  172. form := request.Check(c, &struct {
  173. Start string `form:"start" json:"start" binding:""`
  174. End string `form:"end" json:"end" binding:""`
  175. Interface string `form:"interface" json:"interface" binding:"required"`
  176. Pf string `form:"pf" json:"pf" binding:""`
  177. Gid string `form:"gid" json:"gid" binding:""`
  178. }{})
  179. dayRange, err := GenerateDaysBetween(form.Start, form.End)
  180. if err != nil {
  181. response.Fail(c, 1003, err.Error())
  182. return
  183. }
  184. type dayData struct {
  185. Day string `json:"day"`
  186. Data int `json:"data"`
  187. }
  188. var res []dayData
  189. for _, v := range dayRange {
  190. key := "dayLog:" + form.Interface + ":" + v
  191. if form.Pf != "" && form.Gid != "" {
  192. key = "dayLog:" + form.Gid + ":" + form.Pf + ":" + form.Interface + ":" + v
  193. }
  194. data, err := global.App.Redis.Get(context.Background(), key).Result()
  195. if err != nil {
  196. global.App.Log.Error("redis get error", "err", err)
  197. }
  198. dataInt, _ := strconv.Atoi(data)
  199. res = append(res, dayData{
  200. Day: v,
  201. Data: dataInt,
  202. })
  203. }
  204. response.Success(c, gin.H{
  205. "data": res,
  206. })
  207. }
  208. func GenerateDaysBetween(startDate, endDate string) ([]string, error) {
  209. start, err := time.Parse("20060102", startDate)
  210. if err != nil {
  211. return nil, err
  212. }
  213. end, err := time.Parse("20060102", endDate)
  214. if err != nil {
  215. return nil, err
  216. }
  217. var days []time.Time
  218. for curr := start; !curr.After(end); curr = curr.AddDate(0, 0, 1) {
  219. days = append(days, curr)
  220. }
  221. var res []string
  222. for _, v := range days {
  223. res = append(res, v.Format("20060102"))
  224. }
  225. return res, nil
  226. }