| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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(),
- "create_cache_ratio": GetCreateCacheRatioCopy(),
- "model_price": GetModelPriceCopy(),
- }
- exposedData.Store(&exposedCache{
- data: newData,
- expiresAt: time.Now().Add(exposedDataTTL),
- })
- return cloneGinH(newData)
- }
|