1. /**
  2. * Task Queue Integrity & Rate Limiting Diagnostics
  3. *
  4. * Provides functions to verify task queue integrity and enforce rate limits.
  5. */
  6. class TaskQueue {
  7. constructor(maxRequestsPerSecond = 10) {
  8. this.queue = [];
  9. this.rateLimit = maxRequestsPerSecond;
  10. this.lastRequestTime = 0;
  11. }
  12. /**
  13. * Adds a task to the queue. Rate limits are enforced.
  14. * @param {Function} task The task to execute.
  15. * @returns {Promise<any>} A promise that resolves with the task result.
  16. */
  17. addTask(task) {
  18. return new Promise((resolve, reject) => {
  19. const now = Date.now();
  20. // Rate limiting check
  21. if (now - this.lastRequestTime < 1000 / this.rateLimit) {
  22. // Rate limit exceeded. Reject the promise.
  23. reject(new Error("Rate limit exceeded."));
  24. return;
  25. }
  26. this.lastRequestTime = now;
  27. // Add task to queue (simulated)
  28. this.queue.push(task);
  29. // Execute task.
  30. task()
  31. .then(result => {
  32. resolve(result);
  33. })
  34. .catch(error => {
  35. reject(error);
  36. });
  37. });
  38. }
  39. /**
  40. * Clears the queue. Useful for testing/diagnostics.
  41. */
  42. clearQueue() {
  43. this.queue = [];
  44. this.lastRequestTime = 0;
  45. }
  46. /**
  47. * Gets the current size of the queue.
  48. * @returns {number}
  49. */
  50. getQueueSize() {
  51. return this.queue.length;
  52. }
  53. }
  54. /**
  55. * Example Usage & Diagnostics
  56. */
  57. // Simulate tasks
  58. function task1() {
  59. return new Promise(resolve => setTimeout(() => {
  60. console.log("Task 1 completed");
  61. resolve("Result 1");
  62. }, 500));
  63. }
  64. function task2() {
  65. return new Promise(resolve => setTimeout(() => {
  66. console.log("Task 2 completed");
  67. resolve("Result 2");
  68. }, 200));
  69. }
  70. function task3() {
  71. return new Promise(resolve => setTimeout(() => {
  72. console.log("Task 3 completed");
  73. resolve("Result 3");
  74. }, 800));
  75. }
  76. // Create a task queue with a rate limit of 5 requests per second
  77. const queue = new TaskQueue(5);
  78. // Simulate submitting tasks
  79. async function simulateTasks() {
  80. for (let i = 0; i < 20; i++) {
  81. try {
  82. await queue.addTask(() => task1()); // Simulate submitting tasks
  83. } catch (error) {
  84. console.error("Task failed:", error.message);
  85. }
  86. }
  87. }
  88. simulateTasks();
  89. // Diagnostic: Check queue size after submitting tasks
  90. console.log("Queue size after tasks submitted:", queue.getQueueSize());
  91. //Diagnostic: Clear the queue
  92. queue.clearQueue();
  93. console.log("Queue size after clearing:", queue.getQueueSize());

Add your comment