| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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)
- }
|