Перейти до

Отдельный сервер для "детальной статистики"


Рекомендованные сообщения

Опубліковано: (відредаговано)

Значит решение почту готово, только вот столкнулся с выводом результата.

 

Данные заносятся в mysql и непосредственно с консоли выводятся в нужном для меня виде (скриншот)

 

Пытаюсь сделать, чтобы результат выводился через вебморду. Все это состоит из двух страниц в первой: Сбор данных, ip, период времени (даты). :

 

<html>
    <head>
        <meta charset="utf8">
        <title>Страница статистики</title>
    </head>
        <body style="background-color: #83C5E9">
        <h1><p align="center">Статистика по трафику абонента</p></h1>
        <h3><p align="center">Введите необходимые данные</p></h3>
            <form align="center" action="request.php" method="post">
            <h4><p align="center">За какой год</p></h4>
            <h6><p align="center">(нужно для корректной генерации запроса sql)</p></h6>
            <center><select required name="year"></center>
            <option value="2016">2016</option>
            <option value="2017">2017</option>
            <option value="2018">2018</option>
            <option value="2019">2019</option>
            </select>
            <h4><p align="center">Выгрузить с</p></h4>
            <h5><p align="center">Формат даты: ГГГГ-ММ-ДД (2015-12-25)</p></h5>
            <center><input align="center" name="date-start" size="43" type="date" min="2016-01-01" max="2110-01-01"/></center>
            <h4><p align="center">Выгрузить по</p></h4>
            <h5><p align="center">Формат даты: ГГГГ-ММ-ДД (2015-12-25)</p></h5>
            <center><input align="center" name="date-end" size="43" type="date" min="2016-01-01" max="2110-01-01"/></center>
            <h4><p align="center">IP адрес пользователя</p></h4>
            <center><input align="center" name="ipadd" size="43" type="text"/></center>
            <center><input type="submit" value="Выгрузить" /></center>
            </form>
        </body>
</html>

 

(вот код)

 

А вот сама страница вывода результата:

 

<?php
//Получаем переменные из формы запроса
//Начало периода
$startdate = $_POST['date-start'];
//Конец периода
$enddate = $_POST['date-end'];
//Ip адрес юзера
$ip = $_POST['ipadd'];
//За какой год
$year = $_POST['year'];
//Данные для подключения к БД
$db_user= 'точно правильный user';
$db_host= 'реальный айпи';
$db_pass = 'пароль';
$db_base = 'имя базы';

//Пробуем подключится к БД
$link = mysqli_connect("$db_host","$db_user","$db_pass", "$db_base");
$link->set_charset("latin1");
if($link->connect_errno):
        die($link->connect_error);
endif;
$sql =$link->query("SELECT from_IP, date, SUM(bytes) AS 'bytes' FROM igb1_$year WHERE from_IP = '$ip' and DATE BETWEEN '$startdate' AND 'enddate' GROUP by DATE ORDER by date");
    while($result=$sql->fetch_row()):
            print "$result[from_IP] | $result[date]  |  $result[bytes]<br>";
    endwhile;
?>

 

 

После обработки запроса, ничего не выдает, ни ошибки не данных. Просто белая страница) В чем может быть проблема? Версия mysql 5.6. версия php - 5.3.28

post-39008-0-82537500-1460927356_thumb.png

Відредаговано Golthana
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

Все. Решение найдено. Вставил таблицу в код и вместо mysqli использовал mysql (ну это роль не играет в моем случае) Всем спасибо.

Відредаговано Golthana
Ссылка на сообщение
Поделиться на других сайтах
  • 6 months later...

Переделал модуль детальной статистики, принцип работы тот же, только данные берет из уделенной БД. Если кому надо, пишите.

Ссылка на сообщение
Поделиться на других сайтах

Переделал модуль детальной статистики, принцип работы тот же, только данные берет из уделенной БД. Если кому надо, пишите.

Вы не поведаете что с этой важнейшей подробной жизненной историей незнакомых людей потом можно делать ?

Ссылка на сообщение
Поделиться на других сайтах

Переделал модуль детальной статистики, принцип работы тот же, только данные берет из уделенной БД. Если кому надо, пишите.

 

