34 lines
920 B
Go
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
|
|
}
|