1. <?php
  2. class QueueGrouper {
  3. private $queue_entries = []; // Array to store queue entries
  4. private $rate_limit = 10; // Maximum number of entries per interval
  5. private $interval = 1; // Time interval in seconds
  6. private $last_reset = 0; // Timestamp of last reset
  7. /**
  8. * Adds a queue entry to the queue.
  9. *
  10. * @param mixed $entry The queue entry.
  11. */
  12. public function addEntry(mixed $entry) {
  13. $this->queue_entries[] = $entry;
  14. }
  15. /**
  16. * Gets grouped entries based on rate limiting.
  17. *
  18. * @return array An array of grouped entries.
  19. */
  20. public function getGroupedEntries(): array {
  21. $current_time = time();
  22. // Reset rate limit if interval has passed
  23. if ($current_time - $this->last_reset >= $this->interval) {
  24. $this->queue_entries = []; // Clear the queue
  25. $this->last_reset = $current_time;
  26. }
  27. $grouped_entries = [];
  28. $current_group = [];
  29. $count = 0;
  30. foreach ($this->queue_entries as $entry) {
  31. if ($count < $this->rate_limit) {
  32. $current_group[] = $entry;
  33. $count++;
  34. } else {
  35. $grouped_entries[] = $current_group; // Add the current group
  36. $current_group = [$entry]; // Start a new group
  37. $count = 1;
  38. }
  39. }
  40. if (!empty($current_group)) {
  41. $grouped_entries[] = $current_group; // Add the last group
  42. }
  43. $this->queue_entries = []; // Clear the queue after processing
  44. return $grouped_entries;
  45. }
  46. /**
  47. * Resets the rate limit.
  48. */
  49. public function resetRateLimit() {
  50. $this->last_reset = time();
  51. }
  52. }
  53. ?>

Add your comment