@@ -24,17 +24,20 @@ func NewFunctionBalance(credit, invocations, costPerUnitInvocations, unitInvocat
2424 fnBalance := FunctionBalance {}
2525
2626 totalCharge := calculateInvocationsCost (invocations , costPerUnitInvocations , unitInvocations )
27- if credit < totalCharge {
27+ unpaidAmount := uint64 (0 )
28+ if credit <= totalCharge {
2829 fnBalance .Balance = 0
29- remainingInvocations := calculateRemainingInvocations (totalCharge - credit , costPerUnitInvocations , unitInvocations )
30- if bonusInvocations < remainingInvocations {
31- fnBalance .Invocations = 0
32- } else {
33- fnBalance .Invocations = bonusInvocations - remainingInvocations
34- }
30+ unpaidAmount = totalCharge - credit
3531 } else {
3632 fnBalance .Balance = credit - totalCharge
37- fnBalance .Invocations = bonusInvocations + calculateRemainingInvocations (fnBalance .Balance , costPerUnitInvocations , unitInvocations )
33+ }
34+
35+ unpaidInvocations := uint64 (unpaidAmount * unitInvocations / costPerUnitInvocations + invocations % unitInvocations )
36+ remainingInvocations := bonusInvocations + uint64 (fnBalance .Balance * unitInvocations / costPerUnitInvocations )
37+ if remainingInvocations < unpaidInvocations {
38+ fnBalance .Invocations = 0
39+ } else {
40+ fnBalance .Invocations = remainingInvocations - unpaidInvocations
3841 }
3942
4043 return fnBalance
@@ -44,10 +47,6 @@ func calculateInvocationsCost(invocations, costPerUnitInvocations, unitInvocatio
4447 return uint64 (costPerUnitInvocations * invocations / unitInvocations )
4548}
4649
47- func calculateRemainingInvocations (balance , costPerUnitInvocations , unitInvocations uint64 ) uint64 {
48- return uint64 (balance * unitInvocations / costPerUnitInvocations )
49- }
50-
5150func Handle (w http.ResponseWriter , r * http.Request ) {
5251
5352 fnName , err := parseFunctionName (r )
0 commit comments