| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package model
- import (
- "gorm.io/gorm"
- "one-api/common"
- )
- type Log struct {
- Id int `json:"id"`
- UserId int `json:"user_id"`
- CreatedAt int64 `json:"created_at" gorm:"bigint;index"`
- Type int `json:"type" gorm:"index"`
- Content string `json:"content"`
- Username string `json:"username" gorm:"index;default:''"`
- TokenName string `json:"token_name" gorm:"index;default:''"`
- ModelName string `json:"model_name" gorm:"index;default:''"`
- Quota int `json:"quota" gorm:"default:0"`
- PromptTokens int `json:"prompt_tokens" gorm:"default:0"`
- CompletionTokens int `json:"completion_tokens" gorm:"default:0"`
- }
- const (
- LogTypeUnknown = iota
- LogTypeTopup
- LogTypeConsume
- LogTypeManage
- LogTypeSystem
- )
- func RecordLog(userId int, logType int, content string) {
- if logType == LogTypeConsume && !common.LogConsumeEnabled {
- return
- }
- log := &Log{
- UserId: userId,
- Username: GetUsernameById(userId),
- CreatedAt: common.GetTimestamp(),
- Type: logType,
- Content: content,
- }
- err := DB.Create(log).Error
- if err != nil {
- common.SysError("failed to record log: " + err.Error())
- }
- }
- func RecordConsumeLog(userId int, promptTokens int, completionTokens int, modelName string, tokenName string, quota int, content string) {
- if !common.LogConsumeEnabled {
- return
- }
- log := &Log{
- UserId: userId,
- Username: GetUsernameById(userId),
- CreatedAt: common.GetTimestamp(),
- Type: LogTypeConsume,
- Content: content,
- PromptTokens: promptTokens,
- CompletionTokens: completionTokens,
- TokenName: tokenName,
- ModelName: modelName,
- Quota: quota,
- }
- err := DB.Create(log).Error
- if err != nil {
- common.SysError("failed to record log: " + err.Error())
- }
- }
- func GetAllLogs(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, startIdx int, num int) (logs []*Log, err error) {
- var tx *gorm.DB
- if logType == LogTypeUnknown {
- tx = DB
- } else {
- tx = DB.Where("type = ?", logType)
- }
- if modelName != "" {
- tx = tx.Where("model_name = ?", modelName)
- }
- if username != "" {
- tx = tx.Where("username = ?", username)
- }
- if tokenName != "" {
- tx = tx.Where("token_name = ?", tokenName)
- }
- if startTimestamp != 0 {
- tx = tx.Where("created_at >= ?", startTimestamp)
- }
- if endTimestamp != 0 {
- tx = tx.Where("created_at <= ?", endTimestamp)
- }
- err = tx.Order("id desc").Limit(num).Offset(startIdx).Find(&logs).Error
- return logs, err
- }
- func GetUserLogs(userId int, logType int, startTimestamp int64, endTimestamp int64, modelName string, tokenName string, startIdx int, num int) (logs []*Log, err error) {
- var tx *gorm.DB
- if logType == LogTypeUnknown {
- tx = DB.Where("user_id = ?", userId)
- } else {
- tx = DB.Where("user_id = ? and type = ?", userId, logType)
- }
- if modelName != "" {
- tx = tx.Where("model_name = ?", modelName)
- }
- if tokenName != "" {
- tx = tx.Where("token_name = ?", tokenName)
- }
- if startTimestamp != 0 {
- tx = tx.Where("created_at >= ?", startTimestamp)
- }
- if endTimestamp != 0 {
- tx = tx.Where("created_at <= ?", endTimestamp)
- }
- err = tx.Order("id desc").Limit(num).Offset(startIdx).Omit("id").Find(&logs).Error
- return logs, err
- }
- func SearchAllLogs(keyword string) (logs []*Log, err error) {
- err = DB.Where("type = ? or content LIKE ?", keyword, keyword+"%").Order("id desc").Limit(common.MaxRecentItems).Find(&logs).Error
- return logs, err
- }
- func SearchUserLogs(userId int, keyword string) (logs []*Log, err error) {
- err = DB.Where("user_id = ? and type = ?", userId, keyword).Order("id desc").Limit(common.MaxRecentItems).Omit("id").Find(&logs).Error
- return logs, err
- }
- func SumUsedQuota(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string) (quota int) {
- tx := DB.Table("logs").Select("sum(quota)")
- if username != "" {
- tx = tx.Where("username = ?", username)
- }
- if tokenName != "" {
- tx = tx.Where("token_name = ?", tokenName)
- }
- if startTimestamp != 0 {
- tx = tx.Where("created_at >= ?", startTimestamp)
- }
- if endTimestamp != 0 {
- tx = tx.Where("created_at <= ?", endTimestamp)
- }
- if modelName != "" {
- tx = tx.Where("model_name = ?", modelName)
- }
- tx.Where("type = ?", LogTypeConsume).Scan("a)
- return quota
- }
- func SumUsedToken(logType int, startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string) (token int) {
- tx := DB.Table("logs").Select("sum(prompt_tokens) + sum(completion_tokens)")
- if username != "" {
- tx = tx.Where("username = ?", username)
- }
- if tokenName != "" {
- tx = tx.Where("token_name = ?", tokenName)
- }
- if startTimestamp != 0 {
- tx = tx.Where("created_at >= ?", startTimestamp)
- }
- if endTimestamp != 0 {
- tx = tx.Where("created_at <= ?", endTimestamp)
- }
- if modelName != "" {
- tx = tx.Where("model_name = ?", modelName)
- }
- tx.Where("type = ?", LogTypeConsume).Scan(&token)
- return token
- }
|