'Outgoing traffic (udp)', 'udpIn' => 'Incoming traffic (udp)', 'tcpOut' => 'Outgoing traffic (tcp)', 'tcpIn' => 'Incoming traffic (tcp)', 'allOut' => 'Outgoing traffic (total)', 'allIn' => 'Incoming traffic (total)' ); /* Определим флаг сортировки. */ if (isset($_GET['sort'])) $temp = in_array($_GET['sort'], $avlSortCmp) ? $_GET['sort'] : 'allIn'; else $temp = 'allIn'; define('SORT_CMP', $temp); /* Определим запрашиваемый месяц */ define('PERIOD', get_period()); /* * Запомним день по которому была предыдущая статистика. * Это нужно для формирования линка в строке навигации. */ define('PERIOD_DAY', get_period_day()); /* Сформируем даты, между которыми будет формироваться статистика. */ define('BEGIN_DATE', get_begin_date(PERIOD)); define('END_DATE', get_end_date(BEGIN_DATE)); /* Сформируем массив дат между которыми будет формироваться статистика */ list($y, $m, $d) = split('-', BEGIN_DATE); $dateBegin = mktime(0, 0, 0, $m, $d, $y); list($y, $m, $d) = split('-', END_DATE); $dateEnd = mktime(0, 0, 0, $m, $d, $y); $dateDayArray = array(); do { $dateDayArray[] = date("Y-m-d", $dateBegin); /* прибавим один день */ $dateBegin += 60 * 60 * 24; } while ($dateBegin < $dateEnd); /* количество запросов к базе */ $queryCount = 0; function my_mysql_query($query) { global $queryCount; $queryCount++; $result = mysql_query($query) or message_die("Query failed: " . mysql_error()); return $result; } /* хранят всю сводную статистику */ $dataHourTraf = array(); $sumDayData = array(); $sumHourData = array(); /* * Запрос устанавливает переменную '@proto' используемую в дальнейших запросах * для идентификации протокола, по которому идет запрос. * Внимание, после вызова команды musql_close, данная переменная * больше не доступна. */ $querySetProto = 'select @proto := id from proto where name = "%PROTO%"'; /* * Запросы возвращающие количество прошедшего трафика за заданный период * времени для разных условий сортировки. */ /* шаблон замены для запросов */ $ptrnDayTraf = array('/%BEGIN_DATE%/', '/%END_DATE%/'); /* запрос для 'udpOut' и 'tcpOut' */ $queryDayPeriodOut = ' select ifnull(sum(psize), 0) as psizeSum from traffic where (pId = @proto) && (srcPort = 0) && (date >= "%BEGIN_DATE%" && date < "%END_DATE%")'; /* запросы для 'udpIn' и 'tcpIn' */ $queryDayPeriodIn = ' select ifnull(sum(psize), 0) as psizeSum from traffic where (pId = @proto) && (dstPort = 0) && (date >= "%BEGIN_DATE%" && date < "%END_DATE%")'; /* запрос для 'allOut' */ $queryDayPeriodAllOut = ' select ifnull(sum(psize), 0) as psizeSum from traffic where (srcPort = 0) && (date >= "%BEGIN_DATE%" && date < "%END_DATE%")'; /* запрос для 'allIn' */ $queryDayPeriodAllIn = ' select ifnull(sum(psize), 0) as psizeSum from traffic where (dstPort = 0) && (date >= "%BEGIN_DATE%" && date < "%END_DATE%")'; switch (SORT_CMP) { case "udpOut": case "tcpOut": $queryDayPeriod = $queryDayPeriodOut; break; case "udpIn": case "tcpIn": $queryDayPeriod = $queryDayPeriodIn; break; case "allOut": $queryDayPeriod = $queryDayPeriodAllOut; break; case "allIn": default: $queryDayPeriod = $queryDayPeriodAllIn; break; } /* установим в MySQL переменную @proto для запросов использующих протокол */ if (!strcmp(SORT_CMP, "udpOut") || !strcmp(SORT_CMP, "udpIn")) { $queryTemp = preg_replace('/%PROTO%/', 'udp', $querySetProto); $result = my_mysql_query($queryTemp); mysql_free_result($result); } elseif (!strcmp(SORT_CMP, "tcpOut") || !strcmp(SORT_CMP, "tcpIn")) { $queryTemp = preg_replace('/%PROTO%/', 'tcp', $querySetProto); $result = my_mysql_query($queryTemp); mysql_free_result($result); } /* Получим статистику по дням за месяц */ for ($i = 0; $i < 24; $i++) $sumHourData[$i] = 0; /* Получим статистику по часам за день */ for ($i = 0; isset($dateDayArray[$i]); $i++) { list($y, $m, $d) = split('-', $dateDayArray[$i]); $dateBegin = mktime(0, 0, 0, $m, $d, $y); $sumDayData[$i] = 0; for ($j = 0; $j < 24; $j++) { $tempBegin = date("Y-m-d H:i:s", $dateBegin + $j * 60 * 60); $tempEnd = date("Y-m-d H:i:s", $dateBegin + ($j + 1) * 60 * 60); $replacements = array($tempBegin, $tempEnd); $queryTemp = preg_replace($ptrnDayTraf, $replacements, $queryDayPeriod); $result = my_mysql_query($queryTemp); $line = mysql_fetch_row($result); $dataHourTraf[$i][] = $line[0]; $sumDayData[$i] += $line[0]; $sumHourData[$j] += $line[0]; mysql_free_result($result); } } /* сформируем линки для графиков */ $imgDay = './graph.php?graph=timegraph&title=' . urlencode($arrImgTimeTitle[SORT_CMP]) . '&xt=' . urlencode('Days') . '&data=' . implode(',', $sumDayData); $imgHour = './graph.php?graph=timegraph&title=' . urlencode($arrImgTimeTitle[SORT_CMP]) . '&xt=' . urlencode('Hours') . '&data=' . implode(',', $sumHourData); /* формирует ссылку для сортировки данных */ function make_sort_link($val, $sort) { if ($sort != SORT_CMP) { $link = '$val"; } else { $link = $val; } return $link; } /** * Отобразим страницу. */ list($year, $month) = split('-', BEGIN_DATE); $day = PERIOD_DAY; $title = 'Сводная статистика за ' . make_month($year, $month); print_html_head($title); /* отобразим название продукта */ print_head(); /* отобразим график содержащий статистику */ echo "
\n"; echo '\n"; echo '\n"; echo "\n"; echo "\n"; echo "\n"; echo "
'; print_login(); echo "

Сводная статистика за ' . make_month($year, $month) . "

\n"; print_full_line(); /* отобразим таблицу содержащую статистику */ echo "
\n"; if (SESS_TYPE === 'admin') { echo '\n"; } echo ''; print_data("", "page"); print_data("udp трафик", "head2", "th", 8); print_data("tcp трафик", "head2", "th", 8); print_data("суммарный трафик", "head2", "th", 8); print_data("", "page"); echo "\n"; echo ''; print_data("", "page"); print_data(make_sort_link("Отправлено", "udpOut"), "head1", "th", 4); print_data(make_sort_link("Получено", "udpIn"), "head1", "th", 4); print_data(make_sort_link("Отправлено", "tcpOut"), "head1", "th", 4); print_data(make_sort_link("Получено", "tcpIn"), "head1", "th", 4); print_data(make_sort_link("Отправлено", "allOut"), "head1", "th", 4); print_data(make_sort_link("Получено", "allIn"), "head1", "th", 4); print_data("", "page"); echo "\n"; echo ''; print_data("Дата", "head0", "th"); for ($i = 1; $i <= 24; $i++) print_data($i, "head0"); print_data("Всего", "head0", "th"); echo "\n"; for ($i = 0; isset($dateDayArray[$i]); $i++) { list($y, $m, $d) = split('-', $dateDayArray[$i]); $linkData = '' . date("d/m/Y", mktime(0, 0, 0, $m, $d, $y)) . ''; echo ''; print_data($linkData, "data0"); for ($j = 0; $j < 24; $j++) print_data(val_trun($dataHourTraf[$i][$j]), "data2"); print_data(val_trun($sumDayData[$i]), "head3"); echo "\n"; } echo ''; print_data("Итого:", "head4", "th"); $sumAll = 0; for ($i = 0; $i < 24; $i++) { $sumAll += $sumHourData[$i]; print_data(val_trun($sumHourData[$i]), "head3"); } print_data(val_trun($sumAll), "head3"); echo "\n"; echo "
\n"; print_full_line(); /* отобразим информацию о программе */ print_info($queryCount); print_html_tail(); ?>