Выкладывайте, кому надо - возьмет

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
Вы не поведаете что с этой важнейшей подробной жизненной историей незнакомых людей потом можно делать ?

 

Я уже писал. У нас предусмотрен перерасчет средств, если у человека не работает или очень криво работал интернет. Вот она и нужна разобраться. 

 

Доберусь до работы и выложу.

Відредаговано Golthana
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
<?php

 

if (cfr('PLDETAILS')) {

 

 

if (isset($_GET['username'])) {

ini_set("memory_limit", "512M");

include '/usr/local/stat/config.php';

$user = $_GET['username'];

        $userdata = zb_UserGetStargazerData($user);

$login=$userdata['IP'];

 

//query for global stat

 

function web_DSShow($user) {

global $login;

include '/usr/local/stat/config.php';

$gstat_query="SELECT DATE_FORMAT(stamp_inserted, '%Y-%m-%d') as day, ip_src, SUM(bytes) as bytes from acct where ip_src='" . $login . "' group by day";

$gstat=mysqli_query($connect,$gstat_query);

$gl_stat=array();

$cells = wf_TableCell(__('Day'));

$cells.= wf_TableCell(__('Downloaded'));

$rows = wf_TableRow($cells, 'row1');

while ($gstat_q=mysqli_fetch_assoc($gstat)) {

$gl_stat[]=$gstat_q;

}

if (!empty($gl_stat)) {

foreach ($gl_stat as $io => $eachstat) {

$dayLink = wf_Link('?module=pl_traffdetails&username=' . $user . '&day=' . $eachstat['day'], $eachstat['day']);

$cells = wf_TableCell($dayLink);

$cells.= wf_TableCell(stg_convert_size($eachstat['bytes']), '', '', 'sorttable_customkey="' . $eachstat['bytes'] . '"');

$rows.= wf_TableRow($cells, 'row3');

 

}

}  

$result=wf_TableBody($rows, '100%', 0, 'sortable');

return($result);

}

 

//For daily statistic

function web_DSShowDayStats($user, $day, $page = 0) {

global $login;

include '/usr/local/stat/config.php';

$page = vf($page);

$day = $_GET['day'];

//$day = vf($day);

$result='';

$det_stat=array();

$det_stat_query="SELECT stamp_inserted as startTime, stamp_updated as endTime, ip_dst as IP, dst_port as port, ip_proto, bytes FROM acct WHERE ip_src='" . $login . "' and stamp_inserted like '$day%'";

$det_stat_raw=mysqli_query($connect,$det_stat_query);

$cells = wf_TableCell(__('Session start'));

             $cells.= wf_TableCell(__('Session end'));

             $cells.= wf_TableCell(__('IP'));

$cells.= wf_TableCell(__('port'));

$cells.= wf_TableCell(__('protocol'));

$cells.= wf_TableCell(__('Downloaded'));

$rows = wf_TableRow($cells, 'row1');

if (empty($det_stat_raw)) {

echo($login);

echo($day);

}

while ($det_stat_q=mysqli_fetch_assoc($det_stat_raw)) {

$det_stat[]=$det_stat_q;

}

if (!empty($det_stat)) {

foreach ($det_stat as $io => $eachtraff) {

$cells = wf_TableCell($eachtraff['startTime']);

$cells.= wf_TableCell($eachtraff['endTime']);

$whoisLink = wf_Link('?module=whois&ip=' . $eachtraff['IP'], wf_img('skins/icon_whois_small.png', __('Whois')));

$webLink = wf_Link('http://' . $eachtraff['IP'], $eachtraff['IP']);

$cells.= wf_TableCell($whoisLink . ' ' . $webLink);

$cells.= wf_TableCell($eachtraff['port']);

$cells.= wf_TableCell($eachtraff['ip_proto']);

$cells.= wf_TableCell(stg_convert_size($eachtraff['bytes']), '', '', 'sorttable_customkey="' . $eachtraff['bytes'] . '"');

$rows.= wf_TableRow($cells, 'row3');

}

}

$result=wf_TableBody($rows, '100%', 0, 'sortable');

return($result);

}

show_window(__('Traffic detailed stats'), web_DSShow($user));

        show_window('', web_UserControls($user));

 

 

        } else {

show_error(__('No detailstats database exists'));

}

if (isset($_GET['day'])) {

            $day = $_GET['day'];

            show_window(__('Detailed stats by day'), web_DSShowDayStats($user, $day));

        }

} else {

    show_error(__('You cant control this module'));

}

