diff --git a/lib/Froxlor/Api/Commands/Traffic.php b/lib/Froxlor/Api/Commands/Traffic.php index 7212e3c1..caa5c670 100644 --- a/lib/Froxlor/Api/Commands/Traffic.php +++ b/lib/Froxlor/Api/Commands/Traffic.php @@ -60,6 +60,10 @@ class Traffic extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEn * optional, default empty * @param int $day * optional, default empty + * @param int $date_from + * optional timestamp, default empty, if specified, $year, $month and $day will be ignored + * @param int $date_until + * optional timestamp, default empty, if specified, $year, $month and $day will be ignored * @param bool $customer_traffic * optional, admin-only, whether to output ones own traffic or all of ones customers, default is 0 (false) * @param int $customerid @@ -76,10 +80,29 @@ class Traffic extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEn $year = $this->getParam('year', true, ""); $month = $this->getParam('month', true, ""); $day = $this->getParam('day', true, ""); + $date_from = $this->getParam('date_from', true, - 1); + $date_until = $this->getParam('date_until', true, - 1); $customer_traffic = $this->getBoolParam('customer_traffic', true, 0); $customer_ids = $this->getAllowedCustomerIds(); $result = array(); $params = array(); + + // validate parameters + if ($date_from >= 0 || $date_until >= 0) { + $year = ""; + $month = ""; + $day = ""; + if ($date_from == $date_until) { + $date_until = -1; + } + if ($date_from >= 0 && $date_until >= 0 && $date_until < $date_from) { + // switch + $temp_ts = $date_from; + $date_from = $date_until; + $date_until = $temp_ts; + } + } + // check for year/month/day $where_str = ""; if (! empty($year) && is_numeric($year)) { @@ -94,6 +117,17 @@ class Traffic extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEn $where_str .= " AND `day` = :day"; $params['day'] = $day; } + if ($date_from >= 0 && $date_until >= 0) { + $where_str .= " AND `stamp` BETWEEN :df AND :du"; + $params['df'] = $date_from; + $params['du'] = $date_until; + } elseif ($date_from >= 0 && $date_until < 0) { + $where_str .= " AND `stamp` > :df"; + $params['df'] = $date_from; + } elseif ($date_from < 0 && $date_until >= 0) { + $where_str .= " AND `stamp` < :du"; + $params['du'] = $date_until; + } if (! $this->isAdmin() || ($this->isAdmin() && $customer_traffic)) { $result_stmt = Database::prepare(" diff --git a/lib/Froxlor/Cron/Traffic/TrafficCron.php b/lib/Froxlor/Cron/Traffic/TrafficCron.php index be5b0d57..ae26c572 100644 --- a/lib/Froxlor/Cron/Traffic/TrafficCron.php +++ b/lib/Froxlor/Cron/Traffic/TrafficCron.php @@ -163,6 +163,13 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron $result_stmt = Database::query("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` ORDER BY `customerid` ASC"); + $currentDate = date("Y-m-d"); + + $current_stamp = time(); + $current_year = date('Y', $current_stamp); + $current_month = date('m', $current_stamp); + $current_day = date('d', $current_stamp); + while ($row = $result_stmt->fetch(\PDO::FETCH_ASSOC)) { /** * HTTP-Traffic @@ -208,7 +215,7 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron // will iterate through all customer-domains and the awstats-configs // know the logfile-name, #246 if (Settings::Get('system.awstats_enabled') == '1') { - $httptraffic += floatval(self::callAwstatsGetTraffic($row['customerid'], $row['documentroot'] . '/awstats/', $domainlist[$row['customerid']])); + $httptraffic += floatval(self::callAwstatsGetTraffic($row['customerid'], $row['documentroot'] . '/awstats/', $domainlist[$row['customerid']]), $current_stamp); } else { $httptraffic += floatval(self::callWebalizerGetTraffic($row['loginname'], $row['documentroot'] . '/webalizer/', $caption, $domainlist[$row['customerid']])); } @@ -250,8 +257,6 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron if (Settings::Get("system.mailtraffic_enabled")) { \Froxlor\FroxlorLogger::getInstanceOf()->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_INFO, 'mail traffic usage for ' . $row['loginname'] . " started..."); - $currentDate = date("Y-m-d"); - $domains_stmt = Database::prepare("SELECT domain FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid` = :cid"); Database::pexecute($domains_stmt, array( "cid" => $row['customerid'] @@ -312,10 +317,10 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron $ins_data = array( 'customerid' => $row['customerid'], - 'year' => date('Y', time()), - 'month' => date('m', time()), - 'day' => date('d', time()), - 'stamp' => time(), + 'year' => $current_year, + 'month' => $current_month, + 'day' => $current_day, + 'stamp' => $current_stamp, 'http' => $current_traffic['http'], 'ftp_up' => $current_traffic['ftp_up'], 'ftp_down' => $current_traffic['ftp_down'], @@ -340,8 +345,8 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron FROM `" . TABLE_PANEL_TRAFFIC . "` WHERE `year` = :year AND `month` = :month AND `customerid` = :customerid "); $sum_month_traffic = Database::pexecute_first($sum_month_traffic_stmt, array( - 'year' => date('Y', time()), - 'month' => date('m', time()), + 'year' => $current_year, + 'month' => $current_month, 'customerid' => $row['customerid'] )); $sum_month_traffic['all'] = $sum_month_traffic['http'] + $sum_month_traffic['ftp_up'] + $sum_month_traffic['ftp_down'] + $sum_month_traffic['mail']; @@ -425,10 +430,10 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron $ins_data = array( 'customerid' => $row['customerid'], - 'year' => date('Y', time()), - 'month' => date('m', time()), - 'day' => date('d', time()), - 'stamp' => time(), + 'year' => $current_year, + 'month' => $current_month, + 'day' => $current_day, + 'stamp' => $current_stamp, 'webspace' => $current_diskspace['webspace'], 'mail' => $current_diskspace['mail'], 'mysql' => $current_diskspace['mysql'] @@ -534,10 +539,10 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron $ins_data = array( 'adminid' => $row['adminid'], - 'year' => date('Y', time()), - 'month' => date('m', time()), - 'day' => date('d', time()), - 'stamp' => time(), + 'year' => $current_year, + 'month' => $current_month, + 'day' => $current_day, + 'stamp' => $current_stamp, 'http' => $admin_traffic[$row['adminid']]['http'], 'ftp_up' => $admin_traffic[$row['adminid']]['ftp_up'], 'ftp_down' => $admin_traffic[$row['adminid']]['ftp_down'], @@ -734,7 +739,7 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron return; } - private static function callAwstatsGetTraffic($customerid, $outputdir, $usersdomainlist) + private static function callAwstatsGetTraffic($customerid, $outputdir, $usersdomainlist, $current_stamp) { $returnval = 0; @@ -766,8 +771,8 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron "); $result_data = array( 'customerid' => $customerid, - 'year' => date('Y', time()), - 'month' => date('m', time()) + 'year' => date('Y', $current_stamp), + 'month' => date('m', $current_stamp) ); $result = Database::pexecute_first($result_stmt, $result_data);