<?php
class QueueGrouper {
private $queue_entries = []; // Array to store queue entries
private $rate_limit = 10; // Maximum number of entries per interval
private $interval = 1; // Time interval in seconds
private $last_reset = 0; // Timestamp of last reset
/**
* Adds a queue entry to the queue.
*
* @param mixed $entry The queue entry.
*/
public function addEntry(mixed $entry) {
$this->queue_entries[] = $entry;
}
/**
* Gets grouped entries based on rate limiting.
*
* @return array An array of grouped entries.
*/
public function getGroupedEntries(): array {
$current_time = time();
// Reset rate limit if interval has passed
if ($current_time - $this->last_reset >= $this->interval) {
$this->queue_entries = []; // Clear the queue
$this->last_reset = $current_time;
}
$grouped_entries = [];
$current_group = [];
$count = 0;
foreach ($this->queue_entries as $entry) {
if ($count < $this->rate_limit) {
$current_group[] = $entry;
$count++;
} else {
$grouped_entries[] = $current_group; // Add the current group
$current_group = [$entry]; // Start a new group
$count = 1;
}
}
if (!empty($current_group)) {
$grouped_entries[] = $current_group; // Add the last group
}
$this->queue_entries = []; // Clear the queue after processing
return $grouped_entries;
}
/**
* Resets the rate limit.
*/
public function resetRateLimit() {
$this->last_reset = time();
}
}
?>
Add your comment