?>

 

 

В файле /usr/local/stat/config.php лежат данные для подключения к БД.

В файле /.../billing/api/libs/api.userprofile я сменил ссылку статистки на детальную статистику.

Відредаговано Golthana
Ссылка на сообщение
Поделиться на других сайтах

За ini_set("memory_limit", "512M"); нужно бить ногами по лицу.

 

Вот выдержка из документации:

 

Небуферизуемые результирующие наборы

Если клиентские ресурсы ограничены, и в тоже время не требуется поддерживать низкую нагрузку на сервер, можно использовать не буферизованные результирующие наборы. Навигация по таким таблицам невозможна, потому что так или иначе должны быть обработаны все строки набора.

 

Пример #3 Навигация по строкам не буферизованной результирующей таблицы

<?php
$mysqli
->real_query("SELECT id FROM test ORDER BY id ASC");
$res $mysqli->use_result();

echo 
"Порядок строк в результирующем наборе...\n";
while (
$row $res->fetch_assoc()) {
    echo 
" id = " $row['id'] . "\n";
}

?>
Ссылка на сообщение
Поделиться на других сайтах

 

За ini_set("memory_limit", "512M"); нужно бить ногами по лицу

 

Почитаю.

 

Плюс неплохо было бы освобождать внутренние буфера mysql клиента c помощью mysqli_free_result() а также память неиспользуемых переменных

 

собственно, код программы должен начинаться так:

<?php
$time_start = microtime(true);
$init_mem = memory_get_usage();

а заканчиваться так:

echo "Memory statistic<BR />\n";
echo 'Initial: ' . $init_mem . " bytes<BR />\n";
echo 'Peak: ' . memory_get_peak_usage() . " bytes<BR />\n";
echo 'End: ' . memory_get_usage(). " bytes<BR />\n";
$time_end = microtime(true) - $time_start;
echo "Скрипт выполнялся $time_end секунд\n";
?>
Відредаговано Dmitry2
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

Dmitry2, спасибо. сейчас добавлю.

А можно его вставить в красивую форму, чтобы не выделялось так сильно?

Відредаговано Golthana
Ссылка на сообщение
Поделиться на других сайтах
собственно, код программы должен начинаться так:

Нет, не должен.

Нахрен это все не нужно, если есть нормальный встроенный иерархический профайлер. Но документация ведь для слабаков, да?

post-12401-0-72495600-1477063989_thumb.png

Відредаговано nightfly
Ссылка на сообщение
Поделиться на других сайтах

В любом случае пока работает шустро, но надо отметить, что БД еще маленькая. Соберу месяц и посмотрим сколько будет идти выборка данных.

 

Кстати, забил написать. Данные собираю и кладу в базу с помощью pmacct. Есть портах и проста в настройке.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від Golthana
      А как посмотреть детальную статистику за прошедший месяц?
       
      Или, если у кого-то есть какие-то рабочие решение организации ведение статистики, тоже буду рад советам.
      Заранее всем спасибо.
    • Від AleksNet
      Доброй ночи!!
      Подскажите почему при включении детальной статистике в профиле пользователя,  при обращении к детальной статистике в "Пользователи для которых включена детальная статистика".
      Выдает: "ОШИБКА.База данных детальной статистики отсутствует"
      Если я правильно понимаю, то для решения данной проблемы достаточно добавить базу детальной статистики?!?!?
      Если это так, то назревает другой вопрос: "где можно взять эту самую базу детальной статистики???"
      Просто более раньше устанавливал Ubilling, там все как говорится из коробки работало.
      В этот раз даже после третьего раза не хочет деталку показывать.
      Сильно не пинайте.

×
×
  • Створити нове...