/**
* Task Queue Integrity & Rate Limiting Diagnostics
*
* Provides functions to verify task queue integrity and enforce rate limits.
*/
class TaskQueue {
constructor(maxRequestsPerSecond = 10) {
this.queue = [];
this.rateLimit = maxRequestsPerSecond;
this.lastRequestTime = 0;
}
/**
* Adds a task to the queue. Rate limits are enforced.
* @param {Function} task The task to execute.
* @returns {Promise<any>} A promise that resolves with the task result.
*/
addTask(task) {
return new Promise((resolve, reject) => {
const now = Date.now();
// Rate limiting check
if (now - this.lastRequestTime < 1000 / this.rateLimit) {
// Rate limit exceeded. Reject the promise.
reject(new Error("Rate limit exceeded."));
return;
}
this.lastRequestTime = now;
// Add task to queue (simulated)
this.queue.push(task);
// Execute task.
task()
.then(result => {
resolve(result);
})
.catch(error => {
reject(error);
});
});
}
/**
* Clears the queue. Useful for testing/diagnostics.
*/
clearQueue() {
this.queue = [];
this.lastRequestTime = 0;
}
/**
* Gets the current size of the queue.
* @returns {number}
*/
getQueueSize() {
return this.queue.length;
}
}
/**
* Example Usage & Diagnostics
*/
// Simulate tasks
function task1() {
return new Promise(resolve => setTimeout(() => {
console.log("Task 1 completed");
resolve("Result 1");
}, 500));
}
function task2() {
return new Promise(resolve => setTimeout(() => {
console.log("Task 2 completed");
resolve("Result 2");
}, 200));
}
function task3() {
return new Promise(resolve => setTimeout(() => {
console.log("Task 3 completed");
resolve("Result 3");
}, 800));
}
// Create a task queue with a rate limit of 5 requests per second
const queue = new TaskQueue(5);
// Simulate submitting tasks
async function simulateTasks() {
for (let i = 0; i < 20; i++) {
try {
await queue.addTask(() => task1()); // Simulate submitting tasks
} catch (error) {
console.error("Task failed:", error.message);
}
}
}
simulateTasks();
// Diagnostic: Check queue size after submitting tasks
console.log("Queue size after tasks submitted:", queue.getQueueSize());
//Diagnostic: Clear the queue
queue.clearQueue();
console.log("Queue size after clearing:", queue.getQueueSize());
Add your comment