Hi all,
I need a counter to know the request number for a proxy in a day. If it's 10th request then I want to send the value 10 to backend in header.
Now I am using a dummy quota policy in which I have given counter a very big value.
But the quota policy is taking a very long time in this.
Is there any other inbuilt variable or counter which I can use ?
You could achieve this using a Quota with continueOnError="true" and a Condition to set the target header if the Quota policy failed
<Quota continueOnError="true" enabled="true" name="QU-ByProxyDayInterval" type="calendar"> <DisplayName>QU-ByProxyDayInterval</DisplayName> <Allow count="10" countRef="request.header.quota_allowed"/> <Interval ref="request.header.quota_count">10</Interval> <TimeUnit ref="request.header.quota_timeout">day</TimeUnit> <Identifier ref="quota_interval_id"/> <Distributed>true</Distributed> <Synchronous>true</Synchronous> <StartTime>2021-01-01 00:00:01</StartTime> </Quota>
The Conditional Flow
<Step> <Condition>ratelimit.QU-ByProxyDayInterval.failed == true</Condition> <Name>AM-ByProxyTargetHeader</Name> </Step>
If you wanted to have this sent every "interval" (e.g. 10) times, you could add a Reset Quota policy.
<ResetQuota name="QR-QuotaByProxyDay"> <DisplayName>QR-QuotaByProxyDay</DisplayName> <Properties/> <Quota name="QU-ByProxyDayInterval"> <Identifier ref="quota_interval_id"> <Allow ref="request.header.reset_quota">10</Allow> </Identifier> </Quota> </ResetQuota>
Using the same condition
<Step> <Condition>ratelimit.QU-ByProxyDayInterval.failed == true</Condition> <Name>QR-QuotaByProxyDay</Name> </Step>
The Reset Quota
<ResetQuota name="QR-QuotaByProxyDay"> <DisplayName>QR-QuotaByProxyDay</DisplayName> <Properties/> <Quota name="QU-ByProxyDayInterval"> <Identifier ref="quota_interval_id"> <Allow ref="request.header.reset_quota">10</Allow> </Identifier> </Quota> </ResetQuota>
Finally, if you also wanted to set the total used count for the day, you could use another all-day quota counter.
<Quota name="QU-ByProxyDayAll" type="calendar"> <DisplayName>QU-ByProxyDayAll</DisplayName> <Allow count="100000000" countRef="request.header.quota_allowed"/> <Interval ref="request.header.quota_count">10</Interval> <TimeUnit ref="request.header.quota_timeout">day</TimeUnit> <Identifier ref="apiproxy.name"/> <Distributed>true</Distributed> <Synchronous>true</Synchronous> <StartTime>2021-01-01 00:00:01</StartTime> </Quota>
I did not notice any latency when using a large allowed count.
If you don't like playing the Quota puzzle game, you could just use a KVM or Cache.
As I have mentioned, I am currently using the quota. I don't want to use kvm and cache is something which will get cleared after restart.
Is there any inbuilt counter ? I am jsut looking for something which is already there as a variable and I will be able to use inside javascript.
User | Count |
---|---|
7 | |
2 | |
2 | |
1 | |
1 |