private static function getAvgNumber($ranges) { $timeSlicer = new TimeSlicer(); $queue = new OnlineRangePriorityQueue(); $onlineCount = 0; foreach ($ranges as $range) { // disconnette gli utenti while ($queue->valid() && $queue->current()->end < $range->start) { $timeSlicer->addTimePerNumUser($onlineCount, $queue->current()->end); $onlineCount--; $queue->extract(); } // connette l'utente dell'intervallo $timeSlicer->addTimePerNumUser($onlineCount, $range->start); $queue->insert($range, $range->end); $onlineCount++; } // svuota la coda while ($queue->valid()) { $timeSlicer->addTimePerNumUser($onlineCount, $queue->current()->end); $onlineCount--; $queue->extract(); } return $timeSlicer->getAverageUsers(3600 * DailyAnalyzer::$numOfWeeks); }
public static function runAnalysis() { $ranges = OnlineRange::getRanges(); usort($ranges, "OnlineRange::cmpByStart"); $onlineCount = 0; $queue = new OnlineRangePriorityQueue(); $maxOnline = 0; $maxOnlineTime = null; $timeSlicer = new TimeSlicer(); $onlineUsers = array(); foreach ($ranges as $range) { // disconnette gli utenti while ($queue->valid() && $queue->current()->end < $range->start) { $timeSlicer->addTimePerNumUser($onlineCount, $queue->current()->end); $onlineUsers[$queue->current()->user->client_id]--; if ($onlineUsers[$queue->current()->user->client_id] == 0) { unset($onlineUsers[$queue->current()->user->client_id]); } $queue->extract(); } // connette l'utente dell'intervallo $timeSlicer->addTimePerNumUser($onlineCount, $range->start); $queue->insert($range, $range->end); if (!isset($onlineUsers[$range->user->client_id])) { $onlineUsers[$range->user->client_id] = 0; } $onlineUsers[$range->user->client_id]++; $onlineCount = max($onlineCount, count($onlineUsers)); if ($onlineCount > $maxOnline) { $maxOnline = $onlineCount; $maxOnlineTime = $range->start; } } // svuota la coda while ($queue->valid()) { $timeSlicer->addTimePerNumUser($onlineCount, $queue->current()->end); $queue->extract(); } Logger::log(" Picco massimo di utenti", $maxOnline, "il", $maxOnlineTime->format('Y-m-d H:i:s')); OnlineAnalyzer::saveMaxPeak($maxOnline, $maxOnlineTime); OnlineAnalyzer::saveTimePerNum($timeSlicer->getTimePerNumUser()); }