功能特性: - 用户端充值记录页面,从使用日志中分离 - 充值记录中的去开发票功能 - 管理员发票管理页面 - 发票申请、处理、邮件通知功能 - 侧边栏菜单更新 - UI优化和控制台清理 - Docker部署配置 - 生产环境安全配置
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package ratio_setting
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
const exposedDataTTL = 30 * time.Second
|
|
|
|
type exposedCache struct {
|
|
data gin.H
|
|
expiresAt time.Time
|
|
}
|
|
|
|
var (
|
|
exposedData atomic.Value
|
|
rebuildMu sync.Mutex
|
|
)
|
|
|
|
func InvalidateExposedDataCache() {
|
|
exposedData.Store((*exposedCache)(nil))
|
|
}
|
|
|
|
func cloneGinH(src gin.H) gin.H {
|
|
dst := make(gin.H, len(src))
|
|
for k, v := range src {
|
|
dst[k] = v
|
|
}
|
|
return dst
|
|
}
|
|
|
|
func GetExposedData() gin.H {
|
|
if c, ok := exposedData.Load().(*exposedCache); ok && c != nil && time.Now().Before(c.expiresAt) {
|
|
return cloneGinH(c.data)
|
|
}
|
|
rebuildMu.Lock()
|
|
defer rebuildMu.Unlock()
|
|
if c, ok := exposedData.Load().(*exposedCache); ok && c != nil && time.Now().Before(c.expiresAt) {
|
|
return cloneGinH(c.data)
|
|
}
|
|
newData := gin.H{
|
|
"model_ratio": GetModelRatioCopy(),
|
|
"completion_ratio": GetCompletionRatioCopy(),
|
|
"cache_ratio": GetCacheRatioCopy(),
|
|
"model_price": GetModelPriceCopy(),
|
|
}
|
|
exposedData.Store(&exposedCache{
|
|
data: newData,
|
|
expiresAt: time.Now().Add(exposedDataTTL),
|
|
})
|
|
return cloneGinH(newData)
|
|
} |