statistics_charts.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package controller
  2. import (
  3. "net/http"
  4. "one-api/common"
  5. "one-api/model"
  6. "strconv"
  7. "time"
  8. "github.com/gin-gonic/gin"
  9. )
  10. // GetChannelStatistics 获取按渠道统计的数据
  11. func GetChannelStatistics(c *gin.Context) {
  12. startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
  13. endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
  14. username := c.Query("username")
  15. tokenName := c.Query("token_name")
  16. modelName := c.Query("model_name")
  17. channel, _ := strconv.Atoi(c.Query("channel"))
  18. group := c.Query("group")
  19. defaultTime := c.Query("default_time")
  20. // 设置默认时间范围为最近7天
  21. if startTimestamp == 0 && endTimestamp == 0 {
  22. endTimestamp = time.Now().Unix()
  23. startTimestamp = endTimestamp - 7*24*3600
  24. }
  25. // 设置默认时间粒度
  26. if defaultTime == "" {
  27. defaultTime = "day"
  28. }
  29. statistics, err := model.GetChannelStatistics(int(startTimestamp), int(endTimestamp), username, tokenName, modelName, channel, group, defaultTime)
  30. if err != nil {
  31. common.ApiError(c, err)
  32. return
  33. }
  34. c.JSON(http.StatusOK, gin.H{
  35. "success": true,
  36. "message": "",
  37. "data": statistics,
  38. })
  39. }
  40. // GetTokenStatistics 获取按令牌统计的数据
  41. func GetTokenStatistics(c *gin.Context) {
  42. startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
  43. endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
  44. username := c.Query("username")
  45. tokenName := c.Query("token_name")
  46. modelName := c.Query("model_name")
  47. channel, _ := strconv.Atoi(c.Query("channel"))
  48. group := c.Query("group")
  49. defaultTime := c.Query("default_time")
  50. // 设置默认时间范围为最近7天
  51. if startTimestamp == 0 && endTimestamp == 0 {
  52. endTimestamp = time.Now().Unix()
  53. startTimestamp = endTimestamp - 7*24*3600
  54. }
  55. // 设置默认时间粒度
  56. if defaultTime == "" {
  57. defaultTime = "day"
  58. }
  59. statistics, err := model.GetTokenStatistics(int(startTimestamp), int(endTimestamp), username, tokenName, modelName, channel, group, defaultTime)
  60. if err != nil {
  61. common.ApiError(c, err)
  62. return
  63. }
  64. c.JSON(http.StatusOK, gin.H{
  65. "success": true,
  66. "message": "",
  67. "data": statistics,
  68. })
  69. }
  70. // GetUserStatistics 获取按用户统计的数据
  71. func GetUserStatistics(c *gin.Context) {
  72. startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
  73. endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
  74. username := c.Query("username")
  75. tokenName := c.Query("token_name")
  76. modelName := c.Query("model_name")
  77. channel, _ := strconv.Atoi(c.Query("channel"))
  78. group := c.Query("group")
  79. defaultTime := c.Query("default_time")
  80. // 设置默认时间范围为最近7天
  81. if startTimestamp == 0 && endTimestamp == 0 {
  82. endTimestamp = time.Now().Unix()
  83. startTimestamp = endTimestamp - 7*24*3600
  84. }
  85. // 设置默认时间粒度
  86. if defaultTime == "" {
  87. defaultTime = "day"
  88. }
  89. statistics, err := model.GetUserStatistics(int(startTimestamp), int(endTimestamp), username, tokenName, modelName, channel, group, defaultTime)
  90. if err != nil {
  91. common.ApiError(c, err)
  92. return
  93. }
  94. c.JSON(http.StatusOK, gin.H{
  95. "success": true,
  96. "message": "",
  97. "data": statistics,
  98. })
  99. }