mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Add flexibility to daily API usage limit
Summary: Allow exceeding the daily API usage limit for a doc based on additional allocations for the current hour and minute. See the doc comment on getDocApiUsageKeysToIncr for details. This means that up to 5 redis keys may be relevant at a time for a single document. Test Plan: Updated and expanded 'Daily API Limit' tests. Reviewers: dsagal Reviewed By: dsagal Differential Revision: https://phab.getgrist.com/D3368
This commit is contained in:
@@ -137,8 +137,8 @@ class DummyDocWorkerMap implements IDocWorkerMap {
|
||||
return null;
|
||||
}
|
||||
|
||||
public incrementDocApiUsage(key: string): Promise<number> {
|
||||
return Promise.resolve(0);
|
||||
public getRedisClient(): RedisClient {
|
||||
throw new Error("No redis client here");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -517,16 +517,8 @@ export class DocWorkerMap implements IDocWorkerMap {
|
||||
return this._client.getAsync(`doc-${docId}-group`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the value at the given redis key representing API usage of one document in one day.
|
||||
* Expire the key after a day just so that it cleans itself up.
|
||||
* Returns the value after incrementing.
|
||||
* This is not related to other responsibilities of this class,
|
||||
* but this class conveniently manages the redis client.
|
||||
*/
|
||||
public async incrementDocApiUsage(key: string): Promise<number | null> {
|
||||
const result = await this._client.multi().incr(key).expire(key, 24 * 60 * 60).execAsync();
|
||||
return Number(result?.[0]);
|
||||
public getRedisClient(): RedisClient {
|
||||
return this._client;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user