class MlgTest extends MultiGen { public function aggregateTraffic() { $this->loadAcctTraffData(); $this->loadUserTraffData(); if ($this->ishimuraFlag) { $this->loadUserCash(); } $currentTimestamp = time(); $dateTo = date("Y-m-d H:i:s", $currentTimestamp); $lastRunTimestamp = $this->cache->get('MLG_TRAFFLASTRUN', 2592000); if (empty($lastRunTimestamp)) { $lastRunTimestamp = $currentTimestamp - 3600; } $dateFrom = date("Y-m-d H:i:s", $lastRunTimestamp); $allUserNames = $this->getAllUserNames(); // $this->cache->set('MLG_TRAFFLASTRUN', $currentTimestamp, 2592000); $query = "SELECT `username`,`acctoutputoctets`,`acctinputoctets`,`acctupdatetime`,`acctstoptime`,`acctsessionid` from `" . self::NAS_ACCT . "`" . " WHERE `acctupdatetime` BETWEEN '" . $dateFrom . "' AND '" . $dateTo . "' AND `username`='48a9.8a35.4405' ORDER BY `radacctid` DESC;"; show_info('Query: ' . $query); $all = simple_queryall($query); if (!empty($all)) { show_success('Ща буде обробка ось стількох сесій: ' . sizeof($all)); foreach ($all as $io => $each) { $loginDetect = $this->getUserLogin($each['username'], $allUserNames); if (!empty($loginDetect)) { show_success('Для сесії ' . $each['acctsessionid'] . ' вгадано логін ' . $loginDetect); $activity = (empty($each['acctstoptime'])) ? 1 : 0; show_info('Стан активності сесії ' . $each['acctsessionid'] . ' наразі ' . $activity); if (isset($this->currentTraffic[$loginDetect])) { $this->currentTraffic[$loginDetect]['down'] += $each['acctoutputoctets']; $this->currentTraffic[$loginDetect]['up'] += $each['acctinputoctets']; } else { $this->currentTraffic[$loginDetect]['down'] = $each['acctoutputoctets']; $this->currentTraffic[$loginDetect]['up'] = $each['acctinputoctets']; $this->currentTraffic[$loginDetect]['activity'] = $activity; } } else { show_warning('Для сесії ' . $each['acctsessionid'] . ' логін ніхуя не вгадано для юзернейму ' . $each['username']); } } if (!empty($this->currentTraffic)) { foreach ($this->currentTraffic as $changedLogin => $currentTrafficData) { //preventing first run issues if ($this->ishimuraFlag) { if (!isset($this->usersTraffic[$changedLogin])) { $this->usersTraffic[$changedLogin]['D0'] = 0; $this->usersTraffic[$changedLogin]['U0'] = 0; } } else { show_error('Ти шо кончєний? Ішимура вимкнена нахуй взагалі!'); } if (isset($this->usersTraffic[$changedLogin])) { $stgDownTraffic = $this->usersTraffic[$changedLogin]['D0']; $stgUpTraffic = $this->usersTraffic[$changedLogin]['U0']; if (isset($this->previousTraffic[$changedLogin])) { $previousDownTraffic = $this->previousTraffic[$changedLogin]['down']; $previousUpTraffic = $this->previousTraffic[$changedLogin]['up']; show_info('Попередній трафік користувача це типу ' . zb_TraffToGb($previousDownTraffic) . '/' . zb_TraffToGb($previousUpTraffic)); } else { $previousDownTraffic = 0; $previousUpTraffic = 0; show_warning('Попередній трафік користувача це типу ' . zb_TraffToGb($previousDownTraffic) . '/' . zb_TraffToGb($previousUpTraffic) . ' бо ніхуя раніше не було'); } $lastActivity = $currentTrafficData['activity']; $diffDownTraffic = $currentTrafficData['down'] - $previousDownTraffic; $diffUpTraffic = $currentTrafficData['up'] - $previousUpTraffic; show_info('Трафік користувача змінився на ' . $diffDownTraffic . '/' . $diffUpTraffic); $newDownTraffic = $stgDownTraffic + $diffDownTraffic; $newUpTraffic = $stgUpTraffic + $diffUpTraffic; show_info('Тепер новий трафік користувача це ' . zb_TraffToGb($newDownTraffic) . '/' . zb_TraffToGb($newUpTraffic)); if (($diffDownTraffic != 0) OR ( $diffUpTraffic != 0)) { // $this->saveTrafficData($changedLogin, $newDownTraffic, $newUpTraffic); $newPreviousDown = $previousDownTraffic + $diffDownTraffic; $newPreviousUp = $previousUpTraffic + $diffUpTraffic; // $this->savePreviousTraffic($changedLogin, $newPreviousDown, $newPreviousUp, $lastActivity); $this->logEvent('MULTIGEN TRAFFIC SAVE (' . $changedLogin . ') ' . $newDownTraffic . '/' . $newUpTraffic, 4); } else { show_warning(__('Трафік ніхуя не змінився для юзера ' . $changedLogin . '. Нічо в базу не пишем.')); } } else { show_warning('Немає даних про трафік в профілі, для користувача ' . $changedLogin); } } } else { show_warning('Даних про поточний трафік жодних користувачів немає, хуй зна де пропились'); } } else { show_error('Ніхуя в даних про сесії нема'); } } } $mt = new MlgTest(); $mt->aggregateTraffic();