Merge pull request #546 from CartoDB/unique-query-ratelimit

Unique query ratelimit
This commit is contained in:
Simon Martín 2019-01-09 09:14:50 +01:00 committed by GitHub
commit 68b2b1970a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 11 additions and 16 deletions

View File

@ -10,6 +10,7 @@ Announcements:
* Set platform limits message also on streaming responses
* Consider cancelled queries as platform limits.
* Report fine-grained Garbage Collector stats
* Both query endpoints as the same one in rate limits terms
## 2.3.1
Released 2018-12-23

View File

@ -35,12 +35,12 @@ QueryController.prototype.route = function (app) {
const { base_url } = global.settings;
const forceToBeMaster = false;
const queryMiddlewares = endpointGroup => {
const queryMiddlewares = () => {
return [
bodyParserMiddleware(),
initializeProfilerMiddleware('query'),
userMiddleware(this.metadataBackend),
rateLimitsMiddleware(this.userLimitsService, endpointGroup),
rateLimitsMiddleware(this.userLimitsService, RATE_LIMIT_ENDPOINTS_GROUPS.QUERY),
authorizationMiddleware(this.metadataBackend, forceToBeMaster),
connectionParamsMiddleware(this.userDatabaseService),
timeoutLimitsMiddleware(this.metadataBackend),
@ -49,8 +49,8 @@ QueryController.prototype.route = function (app) {
];
};
app.all(`${base_url}/sql`, queryMiddlewares(RATE_LIMIT_ENDPOINTS_GROUPS.QUERY));
app.all(`${base_url}/sql.:f`, queryMiddlewares(RATE_LIMIT_ENDPOINTS_GROUPS.QUERY_FORMAT));
app.all(`${base_url}/sql`, queryMiddlewares());
app.all(`${base_url}/sql.:f`, queryMiddlewares());
};
// jshint maxcomplexity:21

View File

@ -2,7 +2,6 @@
const RATE_LIMIT_ENDPOINTS_GROUPS = {
QUERY: 'query',
QUERY_FORMAT: 'query_format',
JOB_CREATE: 'job_create',
JOB_GET: 'job_get',
JOB_DELETE: 'job_delete',
@ -21,23 +20,23 @@ function rateLimit(userLimits, endpointGroup = null) {
if (err) {
return next(err);
}
if (!userRateLimit) {
return next();
}
const [isBlocked, limit, remaining, retry, reset] = userRateLimit;
res.set({
'Carto-Rate-Limit-Limit': limit,
'Carto-Rate-Limit-Remaining': remaining,
'Carto-Rate-Limit-Reset': reset
});
if (isBlocked) {
// retry is floor rounded in seconds by redis-cell
res.set('Retry-After', retry + 1);
const rateLimitError = new Error(
'You are over platform\'s limits. Please contact us to know more details'
);
@ -46,7 +45,7 @@ function rateLimit(userLimits, endpointGroup = null) {
rateLimitError.detail = 'rate-limit';
return next(rateLimitError);
}
return next();
});
};

View File

@ -74,7 +74,6 @@ function App(statsClient) {
rateLimitsEnabled: false,
endpoints: {
query: false,
query_format: false,
job_create: false,
job_get: false,
job_delete: false

View File

@ -117,7 +117,6 @@ module.exports.ratelimits = {
// whether it should rate limit one or more endpoints (only if rateLimitsEnabled = true)
endpoints: {
query: false,
query_format: false,
job_create: false,
job_get: false,
job_delete: false

View File

@ -121,7 +121,6 @@ module.exports.ratelimits = {
// whether it should rate limit one or more endpoints (only if rateLimitsEnabled = true)
endpoints: {
query: false,
query_format: false,
job_create: false,
job_get: false,
job_delete: false

View File

@ -118,7 +118,6 @@ module.exports.ratelimits = {
// whether it should rate limit one or more endpoints (only if rateLimitsEnabled = true)
endpoints: {
query: false,
query_format: false,
job_create: false,
job_get: false,
job_delete: false

View File

@ -118,7 +118,6 @@ module.exports.ratelimits = {
// whether it should rate limit one or more endpoints (only if rateLimitsEnabled = true)
endpoints: {
query: false,
query_format: false,
job_create: false,
job_get: false,
job_delete: false