Files

34 lines
920 B
Go

package service
import (
"context"
"sync"
"time"
"github.com/QuantumNous/new-api/model"
)
var groupModelCostSnapshot struct {
sync.Mutex
updated time.Time
values map[string]map[string]model.GroupModelCost
}
// Immutable snapshots are shared by status display and automatic routing.
func GroupModelCosts(ctx context.Context) (map[string]map[string]model.GroupModelCost, error) {
groupModelCostSnapshot.Lock()
defer groupModelCostSnapshot.Unlock()
now := time.Now()
if groupModelCostSnapshot.values != nil && now.Sub(groupModelCostSnapshot.updated) < time.Minute {
return groupModelCostSnapshot.values, nil
}
queryCtx, cancel := context.WithTimeout(ctx, 3*time.Second)
defer cancel()
values, err := model.GetGroupModelCosts(queryCtx, now.Add(-24*time.Hour), now)
if err != nil {
return nil, err
}
groupModelCostSnapshot.values, groupModelCostSnapshot.updated = values, now
return values, nil
}