private static function buildTimes() { $ranges = OnlineRange::getRanges(); foreach ($ranges as $range) { DailyUserUptimeAnalyzer::addRangeTime($range); } }
/** * Prepare the analyzer * @return array An array with all users with the usernames and the ips set */ private static function prepare() { $users = array(); $ranges = OnlineRange::getRanges(); foreach ($ranges as $range) { $client_id = $range->user->client_id; $username = $range->user->username; $ip = UserCollapser::preprocessIP($range->ip); $time = Utils::getTimestamp($range->end) - Utils::getTimestamp($range->start); if (!isset($users[$client_id])) { $users[$client_id] = array("client_id" => $client_id, "ips" => array(), "usernames" => array(), "time" => 0); } if (!isset($users[$client_id]['ips'][$ip])) { $users[$client_id]['ips'][$ip] = 0; } $users[$client_id]['ips'][$ip] += $time; if (!isset($users[$client_id]['usernames'][$username])) { $users[$client_id]['usernames'][$username] = 0; } $users[$client_id]['usernames'][$username] += $time; $users[$client_id]['time'] += $time; UserCollapser::$unionFind[$client_id] = $client_id; } return $users; }
public static function runAnalysis() { ProbableUsernameAnalyzer::$USE_LAST_N = Config::get("analyzers.ProbableUsernameAnalyzer.use_last_n", ProbableUsernameAnalyzer::USE_LAST_N); $ranges = OnlineRange::getRanges(); ProbableUsernameAnalyzer::splitRanges($ranges); ProbableUsernameAnalyzer::computeUsernames(); ProbableUsernameAnalyzer::saveUsernames(ProbableUsernameAnalyzer::$usernames); }
public static function runAnalysis() { DailyAnalyzer::$numOfWeeks = DailyAnalyzer::getNumOfWeek(); $startTime = microtime(true); $ranges = DailyAnalyzer::expandRanges(OnlineRange::getRanges()); $endTime = microtime(true); Logger::log(" Expand ranges -> ", $endTime - $startTime); usort($ranges, "OnlineRange::cmpByStart"); $grid = DailyAnalyzer::divideRanges($ranges); $averages = array(); foreach ($grid as $i => $cell) { $averages[$i] = DailyAnalyzer::getAvgNumber($cell); } DailyAnalyzer::saveAverages($averages); }
public static function runAnalysis() { DailyAnalyzer2::$fenwickTree = new FenwickTree(DailyAnalyzer2::NUM_SEC); $ranges = OnlineRange::getRanges(); $startTime = microtime(true); foreach ($ranges as $range) { DailyAnalyzer2::processRange($range); } $endTime = microtime(true); Logger::log(" Process ranges -> ", $endTime - $startTime); $startTime = microtime(true); $averages = DailyAnalyzer2::getAverages(); $endTime = microtime(true); Logger::log(" Get averages -> ", $endTime - $startTime); DailyAnalyzer2::saveAverages($averages); }
/** * Run all the analyzers * @param bool|false $fastOnly If it is set to true only the fast analyzers are runned */ public static function runAnalysis($fastOnly = false) { $analyzers = MainAnalyzer::loadAnalyzers($fastOnly); $analysisStart = microtime(true); Logger::log("Preparing ranges:"); OnlineRange::getRanges(); foreach ($analyzers as $analyzer) { Logger::log("Avviato {$analyzer}"); $startTime = microtime(true); $analyzer::runAnalysis(); $endTime = microtime(true); Logger::log(" Tempo impiegato:", $endTime - $startTime); } $analysisEnd = microtime(true); Logger::log("Fine analisi. Tempo impiegato:", $analysisEnd - $analysisStart); }
private static function getStreaks($client_id, $userDays) { if (count($userDays) == 0) { return array("length" => 0, "startDate" => ""); } $longestStreak = 1; $longestStartDate = new DateTime($userDays[0]['date']); $lastDate = $longestStartDate; $streak = 1; $startDate = $longestStartDate; foreach ($userDays as $row) { $date = new DateTime($row['date']); $diff = intval($lastDate->diff($date)->format('%a')); if ($diff == 1) { $streak++; if ($streak > $longestStreak) { $longestStreak = $streak; $longestStartDate = $startDate; } } else { $startDate = $date; $streak = 1; } $lastDate = $date; } $today = $lastDate->format('Y-m-d') == (new DateTime())->format('Y-m-d'); $online = isset(OnlineRange::getOnlineRanges()[$client_id]); $yesterday = $lastDate >= (new DateTime())->modify("-1 day")->setTime(0, 0, 0); if ($yesterday && !$today && $online) { $streak++; } if (!$yesterday && ($today || $online)) { $streak = 1; $startDate = new DateTime(); } if (!$yesterday && !$today && !$online) { $streak = 0; $startDate = new DateTime(); } if ($startDate == $longestStartDate) { $longestStreak = $streak; } return array("longest" => $longestStreak, "startLongest" => $longestStartDate, "current" => $streak, "startCurrent" => $startDate); }
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()); }
public static function runAnalysis() { DailyAnalyzer3::$TIME_SCALE = Config::get("analyzers.DailyAnalyzer3.time_scale", DailyAnalyzer3::TIME_SCALE); DailyAnalyzer3::getBounds(); DailyAnalyzer3::$fenwickTree = new FenwickTree(DailyAnalyzer3::$timeSpan + 10); $ranges = OnlineRange::getRanges(); $startTime = microtime(true); foreach ($ranges as $range) { DailyAnalyzer3::processRange($range); } $endTime = microtime(true); Logger::log(" Process ranges -> ", $endTime - $startTime); $startTime = microtime(true); $averages = DailyAnalyzer3::getAverages(); $endTime = microtime(true); Logger::log(" Get averages -> ", $endTime - $startTime); $startTime = microtime(true); DailyAnalyzer3::saveAverages($averages); $endTime = microtime(true); Logger::log(" Save averages -> ", $endTime - $startTime); }
public static function getUptimeScoreboard($limit = 50, $offset = 0) { $sql = "SELECT user_collapser_results.client_id2 as client_id, probable_username.username, SUM(uptime) as total_uptime\n FROM uptime_results\n JOIN user_collapser_results ON uptime_results.client_id = user_collapser_results.client_id1\n JOIN probable_username ON user_collapser_results.client_id2 = probable_username.client_id\n GROUP BY user_collapser_results.client_id2\n ORDER BY total_uptime DESC\n LIMIT :limit OFFSET :offset"; $online = OnlineRange::getOnlineRanges(); $query = DB::$DB->prepare($sql); $query->bindParam('limit', $limit); $query->bindParam('offset', $offset); $query->execute(); $scores = $query->fetchAll(PDO::FETCH_ASSOC); $now = (new DateTime())->getTimestamp(); foreach ($scores as $i => $score) { $client_id = $score['client_id']; $scores[$i]['online'] = isset($online[$client_id]); if ($scores[$i]['online']) { $scores[$i]['onlineSince'] = $online[$client_id]->start; $scores[$i]['onlineFor'] = $now - $online[$client_id]->start->getTimestamp(); } else { $scores[$i]['onlineSince'] = ""; $scores[$i]['onlineFor'] = 0; } $scores[$i]['uptime'] = $score['total_uptime'] + $scores[$i]['onlineFor']; } return $scores; }
public static function runAnalysis() { $ranges = OnlineRange::getRanges(); $times = UsernameUptimeAnalyzer::computeTimes($ranges); UsernameUptimeAnalyzer::saveTimes($times); }
<?php require_once __DIR__ . '/../API.php'; API::init(); $client_id = API::getClientId(); $username = ProbableUsernameVisualizer::getProbableUsername($client_id); $online = OnlineRange::getOnlineRanges(); $is_online = isset($online[$client_id]); if ($is_online) { $online_since = $online[$client_id]->start; $online_for = (new DateTime())->getTimestamp() - $online_since->getTimestamp(); } else { $online_since = null; $online_for = 0; } $info = ["client_id" => $client_id, "username" => $username, "online" => $is_online, "online_since" => $online_since, "online_for" => $online_for]; API::printJSON($info);
private static function saveRanges($ranges) { if (count($ranges) > Config::get("max_per_insert", 500)) { $chunks = array_chunk($ranges, Config::get("max_per_insert", 500)); foreach ($chunks as $chunk) { OnlineRange::saveRanges($chunk); } } else { $sql = "INSERT IGNORE INTO ranges (connected_id, disconnected_id) VALUES "; $chunks = array_map("OnlineRange::getInsertString", $ranges); $sql .= implode(', ', $chunks); DB::$DB->query($sql); } }