'`port`', 'out' => '`out` desc', 'in' => '`in` desc' ); $queryGetTraf = "select sql_calc_found_rows dstPort as port, pId as proto, sum(inBytes) as `in`, sum(outBytes) as `out` from $tabName where date >= '" . date('Y-m-d', $beginDate) ."' && date < '" . date('Y-m-d', $endDate) . "' && srcIp = '" . USER . "' && dstIp = '" . SERVER . "' group by proto, port order by " . $queryTailSort[SORT_CMP]; /* функция вставки данных в массив с данными о трафике */ function insert_data(&$array, &$val) { $array[] = $val; } $numRows = 0; $dataTraf = data_traf_fill('insert_data', $queryGetTraf, $perPage, $page, $numRows); /* * Сформируем линк для картинки суммарного трафика. */ $dateArray = array(); $imgDataOut = array(); $imgDataIn = array(); for ($i = 0; $i < PERIOD; $i++) { $dateArray[$i] = PERIOD_DAY ? date('Y-m-d H:i:s', mktime(date('H', $beginDate) + $i, 0, 0, date('m', $beginDate), date('d', $beginDate), date('Y', $beginDate))) : date('Y-m-d', mktime(0, 0, 0, date('m', $beginDate), date('d', $beginDate) + $i, date('Y', $beginDate))); $imgDataOut[$i] = $imgDataIn[$i] = 0; } /* сформируем запрос который возвратит количество трафика за заданные периоды */ $query = 'select case '; for ($i = 0; isset($dateArray[$i]); $i++) { $tmpDate = $dateArray[$i]; $query .= (PERIOD_DAY) ? "when date >= '$tmpDate' && date < adddate('$tmpDate', interval 1 hour) then $i " : "when date >= '$tmpDate' && date < adddate('$tmpDate', interval 1 day) then $i "; } $query .= "end as `period`, sum(inBytes) as `in`, sum(outBytes) as `out` from $tabName "; $query .= (PERIOD_DAY) ? "where date >= '${dateArray[0]}' && date < adddate('${dateArray[0]}', interval 1 day) " : "where date >= '${dateArray[0]}' && date < adddate('${dateArray[0]}', interval " . PERIOD . ' day) '; $query .= "&& srcIp = '" . USER . "' && dstIp = '" . SERVER . "' group by `period` order by `period`"; /* получим данные о трафике */ $result = my_mysql_query($query); while ($line = mysql_fetch_assoc($result)) { $i = $line['period']; $imgDataIn[$i] = $line['in']; $imgDataOut[$i] = $line['out']; } mysql_free_result($result); /* сформируем масив дней месяцев */ $xLabel = array(); if (PERIOD_DAY) { for ($i = 1; $i <= PERIOD; $i++) $xLabel[] = $i; } else { $t = $minDateStorage; for ($i = 0; $i < PERIOD; $i++) $xLabel[] = date('j', mktime(0, 0, 0, date('m', $t), date('d', $t) + $i, date('Y', $t))); } /* сформируем линк для графика суммарного трафика */ $imgStatistic = './graph.php?graph=statgraph&leg=' . urlencode('Outgoing') . '|' . urlencode('Incoming') . '&xt=' . urlencode(PERIOD_DAY ? 'Hours' : 'Days') . '&xl=' . implode('|', $xLabel) . '&data=' . implode(',', $imgDataOut) . '|' . implode(',', $imgDataIn); /* формирует ссылку для линков сортировки данных */ function make_sort_link($val, $sort) { global $page, $perPage; if ($sort != SORT_CMP) { $link = '$val"; } else { $link = $val; } return $link; } /* формирует ссылку на WEB-ресурс, который предоставляет удаленный сервер */ function make_service_link($type, $server, $portStr) { $str = << // $portStr EOF; return $str; } /** * Отобразим страницу. */ /* Строковое представление отбражаемого периода */ $temp = getdate($beginDate); $strPeriod = make_month($temp['year'], $temp['mon'], $temp['mday']); if (!PERIOD_DAY) { $temp = getdate(mktime(0, 0, 0, date('m', $endDate), date('d', $endDate) - 1, date('Y', $endDate))); $strPeriod .= ' - ' . make_month($temp['year'], $temp['mon'], $temp['mday']); } /* заголовок страницы */ $title = "Статистика за $strPeriod"; print_html_head("$title: Хост " . USER_NAME . ', Сервер ' . SERVER_NAME . " - $prog_name $prog_version (" . ACC_NAME . ")", 'reverse_ip'); /* отобразим название продукта */ print_head(); /* отобразим графики содержащие статистику */ echo '
' . "\n"; echo '\n"; echo "\n"; echo '\n"; echo "\n"; echo '' . "\n"; echo '
'; print_login(); echo "

$title

Хост ' . USER_NAME . ', Сервер ' . make_span(SERVER_NAME, 'ajax-reverse_ip') . "

'; echo 'traffic statistics'; echo '
' . "\n"; print_full_line(); /* * Отобразим таблицу содержащую статистику. */ echo '
' . "\n"; /* навигация по статистике */ echo '\n"; /* разбиение на страницы */ $pageStr = make_string_link_page('./index.php?content=' . CONTENT . '&user=' . USER . '&server=' . SERVER . "&period_day=" . PERIOD_DAY . '&sort=' . SORT_CMP, $page, $perPage, $numRows); echo ''; print_data($pageStr, 'navigation', 'td', 4); echo "\n"; /* выбор дня месяца */ $t = $minDateStorage; echo '\n"; /* таблица с данными */ echo ''; print_data("Номер", "head0", "th"); print_data(make_sort_link("Протокол", "text"), "head1", "th"); print_data(make_sort_link("Отправлено", "out"), "head1", "th"); print_data(make_sort_link("Получено", "in"), "head1", "th"); echo '' . "\n"; $sumAllOut = $sumAllIn = 0; for ($i = 0, $count = $page * $perPage + 1; isset($dataTraf[$i]); $i++, $count++) { $linkFlags = 0; list($port, $proto, $out, $in) = array($dataTraf[$i]['port'], $dataTraf[$i]['proto'], $dataTraf[$i]['out'], $dataTraf[$i]['in']); $sumAllOut += $out; $sumAllIn += $in; /* * Поле 'Протокол' имеет следующие форматы: * udp:53 (domain) * tcp:80 (http) * icmp */ $strBuff = $nameProto[$proto]; if ($port) $strBuff .= ":$port"; if ($port && ($proto == $idProto['tcp'] || $proto == $idProto['udp'])) { $serviceName = getservbyport($port, $nameProto[$proto]); if ($serviceName) $strBuff .= " ($serviceName)"; } if ($proto == $idProto['tcp']) { if ($port == 21) $strBuff = make_service_link('ftp', SERVER_NAME, $strBuff); else if ($port == 80) $strBuff = make_service_link('http', SERVER_NAME, $strBuff); else if ($port == 443) $strBuff = make_service_link('https', SERVER_NAME, $strBuff); } echo ''; print_data($count, 'data0'); print_data($strBuff, 'data1'); print_data(val_trun($out), 'data2'); print_data(val_trun($in), 'data2'); echo "\n"; } echo ''; echo ''; print_data("Итого:", "head4", "th"); print_data(val_trun($sumAllOut), "head3"); print_data(val_trun($sumAllIn), "head3"); echo '' . "\n"; /* разбиение на страницы */ echo ''; print_data($pageStr, 'navigation', 'td', 4); echo "\n"; echo '
'; for ($i = 1; $i <= STORAGE_CURRENT_TRAF; $i++) { $tempDate = mktime(0, 0, 0, date('m', $t), date('d', $t) + ($i - 1), date('Y', $t)); if ($i != PERIOD_DAY) { echo '" . date('j', $tempDate) . ' '; } else { echo '[' . date('j', $tempDate) . '] '; } } if (PERIOD_DAY) { echo 'все"; } else { echo "[все]"; } echo "
' . "\n"; print_full_line(); /* отобразим информацию о программе */ print_info(); print_html_tail(); ?>