|
|
@@ -12,6 +12,16 @@ import (
|
|
|
"gorm.io/gorm"
|
|
|
)
|
|
|
|
|
|
+var groupCol string
|
|
|
+
|
|
|
+func init() {
|
|
|
+ if common.UsingPostgreSQL {
|
|
|
+ groupCol = `"group"`
|
|
|
+ } else {
|
|
|
+ groupCol = "`group`"
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
type Log struct {
|
|
|
Id int `json:"id" gorm:"index:idx_created_at_id,priority:1"`
|
|
|
UserId int `json:"user_id" gorm:"index"`
|
|
|
@@ -28,6 +38,7 @@ type Log struct {
|
|
|
IsStream bool `json:"is_stream" gorm:"default:false"`
|
|
|
ChannelId int `json:"channel" gorm:"index"`
|
|
|
TokenId int `json:"token_id" gorm:"default:0;index"`
|
|
|
+ Group string `json:"group" gorm:"index"`
|
|
|
Other string `json:"other"`
|
|
|
}
|
|
|
|
|
|
@@ -70,7 +81,9 @@ func RecordLog(userId int, logType int, content string) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func RecordConsumeLog(ctx context.Context, userId int, channelId int, promptTokens int, completionTokens int, modelName string, tokenName string, quota int, content string, tokenId int, userQuota int, useTimeSeconds int, isStream bool, other map[string]interface{}) {
|
|
|
+func RecordConsumeLog(ctx context.Context, userId int, channelId int, promptTokens int, completionTokens int,
|
|
|
+ modelName string, tokenName string, quota int, content string, tokenId int, userQuota int, useTimeSeconds int,
|
|
|
+ isStream bool, group string, other map[string]interface{}) {
|
|
|
common.LogInfo(ctx, fmt.Sprintf("record consume log: userId=%d, 用户调用前余额=%d, channelId=%d, promptTokens=%d, completionTokens=%d, modelName=%s, tokenName=%s, quota=%d, content=%s", userId, userQuota, channelId, promptTokens, completionTokens, modelName, tokenName, quota, content))
|
|
|
if !common.LogConsumeEnabled {
|
|
|
return
|
|
|
@@ -92,6 +105,7 @@ func RecordConsumeLog(ctx context.Context, userId int, channelId int, promptToke
|
|
|
TokenId: tokenId,
|
|
|
UseTime: useTimeSeconds,
|
|
|
IsStream: isStream,
|
|
|
+ Group: group,
|
|
|
Other: otherStr,
|
|
|
}
|
|
|
err := LOG_DB.Create(log).Error
|
|
|
@@ -105,7 +119,7 @@ func RecordConsumeLog(ctx context.Context, userId int, channelId int, promptToke
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, startIdx int, num int, channel int) (logs []*Log, total int64, err error) {
|
|
|
+func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, startIdx int, num int, channel int, group string) (logs []*Log, total int64, err error) {
|
|
|
var tx *gorm.DB
|
|
|
if logType == LogTypeUnknown {
|
|
|
tx = LOG_DB
|
|
|
@@ -130,6 +144,9 @@ func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName
|
|
|
if channel != 0 {
|
|
|
tx = tx.Where("channel_id = ?", channel)
|
|
|
}
|
|
|
+ if group != "" {
|
|
|
+ tx = tx.Where(groupCol+" = ?", group)
|
|
|
+ }
|
|
|
err = tx.Model(&Log{}).Count(&total).Error
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
@@ -141,7 +158,7 @@ func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName
|
|
|
return logs, total, err
|
|
|
}
|
|
|
|
|
|
-func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int64, modelName string, tokenName string, startIdx int, num int) (logs []*Log, total int64, err error) {
|
|
|
+func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int64, modelName string, tokenName string, startIdx int, num int, group string) (logs []*Log, total int64, err error) {
|
|
|
var tx *gorm.DB
|
|
|
if logType == LogTypeUnknown {
|
|
|
tx = LOG_DB.Where("user_id = ?", userId)
|
|
|
@@ -160,6 +177,9 @@ func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int
|
|
|
if endTimestamp != 0 {
|
|
|
tx = tx.Where("created_at <= ?", endTimestamp)
|
|
|
}
|
|
|
+ if group != "" {
|
|
|
+ tx = tx.Where(groupCol+" = ?", group)
|
|
|
+ }
|
|
|
err = tx.Model(&Log{}).Count(&total).Error
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
@@ -193,7 +213,7 @@ type Stat struct {
|
|
|
Tpm int `json:"tpm"`
|
|
|
}
|
|
|
|
|
|
-func SumUsedQuota(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, channel int) (stat Stat) {
|
|
|
+func SumUsedQuota(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, channel int, group string) (stat Stat) {
|
|
|
tx := LOG_DB.Table("logs").Select("sum(quota) quota")
|
|
|
|
|
|
// 为rpm和tpm创建单独的查询
|
|
|
@@ -221,6 +241,10 @@ func SumUsedQuota(logType int, startTimestamp int64, endTimestamp int64, modelNa
|
|
|
tx = tx.Where("channel_id = ?", channel)
|
|
|
rpmTpmQuery = rpmTpmQuery.Where("channel_id = ?", channel)
|
|
|
}
|
|
|
+ if group != "" {
|
|
|
+ tx = tx.Where(groupCol+" = ?", group)
|
|
|
+ rpmTpmQuery = rpmTpmQuery.Where(groupCol+" = ?", group)
|
|
|
+ }
|
|
|
|
|
|
tx = tx.Where("type = ?", LogTypeConsume)
|
|
|
rpmTpmQuery = rpmTpmQuery.Where("type = ?", LogTypeConsume)
|