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);
 }
Example #12
0
<?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);
     }
 }