| 12345678910111213141516171819202122232425 |
- package billingexpr
- // ComputeTieredQuota runs the Expr from a frozen BillingSnapshot against
- // actual token counts and returns the settlement result.
- func ComputeTieredQuota(snap *BillingSnapshot, params TokenParams) (TieredResult, error) {
- return ComputeTieredQuotaWithRequest(snap, params, RequestInput{})
- }
- func ComputeTieredQuotaWithRequest(snap *BillingSnapshot, params TokenParams, request RequestInput) (TieredResult, error) {
- cost, trace, err := RunExprByHashWithRequest(snap.ExprString, snap.ExprHash, params, request)
- if err != nil {
- return TieredResult{}, err
- }
- quotaBeforeGroup := cost / 1_000_000 * snap.QuotaPerUnit
- afterGroup := QuotaRound(quotaBeforeGroup * snap.GroupRatio)
- crossed := trace.MatchedTier != snap.EstimatedTier
- return TieredResult{
- ActualQuotaBeforeGroup: quotaBeforeGroup,
- ActualQuotaAfterGroup: afterGroup,
- MatchedTier: trace.MatchedTier,
- CrossedTier: crossed,
- }, nil
- }
|