Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,5 @@ data/
.gomodcache/
.gocache-temp
.gopath
nul
.claude/settings.local.json
18 changes: 12 additions & 6 deletions controller/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,12 @@ func GetLogsStat(c *gin.Context) {
"success": true,
"message": "",
"data": gin.H{
"quota": stat.Quota,
"rpm": stat.Rpm,
"tpm": stat.Tpm,
"quota": stat.Quota,
"token": stat.Token,
"prompt_tokens": stat.PromptTokens,
"completion_tokens": stat.CompletionTokens,
"rpm": stat.Rpm,
"tpm": stat.Tpm,
},
})
return
Expand All @@ -139,9 +142,12 @@ func GetLogsSelfStat(c *gin.Context) {
"success": true,
"message": "",
"data": gin.H{
"quota": quotaNum.Quota,
"rpm": quotaNum.Rpm,
"tpm": quotaNum.Tpm,
"quota": quotaNum.Quota,
"token": quotaNum.Token,
"prompt_tokens": quotaNum.PromptTokens,
"completion_tokens": quotaNum.CompletionTokens,
"rpm": quotaNum.Rpm,
"tpm": quotaNum.Tpm,
//"token": tokenNum,
},
})
Expand Down
10 changes: 8 additions & 2 deletions controller/usedata.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@ func GetAllQuotaDates(c *gin.Context) {
startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
username := c.Query("username")
dates, err := model.GetAllQuotaDates(startTimestamp, endTimestamp, username)
modelName := c.Query("model_name")
userId, _ := strconv.Atoi(c.Query("user_id"))
if userId == 0 {
userId, _ = strconv.Atoi(c.Query("userId"))
}
dates, err := model.GetAllQuotaDates(startTimestamp, endTimestamp, username, userId, modelName)
if err != nil {
common.ApiError(c, err)
return
Expand All @@ -31,6 +36,7 @@ func GetUserQuotaDates(c *gin.Context) {
userId := c.GetInt("id")
startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64)
endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64)
modelName := c.Query("model_name")
// 判断时间跨度是否超过 1 个月
if endTimestamp-startTimestamp > 2592000 {
c.JSON(http.StatusOK, gin.H{
Expand All @@ -39,7 +45,7 @@ func GetUserQuotaDates(c *gin.Context) {
})
return
}
dates, err := model.GetQuotaDataByUserId(userId, startTimestamp, endTimestamp)
dates, err := model.GetQuotaDataByUserIdAndModel(userId, modelName, startTimestamp, endTimestamp)
if err != nil {
common.ApiError(c, err)
return
Expand Down
26 changes: 19 additions & 7 deletions model/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,16 +315,19 @@ func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int
}

type Stat struct {
Quota int `json:"quota"`
Rpm int `json:"rpm"`
Tpm int `json:"tpm"`
Quota int `json:"quota"`
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
Token int `json:"token"`
Rpm int `json:"rpm"`
Tpm int `json:"tpm"`
}

func SumUsedQuota(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, channel int, group string) (stat Stat, err error) {
tx := LOG_DB.Table("logs").Select("sum(quota) quota")
tx := LOG_DB.Table("logs").Select("COALESCE(SUM(quota), 0) quota, COALESCE(SUM(prompt_tokens), 0) prompt_tokens, COALESCE(SUM(completion_tokens), 0) completion_tokens")

// 为rpm和tpm创建单独的查询
rpmTpmQuery := LOG_DB.Table("logs").Select("count(*) rpm, sum(prompt_tokens) + sum(completion_tokens) tpm")
rpmTpmQuery := LOG_DB.Table("logs").Select("count(*) rpm, COALESCE(SUM(prompt_tokens), 0) + COALESCE(SUM(completion_tokens), 0) tpm")

if username != "" {
tx = tx.Where("username = ?", username)
Expand Down Expand Up @@ -368,16 +371,25 @@ func SumUsedQuota(logType int, startTimestamp int64, endTimestamp int64, modelNa
common.SysError("failed to query log stat: " + err.Error())
return stat, errors.New("查询统计数据失败")
}
if err := rpmTpmQuery.Scan(&stat).Error; err != nil {

stat.Token = stat.PromptTokens + stat.CompletionTokens

var rpmTpmStat struct {
Rpm int `json:"rpm"`
Tpm int `json:"tpm"`
}
if err := rpmTpmQuery.Scan(&rpmTpmStat).Error; err != nil {
common.SysError("failed to query rpm/tpm stat: " + err.Error())
return stat, errors.New("查询统计数据失败")
}
stat.Rpm = rpmTpmStat.Rpm
stat.Tpm = rpmTpmStat.Tpm

return stat, nil
}

func SumUsedToken(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string) (token int) {
tx := LOG_DB.Table("logs").Select("ifnull(sum(prompt_tokens),0) + ifnull(sum(completion_tokens),0)")
tx := LOG_DB.Table("logs").Select("COALESCE(SUM(prompt_tokens), 0) + COALESCE(SUM(completion_tokens), 0)")
if username != "" {
tx = tx.Where("username = ?", username)
}
Expand Down
37 changes: 29 additions & 8 deletions model/usedata.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,27 +102,48 @@ func increaseQuotaData(userId int, username string, modelName string, count int,
}

func GetQuotaDataByUsername(username string, startTime int64, endTime int64) (quotaData []*QuotaData, err error) {
return GetQuotaDataByUsernameAndModel(username, "", startTime, endTime)
}

func GetQuotaDataByUserId(userId int, startTime int64, endTime int64) (quotaData []*QuotaData, err error) {
return GetQuotaDataByUserIdAndModel(userId, "", startTime, endTime)
}

func GetQuotaDataByUsernameAndModel(username string, modelName string, startTime int64, endTime int64) (quotaData []*QuotaData, err error) {
var quotaDatas []*QuotaData
// 从quota_data表中查询数据
err = DB.Table("quota_data").Where("username = ? and created_at >= ? and created_at <= ?", username, startTime, endTime).Find(&quotaDatas).Error
tx := DB.Table("quota_data").Where("username = ? and created_at >= ? and created_at <= ?", username, startTime, endTime)
if modelName != "" {
tx = tx.Where("model_name = ?", modelName)
}
err = tx.Find(&quotaDatas).Error
return quotaDatas, err
}

func GetQuotaDataByUserId(userId int, startTime int64, endTime int64) (quotaData []*QuotaData, err error) {
func GetQuotaDataByUserIdAndModel(userId int, modelName string, startTime int64, endTime int64) (quotaData []*QuotaData, err error) {
var quotaDatas []*QuotaData
// 从quota_data表中查询数据
err = DB.Table("quota_data").Where("user_id = ? and created_at >= ? and created_at <= ?", userId, startTime, endTime).Find(&quotaDatas).Error
tx := DB.Table("quota_data").Where("user_id = ? and created_at >= ? and created_at <= ?", userId, startTime, endTime)
if modelName != "" {
tx = tx.Where("model_name = ?", modelName)
}
err = tx.Find(&quotaDatas).Error
return quotaDatas, err
}

func GetAllQuotaDates(startTime int64, endTime int64, username string) (quotaData []*QuotaData, err error) {
func GetAllQuotaDates(startTime int64, endTime int64, username string, userId int, modelName string) (quotaData []*QuotaData, err error) {
if userId != 0 {
return GetQuotaDataByUserIdAndModel(userId, modelName, startTime, endTime)
}
if username != "" {
return GetQuotaDataByUsername(username, startTime, endTime)
return GetQuotaDataByUsernameAndModel(username, modelName, startTime, endTime)
}
var quotaDatas []*QuotaData
// 从quota_data表中查询数据
// only select model_name, sum(count) as count, sum(quota) as quota, model_name, created_at from quota_data group by model_name, created_at;
//err = DB.Table("quota_data").Where("created_at >= ? and created_at <= ?", startTime, endTime).Find(&quotaDatas).Error
err = DB.Table("quota_data").Select("model_name, sum(count) as count, sum(quota) as quota, sum(token_used) as token_used, created_at").Where("created_at >= ? and created_at <= ?", startTime, endTime).Group("model_name, created_at").Find(&quotaDatas).Error
tx := DB.Table("quota_data").Select("model_name, sum(count) as count, sum(quota) as quota, sum(token_used) as token_used, created_at").Where("created_at >= ? and created_at <= ?", startTime, endTime)
if modelName != "" {
tx = tx.Where("model_name = ?", modelName)
}
err = tx.Group("model_name, created_at").Find(&quotaDatas).Error
return quotaDatas, err
}
6 changes: 6 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading