This commit is contained in:
XOF
2025-11-20 12:24:05 +08:00
commit f28bdc751f
164 changed files with 64248 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
package service
import (
"gemini-balancer/internal/models"
"strconv"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type LogService struct {
db *gorm.DB
}
func NewLogService(db *gorm.DB) *LogService {
return &LogService{db: db}
}
// Record 记录一条日志到数据库 (TODO 暂时保留简单实现,后续再重构为异步)
func (s *LogService) Record(log *models.RequestLog) error {
return s.db.Create(log).Error
}
func (s *LogService) GetLogs(c *gin.Context) ([]models.RequestLog, error) {
var logs []models.RequestLog
query := s.db.Model(&models.RequestLog{}).Scopes(s.filtersScope(c)).Order("request_time desc")
// 简单的分页 ( TODO 后续可以做得更复杂)
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
offset := (page - 1) * pageSize
// 执行查询
err := query.Limit(pageSize).Offset(offset).Find(&logs).Error
if err != nil {
return nil, err
}
return logs, nil
}
func (s *LogService) filtersScope(c *gin.Context) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
if modelName := c.Query("model_name"); modelName != "" {
db = db.Where("model_name = ?", modelName)
}
if isSuccessStr := c.Query("is_success"); isSuccessStr != "" {
if isSuccess, err := strconv.ParseBool(isSuccessStr); err == nil {
db = db.Where("is_success = ?", isSuccess)
}
}
if statusCodeStr := c.Query("status_code"); statusCodeStr != "" {
if statusCode, err := strconv.Atoi(statusCodeStr); err == nil {
db = db.Where("status_code = ?", statusCode)
}
}
if keyIDStr := c.Query("key_id"); keyIDStr != "" {
if keyID, err := strconv.ParseUint(keyIDStr, 10, 64); err == nil {
db = db.Where("key_id = ?", keyID)
}
}
return db
}
}