channel_affinity_cache.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package controller
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/QuantumNous/new-api/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. func GetChannelAffinityCacheStats(c *gin.Context) {
  9. stats := service.GetChannelAffinityCacheStats()
  10. c.JSON(http.StatusOK, gin.H{
  11. "success": true,
  12. "message": "",
  13. "data": stats,
  14. })
  15. }
  16. func ClearChannelAffinityCache(c *gin.Context) {
  17. all := strings.TrimSpace(c.Query("all"))
  18. ruleName := strings.TrimSpace(c.Query("rule_name"))
  19. if all == "true" {
  20. deleted := service.ClearChannelAffinityCacheAll()
  21. c.JSON(http.StatusOK, gin.H{
  22. "success": true,
  23. "message": "",
  24. "data": gin.H{
  25. "deleted": deleted,
  26. },
  27. })
  28. return
  29. }
  30. if ruleName == "" {
  31. c.JSON(http.StatusBadRequest, gin.H{
  32. "success": false,
  33. "message": "缺少参数:rule_name,或使用 all=true 清空全部",
  34. })
  35. return
  36. }
  37. deleted, err := service.ClearChannelAffinityCacheByRuleName(ruleName)
  38. if err != nil {
  39. c.JSON(http.StatusBadRequest, gin.H{
  40. "success": false,
  41. "message": err.Error(),
  42. })
  43. return
  44. }
  45. c.JSON(http.StatusOK, gin.H{
  46. "success": true,
  47. "message": "",
  48. "data": gin.H{
  49. "deleted": deleted,
  50. },
  51. })
  52. }
  53. func GetChannelAffinityUsageCacheStats(c *gin.Context) {
  54. ruleName := strings.TrimSpace(c.Query("rule_name"))
  55. usingGroup := strings.TrimSpace(c.Query("using_group"))
  56. keyFp := strings.TrimSpace(c.Query("key_fp"))
  57. if ruleName == "" {
  58. c.JSON(http.StatusBadRequest, gin.H{
  59. "success": false,
  60. "message": "missing param: rule_name",
  61. })
  62. return
  63. }
  64. if keyFp == "" {
  65. c.JSON(http.StatusBadRequest, gin.H{
  66. "success": false,
  67. "message": "missing param: key_fp",
  68. })
  69. return
  70. }
  71. stats := service.GetChannelAffinityUsageCacheStats(ruleName, usingGroup, keyFp)
  72. c.JSON(http.StatusOK, gin.H{
  73. "success": true,
  74. "message": "",
  75. "data": stats,
  76. })
  77. }