25 lines
869 B
Go
25 lines
869 B
Go
|
|
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
|
||
|
|
}
|
||
|
|
|
||
|
|
afterGroup := QuotaRound(cost * snap.GroupRatio)
|
||
|
|
crossed := trace.MatchedTier != snap.EstimatedTier
|
||
|
|
|
||
|
|
return TieredResult{
|
||
|
|
ActualQuotaBeforeGroup: cost,
|
||
|
|
ActualQuotaAfterGroup: afterGroup,
|
||
|
|
MatchedTier: trace.MatchedTier,
|
||
|
|
CrossedTier: crossed,
|
||
|
|
}, nil
|
||
|
|
}
|