|
@@ -0,0 +1,259 @@
|
|
|
|
+package v1
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "context"
|
|
|
|
+ "designs/app/common/request"
|
|
|
|
+ "designs/app/common/response"
|
|
|
|
+ "designs/global"
|
|
|
|
+ "github.com/gin-gonic/gin"
|
|
|
|
+ "strconv"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+// 总览,返回当天的 接口访问总数,登录人数,新增用户数
|
|
|
|
+func Overview(c *gin.Context) {
|
|
|
|
+ form := request.Check(c, &struct {
|
|
|
|
+ Day string `form:"day" json:"day" binding:"required"`
|
|
|
|
+ }{})
|
|
|
|
+
|
|
|
|
+ //start := time.Now()
|
|
|
|
+ //day := start.Format("20060102")
|
|
|
|
+ //hour := start.Format("2006010215")
|
|
|
|
+
|
|
|
|
+ //查询接口访问次数
|
|
|
|
+ dayCount, err := global.App.Redis.Get(context.Background(), "dayLog:"+form.Day).Result()
|
|
|
|
+ if err != nil {
|
|
|
|
+ global.App.Log.Error("redis incr error", "err", err)
|
|
|
|
+ }
|
|
|
|
+ //hourCount, err := global.App.Redis.Get(context.Background(), "hourInterfaceLog:"+hour).Result()
|
|
|
|
+ //if err != nil {
|
|
|
|
+ // global.App.Log.Error("redis incr error", "err", err)
|
|
|
|
+ //}
|
|
|
|
+
|
|
|
|
+ //查询登录人数
|
|
|
|
+ //hourLoginLog, err := global.App.Redis.Get(context.Background(), "hourLoginLog:"+hour).Result()
|
|
|
|
+ //if err != nil {
|
|
|
|
+ // global.App.Log.Error("redis incr error", "err", err)
|
|
|
|
+ //}
|
|
|
|
+ dayLoginLog, err := global.App.Redis.Get(context.Background(), "dayLog:"+form.Day).Result()
|
|
|
|
+ if err != nil {
|
|
|
|
+ global.App.Log.Error("redis get error", "err", err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //查询新注册人数
|
|
|
|
+ dayRegisterLog, err := global.App.Redis.Get(context.Background(), "registerDayLog:"+form.Day).Result()
|
|
|
|
+ if err != nil {
|
|
|
|
+ global.App.Log.Error("redis get error", "err", err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ response.Success(c, gin.H{
|
|
|
|
+ "data": map[string]interface{}{
|
|
|
|
+ "dayCount": dayCount,
|
|
|
|
+ "dayLoginLog": dayLoginLog,
|
|
|
|
+ "dayRegisterLog": dayRegisterLog,
|
|
|
|
+ },
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 获取指定接口的请求次数 (小时的, 天的)
|
|
|
|
+// 后期还可以根据游戏,平台 ,甚至用户等参数,去获取接口访问的频率
|
|
|
|
+func GetInterfaceLog(c *gin.Context) {
|
|
|
|
+ form := request.Check(c, &struct {
|
|
|
|
+ Day string `form:"day" json:"day" binding:""`
|
|
|
|
+ Hour string `form:"hour" json:"hour" binding:""`
|
|
|
|
+ Interface string `form:"interface" json:"interface" binding:"required"`
|
|
|
|
+ Pf string `form:"pf" json:"pf" binding:""`
|
|
|
|
+ Gid string `form:"gid" json:"gid" binding:""`
|
|
|
|
+ }{})
|
|
|
|
+
|
|
|
|
+ if form.Hour == "" && form.Day == "" {
|
|
|
|
+ response.Fail(c, 1003, "day ,和hour 参数必须选一个传")
|
|
|
|
+ }
|
|
|
|
+ var key string
|
|
|
|
+ if form.Day != "" {
|
|
|
|
+ key = "dayLog:"
|
|
|
|
+ } else if form.Hour != "" {
|
|
|
|
+ key = "hourInterfaceLog:"
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if form.Pf != "" && form.Gid != "" {
|
|
|
|
+ key = key + form.Gid + ":" + form.Pf
|
|
|
|
+ }
|
|
|
|
+ key = key + ":" + form.Interface
|
|
|
|
+
|
|
|
|
+ if form.Day != "" {
|
|
|
|
+ key = key + ":" + form.Day
|
|
|
|
+ } else if form.Hour != "" {
|
|
|
|
+ key = key + ":" + form.Hour
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //查询新注册人数
|
|
|
|
+ res, err := global.App.Redis.Get(context.Background(), key).Result()
|
|
|
|
+ if err != nil {
|
|
|
|
+ global.App.Log.Error("redis get error", "err", err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ response.Success(c, gin.H{
|
|
|
|
+ "data": res,
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 获取所有的接口,以及接口的名字
|
|
|
|
+func GetInterfaceInfo(c *gin.Context) {
|
|
|
|
+
|
|
|
|
+ //router.Use(middleware.Logmiddleware())
|
|
|
|
+ //router.POST("/v1/user/login", v1.Login) //游戏登录
|
|
|
|
+ //router.POST("/v1/user/refreshToken", middleware.RefreshTokenAuthMiddleware(), v1.RefreshToken) //token刷新
|
|
|
|
+ //router.POST("/v1/user/addGidConfig", v1.AddGidConfig)
|
|
|
|
+ //router.POST("/v1/user/getGidConfig", v1.GetGidConfig)
|
|
|
|
+ //router.POST("/v1/user/getSysTime", v1.GetSysTime) //添加游戏配置数据
|
|
|
|
+ //
|
|
|
|
+ //router.POST("/v1/user/getTodayLog", v1.GetTodayLog)
|
|
|
|
+ //
|
|
|
|
+ //GroupV1 := router.Group("/v1")
|
|
|
|
+ //GroupV1.Use(middleware.TokenAuthMiddleware()).Use()
|
|
|
|
+ //{
|
|
|
|
+ // GroupV1.POST("/user/getUserData", v1.GetUserData) //获取用户数据
|
|
|
|
+ // GroupV1.POST("/user/setGameData", v1.SetGameData) //设置游戏数据
|
|
|
|
+ // GroupV1.POST("/user/getGameData", v1.GetGameData) //获取游戏数据
|
|
|
|
+ // GroupV1.POST("/user/setRankData", v1.SetRankData) //设置排行数据
|
|
|
|
+ // GroupV1.POST("/user/getRankData", v1.GetRankData) //获取排行数据
|
|
|
|
+ // GroupV1.POST("/user/updateUserInfo", v1.UpdateUserInfo) //更新用户数据
|
|
|
|
+ // GroupV1.POST("/user/setProvinceRankData", v1.SetProvinceRankData) //设置省内排行数据
|
|
|
|
+ // GroupV1.POST("/user/getProvinceRankData", v1.GetProvinceRankData) //获取排行数据
|
|
|
|
+ // GroupV1.POST("/user/getProvinceRankSumData", v1.GetProvinceRankSumData) //获取省份排行数据
|
|
|
|
+ // GroupV1.POST("/user/updateUserlocation", v1.UpdateUserlocation) //更新位置数据
|
|
|
|
+ //
|
|
|
|
+ // GroupV1.POST("/user/addUserToBlackList", v1.AddUserToBlackList)
|
|
|
|
+ // GroupV1.POST("/user/deleteUserFormBlackList", v1.DeleteUserFormBlackList)
|
|
|
|
+ // GroupV1.POST("/user/readBlackList", v1.ReadBlackList)
|
|
|
|
+
|
|
|
|
+ response.Success(c, gin.H{
|
|
|
|
+ "data": []struct {
|
|
|
|
+ Name string `json:"name"`
|
|
|
|
+ Path string `json:"path"`
|
|
|
|
+ }{
|
|
|
|
+ {Name: "登录", Path: "/v1/user/login"},
|
|
|
|
+ {Name: "刷新", Path: "/v1/user/refreshToken"},
|
|
|
|
+ {Name: "添加游戏配置", Path: "/v1/user/addGidConfig"},
|
|
|
|
+ {Name: "查看游戏配置", Path: "/v1/user/getGidConfig"},
|
|
|
|
+ {Name: "查看系统时间", Path: "/v1/user/getSysTime"},
|
|
|
|
+ {Name: "获取用户数据", Path: "/v1/user/getUserData"},
|
|
|
|
+ {Name: "设置游戏数据", Path: "/v1/user/setGameData"},
|
|
|
|
+ {Name: "获取游戏数据", Path: "/v1/user/getGameData"},
|
|
|
|
+ {Name: "更新用户信息", Path: "/v1/user/updateUserInfo"},
|
|
|
|
+ {Name: "设置排行数据", Path: "/v1/user/SetRankData"},
|
|
|
|
+ {Name: "获取排行数据", Path: "/v1/user/getRankData"},
|
|
|
|
+ {Name: "设置省内排行数据", Path: "/v1/user/setProvinceRankData"},
|
|
|
|
+ {Name: "获取省内排行数据", Path: "/v1/user/getProvinceRankData"},
|
|
|
|
+ {Name: "更新用户位置数据", Path: "/v1/user/getProvinceRankSumData"},
|
|
|
|
+ {Name: "获取省内排行总榜数据", Path: "/v1/user/updateUserlocation"},
|
|
|
|
+ },
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 获取某一日内,接口每个小时的访问数
|
|
|
|
+func GetInterfaceData(c *gin.Context) {
|
|
|
|
+ form := request.Check(c, &struct {
|
|
|
|
+ Day string `form:"day" json:"day" binding:""`
|
|
|
|
+ Interface string `form:"interface" json:"interface" binding:"required"`
|
|
|
|
+ Pf string `form:"pf" json:"pf" binding:""`
|
|
|
|
+ Gid string `form:"gid" json:"gid" binding:""`
|
|
|
|
+ }{})
|
|
|
|
+
|
|
|
|
+ type hourDara struct {
|
|
|
|
+ Hour int `json:"hour"`
|
|
|
|
+ Data int `json:"data"`
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var res []hourDara
|
|
|
|
+ for i := 1; i <= 24; i++ {
|
|
|
|
+ key := "hourInterfaceLog:" + form.Interface + ":" + form.Day + strconv.Itoa(i)
|
|
|
|
+ if form.Pf != "" && form.Gid != "" {
|
|
|
|
+ key = "hourInterfaceLog:" + form.Gid + ":" + form.Pf + ":" + form.Interface + ":" + form.Day + strconv.Itoa(i)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ data, err := global.App.Redis.Get(context.Background(), key).Result()
|
|
|
|
+ if err != nil {
|
|
|
|
+ global.App.Log.Error("redis get error", "err", err)
|
|
|
|
+ }
|
|
|
|
+ dataInt, _ := strconv.Atoi(data)
|
|
|
|
+ res = append(res, hourDara{
|
|
|
|
+ Hour: i,
|
|
|
|
+ Data: dataInt,
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ response.Success(c, gin.H{
|
|
|
|
+ "data": res,
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 获取某一区间内,接口每天的访问数
|
|
|
|
+func GetInterfaceDataByDay(c *gin.Context) {
|
|
|
|
+ form := request.Check(c, &struct {
|
|
|
|
+ Start string `form:"start" json:"start" binding:""`
|
|
|
|
+ End string `form:"end" json:"end" binding:""`
|
|
|
|
+ Interface string `form:"interface" json:"interface" binding:"required"`
|
|
|
|
+ Pf string `form:"pf" json:"pf" binding:""`
|
|
|
|
+ Gid string `form:"gid" json:"gid" binding:""`
|
|
|
|
+ }{})
|
|
|
|
+
|
|
|
|
+ dayRange, err := GenerateDaysBetween(form.Start, form.End)
|
|
|
|
+ if err != nil {
|
|
|
|
+ response.Fail(c, 1003, err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ type dayData struct {
|
|
|
|
+ Day string `json:"day"`
|
|
|
|
+ Data int `json:"data"`
|
|
|
|
+ }
|
|
|
|
+ var res []dayData
|
|
|
|
+ for _, v := range dayRange {
|
|
|
|
+ key := "dayLog:" + form.Interface + ":" + v
|
|
|
|
+
|
|
|
|
+ if form.Pf != "" && form.Gid != "" {
|
|
|
|
+ key = "dayLog:" + form.Gid + ":" + form.Pf + ":" + form.Interface + ":" + v
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ data, err := global.App.Redis.Get(context.Background(), key).Result()
|
|
|
|
+ if err != nil {
|
|
|
|
+ global.App.Log.Error("redis get error", "err", err)
|
|
|
|
+ }
|
|
|
|
+ dataInt, _ := strconv.Atoi(data)
|
|
|
|
+ res = append(res, dayData{
|
|
|
|
+ Day: v,
|
|
|
|
+ Data: dataInt,
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ response.Success(c, gin.H{
|
|
|
|
+ "data": res,
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func GenerateDaysBetween(startDate, endDate string) ([]string, error) {
|
|
|
|
+ start, err := time.Parse("20060102", startDate)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ end, err := time.Parse("20060102", endDate)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var days []time.Time
|
|
|
|
+ for curr := start; !curr.After(end); curr = curr.AddDate(0, 0, 1) {
|
|
|
|
+ days = append(days, curr)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var res []string
|
|
|
|
+ for _, v := range days {
|
|
|
|
+ res = append(res, v.Format("20060102"))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return res, nil
|
|
|
|
+}
|