|
|
|
|
|
для: Loki
(15.09.2005 в 10:08)
| | Да со страницами проблема имеется... ну не будем показывать данные за всё время - в конце концов, оптимизация скорости и места требуют жертв :)))
>Для внешнего счетчика, вероятно, тупо приравнивать засчитанные хосты ко всем
>хостам... или вообще их не показывать. В любом случае, я не очень представляю
>как работает внешний счетчик.
А у него и нет незасчитанных хостов - внешний счётчик это картинка - её грузят с сервера-счётчика и пока он её формирует и отсылает клиенту от учытывает кто к нему обратился. Роботы картинки не грузят (клиенты-то не все грузят :), поэтому у внешних счётчиков только хосты (и то не полностью). Грубо говоря PowerCounter даёт 1500 чистых хостов и 1650 грязных, а тот же Rambler даст 1100, т.е. подсчёт идёт для тех, кто грузит картинки. | |
|
|
|
|
|
|
|
для: cheops
(15.09.2005 в 02:58)
| | Да. Я тоже уже с этим сталкивался.
Со скелетом функции согласен: именно так я и собирался это сделать. Но есть трудность: если запрашиваются данные по конкретной странице, но надо бы их брать из ip, так как arch_ip не делает различий и все валит в кучу. Данные будут только за последний месяц, но это больше чем ничего.
Надо ли все это выделять в отдельную функцию - не знаю, так как вызываться она будет только из одного места.
По п.1: это я перестраховался. Побоялся что вдруг где-нить при вычислениях вылезет лишняя секунда -заархивируем дополнительный день:)
3. Я и не знал что так можно - здорово! надо будет еще где-нибудь использовать:)
Для внешнего счетчика, вероятно, тупо приравнивать засчитанные хосты ко всем хостам... или вообще их не показывать. В любом случае, я не очень представляю как работает внешний счетчик. | |
|
|
|
|
|
|
|
для: cheops
(15.09.2005 в 02:55)
| | А ещё во внешнем счётчике у меня таблицы с переменными именами... это нужно будет тоже в третьей версии организовать, а то уж больно имена таблиц распространнённые используются... | |
|
|
|
|
|
|
|
для: Loki
(14.09.2005 в 23:13)
| | Я пока побоялся портить основной PowerCounter на сайте и колдую над внешним счётчиком.
1) Мне не понравился момент
<?php
if (intval(($last_day - $last_date)/24/60/60))
{
$days = ceil(($last_day-$last_date)/24/60/60);
?>
|
у меня чего-то криво работает, заменил на
<?php
if (ceil(($last_day - $last_date)/24/60/60))
{
$days = ceil(($last_day-$last_date)/24/60/60);
?>
|
2) Переименовал поле date в putdate, так как могут быть проблемы, особенно с phpMyAdmin, да и в других таблицах putdate используется.
3) Решил изменить добавление в таблицу arch_hits, преобразовав несколько одиночных INSERT-запросов в один многострочный, т.е. в цикле помещаю в массив данные
<?php
$sql[] = "(0, '".date("Y-m-d H:i:s",$last_day)."' - INTERVAL ".($i-1)." DAY, $hosts, $hists, $totalhists, $_GET[id_user])";
?>
|
а потом формирую запрос при помощи implode
<?php
$query = "INSERT INTO $tbl_arch_hits VALUES".implode(",", $sql);
?>
|
4) Вычисление $date['data'] решил продублировать в коде, а не пологаться на topcounter.php, так как со временем код будет использоваться для автоматической работы - он должен быть автономным.
А так вообще всё работает как часы - всё вставляется, удаляется - классная штука. Нужно будет только с функциями представления поработать. Скелет функции show_ip_host решил сделать следующим
<?php
function show_ip_host($begin, $end, $id_user, $tbl_ip, $tbl_arch_hits)
{
// Обнуляем хиты и хосты
$hosts = 0;
$hits = 0;
$totalhist = 0;
// Определяем принадлежность сата
$user = " AND id_user=$id_user";
/////////////////////////////////////////////////////////////////////////////
// Исходим из таблицы соответствия
// begin end
// сегодня 1 0 - это извлекаем из $tbl_ip
// вчера 2 1 - это извлекаем из $tbl_arch_hits
// неделя 7 0 - это извлекаем из $tbl_arch_hits
// месяц 30 0 - это извлекаем из $tbl_arch_hits
// всё время 0 0 - это извлекаем из $tbl_arch_hits
/////////////////////////////////////////////////////////////////////////////
// Если учёт происходит вплоть до сегодняшнего дня - учитываем это, обращаясь
// к текущим хитам и хостам в таблице $tbl_ip
if($end == 0)
{
...
// Если запросы выполнениы удачно,
// получаем результат
$hosts += mysql_result($hst, 0);
$hits += mysql_result($pht, 0);
$totalhist += mysql_result($tot, 0);
}
// Если требуемый интервал затрагивает дни, упакованные в таблицы
// плюс ко всему извлекаем информацию из архивной таблицы $tbl_arch_hits
if($begin != 1)
{
...
// Если запросы выполнениы удачно,
// получаем результат
$hosts += mysql_result($hst, 0);
$hits += mysql_result($pht, 0);
$totalhist += mysql_result($tot, 0);
}
// Возвращаем результат
return array($hosts, $hits, $totalhist);
}
?>
|
К сожалению, это всё пока не совместимо с PowerCounter, так как у внешнего счётчика отсутствует понятие "засчитанные хосты" и присутсвует понятия нескольких сайтов, но после того как механизмы будут отлажены - перенос уже не будет представлять труда. | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 19:35)
| | В общем, жду результатов тестирования. Если основных тараканов выловим, то на основе этого кода буду делать выгрузку для остальных отчетов. | |
|
|
|
|
|
|
|
для: Loki
(14.09.2005 в 13:28)
| | Да имеется несколько сайта, просто при работе с HTML-сайтом может быть более удобный вариант внешнего счётчика, также удобнее работать с ним если есть необходимость поддержки сразу нескольких сайтов. | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 12:53)
| | можно сделать такую проверку:
<?
if ($last_date<=$date['date']) $last_date=$date['date'];
?>
|
А по поводу нескольких сайтов что имеется ввиду?
Я обращал внимание что заложена возможность мониторинга нескольких сайтов (правда, она не реальизована и мне не очень ясна польза от нее:). Речь об этом? | |
|
|
|
|
|
|
|
для: Loki
(14.09.2005 в 09:25)
| | Да сегодня продолжу разбирать... просто я ещё на несколько сайтов пытаюсь обощить - скорее всего из-за этого глюки лезут :) Наверное нужно будет ввести защиту от 1970 года :), а то после такого сбоя нашими скриптами никто пользоваться не будет :))) | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 03:03)
| | $last_day - это последний завершенный день
$last_date - последняя дата выгрузки.
Если небыло ни одной выгрузки, то sql запрос вместо даты возвращает NULL (во всяком случае у меня). В этом случае, в качестве $last_date мы берем $date - то есть дату запуска счетчика.
Проверьте, возвращает ли запрос
SELECT UNIX_TIMESTAMP(MAX('date')) as 'date' FROM arch_hits
|
NULL в случае отсутствия архивных записей. Если этого не происходит, то скрипт будет пытаться делать выгрузки до 1970 года:) В этом случае, придется придумывать другое условие:) | |
|
|
|
|
|
|
|
для: cheops
(14.09.2005 в 01:47)
| | Так $date нашёл в topcounter.php :), а чем $last_day отличается от $last_date - у меня почему то получается дикая разница и скрипт норовит пару десятков тысяч записей вставить :))) | |
|
|
|
|