Implement Sequential Rate Limiting

This commit is contained in:
Amish Shah
2016-08-19 18:01:24 +01:00
parent 392133f927
commit dcba580d89
9 changed files with 122 additions and 84 deletions

View File

@@ -1,23 +1,21 @@
const request = require('superagent');
const Constants = require('../../util/Constants');
const UserAgentManager = require('./UserAgentManager');
const RESTMethods = require('./RESTMethods');
const Bucket = require('./Bucket');
const SequentialRequestHandler = require('./RequestHandlers/Sequential');
const APIRequest = require('./APIRequest');
class RESTManager {
constructor(client) {
this.client = client;
this.buckets = {};
this.handlers = {};
this.userAgentManager = new UserAgentManager(this);
this.methods = new RESTMethods(this);
this.rateLimitedEndpoints = {};
}
addToBucket(bucket, apiRequest) {
push(handler, apiRequest) {
return new Promise((resolve, reject) => {
bucket.add({
handler.push({
request: apiRequest,
resolve,
reject,
@@ -26,17 +24,13 @@ class RESTManager {
}
makeRequest(method, url, auth, data, file) {
/*
file is {file, name}
*/
const apiRequest = new APIRequest(this, method, url, auth, data, file);
if (!this.buckets[apiRequest.getBucketName()]) {
console.log('new bucket', apiRequest.getBucketName());
this.buckets[apiRequest.getBucketName()] = new Bucket(this, 1, 1);
if (!this.handlers[apiRequest.getEndpoint()]) {
this.handlers[apiRequest.getEndpoint()] = new SequentialRequestHandler(this);
}
return this.addToBucket(this.buckets[apiRequest.getBucketName()], apiRequest);
return this.push(this.handlers[apiRequest.getEndpoint()], apiRequest);
}
}