Модуль для сбора статистики производительности сайта. Бесплатный! :)

Ну и кто там говорил, что бесплатных модулей больше не будет? Нате!

Думаю, всем известна плашка со статистикой сайта, которая вылезает внизу каждой страницы, если залогиниться админом. Было даже несколько доработок, как ее сделать покрасивее. Это гуд, конечно, но ведь эти цифирьки мы видим только тогда, когда сами бродим по сайту. А что происходит с ним, когда нас там нет? Так подумал я, и сделал модулечек, который эти самые цифирьки аккуратно складывает в специально приспособленный файлик, а потом админ может загрузить все эти цифры в табличку и посмотреть, так сказать, динамику их изменения. Или полюбоваться на их стабильность.

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

Это, на мой взгляд, уже хорошо. Но есть две махонькие фишки, которые не видны в стандартной плашке статистики:
1) Модуль подсчитывает среднее число онлайн-юзеров при показе каждой страницы — производительность сайта иногда очень сильно от этого зависит
2) Модуль считает время отклика сервера на запрос клиента. Ведь бывает порой, что сами скрипты отрабатывают довольно быстро, а, скажем, сервак сидит на узком, забитом гов трафиком, канале и уже готовую страницу отдает ну ооооооооооооооочень долго.

Кому нужен такой модулек (а кому он не нужен?), он доступен будет после модерации здесь: livestreet.ru/addons/93/


UPD Информация о последней версии и текущее обсуждение модуля: livestreet.ru/blog/2785.html

27 комментариев

avatar
Весьма интересно! Может пока выложите скрины в топике?
  • pix
  • 0
avatar
Да скрин-то только один — сама табличка с цифильками. Но она широкая — на всю страницу, ЛС ее все равно ужмет так, что не увидишь толком ничего
avatar
Отлично. Как всегда на высоте. Спасибо большое!!!
  • _et
  • 0
avatar
Отлично! А чего не в базу? :-)
  • Carw
  • 0
avatar
Чего не в базу?
avatar
А, догнал, ты про это: "… в специально приспособленный файлик..."?

Ну я просто всю процедуру расписывать не стал. Во-первых, файлик не один, а целых два. :)

Во-вторых, изначальная запись идет в файлы, а не в базу исключительно из соображений быстродействия и уменьшения «побочного эффекта». Ведь использование базы, доп. модулей и прочих наворотов — это ресурсы, которые будут потребляться уже после того, как мы, вроде все подсчитали. Я ради этого отказался и от встроенного модуля логгирования, и от своего, который в админке используется. Постарался сделать все с минимальными накладными расходами.

А, в-третьих, потом это все хозяйство все равно в базу складывается. Заходишь в админку статистики, загружаешь данные в базу (файлы при этом удаляются, конечно), и вывод инфы — это уже из базы берется.
avatar
Да, именно об этом я и спрашивал. Ответ меня очень порадовал, буду ждать появления и смотреть :-)
avatar
На моем хостинге (ИМХО не на единственном) грантов не хватает на LOAD DATA INFILE (метод NewDataLoad() в меппере). Я бы переделал под парсинг файла.
  • Hrom
  • 0
avatar
Это плохо :( Ибо этот запрос работает, как говорят, раз в 20 быстрей, чем банальный INSERT. Но, видимо, придется озадачиться этой проблемой
avatar
Крутой модуль, спасибо большое, Но…
То ли лыжи не едут… Проштудировал readme.txt + текст топика + все файлы в папочках архива, но так и не понял, как попасть в админку статистики)) Подскажите, пожалуйста!
avatar
Хм, да, это мой глюк — site.ru/adminstat/
avatar
Большое спасибо А надо какой-то дамп выполнять, а то:

SQL Error: Access denied for user 'u170670'@'%' (using password: YES) at /home/u170670/avtoturistu.ru/www/classes/modules/adminstat/mapper/Adminstat.mapper.class.php line 45
Array ( [code] => 1045 [message] => Access denied for user 'u170670'@'%' (using password: YES) [query] => LOAD DATA INFILE '/home/u170670/avtoturistu.ru/www/logs/astat.06.t1.log.tmp' IGNORE INTO TABLE prefix_adminstat_tmp1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 2 LINES (uid,dtime,viz,session,user,user_ip,sql_count,sql_time,cache_type,cache_count,cache_count_set,cache_count_get,cache_time,time_load_module,full_time,memory_usage,memory_peak,proc_load ) [context] => /home/u170670/avtoturistu.ru/www/classes/modules/adminstat/mapper/Adminstat.mapper.class.php line 45 )
avatar
Устанавливал ручками. И там нет информации по изменениям в базе. А они как я понял требуются. Судя по содержанию того же конфига. Плюс вылазит ошибка при попытке подгрузить данные:

SQL Error: Access denied for user бла-бла-бла LOAD DATA INFILE '/home/users/b/borisa/domains/futurin.ru/logs/astat.06.t1.log.tmp' IGNORE INTO TABLE prefix_adminstat_tmp1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 2 LINES

avatar
Изменения в базе (добавление нужных таблиц) делаются автоматом, поэтому править ручками базу не требуется.

А эта ошибка как раз то, о чем сказано здесь: livestreet.ru/blog/addons/2767.html#comment32572 — хостер, исходя из своих соображений, запрещает SQL-команду LOAD DATA INFILE. Дождитесь доработанной версии, где будет возможность указывать способ загрузки данных специально для таких осторожных хостеров.
avatar
В ожидании ;)
avatar
аналогично!
avatar
avatar
Информация о версии 1.1.15: livestreet.ru/blog/2785.html
avatar
у меня снизу выскакивает ошибка
Warning: Wrong parameter count for max() in /home/.../www/.../classes/modules/adminstat/Adminstat.inc.php on line 55
  • jofe
  • 0
avatar
Скачайте версию 1.1.17: livestreet.ru/addons/93/
avatar

$sql = 'INSERT IGNORE INTO '.$sTable.'('.$sColumns.') VALUES('.$aData[$i].')';
$this->oDb->query($sql);

И т.д.

Юзай плейсхолдеры и жить станет легче;)
  • Hrom
  • 0
avatar
сначала строу парсить, а потом собирать ее плейсхолдерами? двойная работа облегчает жизь?
avatar
Ну тогда надо хотя бы фильтровать данные.

Ajax Запрос:
$sStatInfo=@$_REQUEST['stat_info'];
....
$sStatInfo = $sStatInfo.','.str_replace(',', '.', ''.$nAjaxTime);
....
$result=@fwrite($fp, $sStatInfo."\n");

В Меппере:
$aData = @file($sFile);
....
$sql = 'INSERT IGNORE INTO '.$sTable.'('.$sColumns.') VALUES('.$aData[$i].')';

Запросом в $_REQUEST['stat_info'] можно послать что угодно.
Итого: SQL-injection, XSS.

P.S. XSS конечно в 32 байта надо постараться (`uid` varchar(32) NOT NULL). Но за счет намеренно кривого запроса и вывода об этом ошибки админу — только в путь.
avatar
А это уже резонное замечание. А посему — багфикс в версии 1.1.19
avatar
При попытке взять данные, которые раньше не брались, а потому просто копились. Обновился до 19 в надежде, ан нет…:

SQL Error: Column count doesn't match value count at row 1 at /home/users/b/borisa/domains/futurin.ru/classes/modules/adminstat/mapper/Adminstat.mapper.class.php line 88
Array ( [code] => 1136 [message] => Column count doesn't match value count at row 1 [query] => INSERT IGNORE INTO prefix_adminstat_tmp1(uid,dtime,viz,session,user,user_ip,sql_count,sql_time,cache_type,cache_count,cache_count_set,cache_count_get,cache_time,time_load_module,full_time,memory_usage,memory_peak,proc_load ) VALUES("ea5c8970c2c11eddb85aa652e9696bca","2009-10-07 00:02:11","7f893ff78876ae7f1a5faff00cb6734e","f3ac1d02e8ce6a0410cfca2d76f65d54","","93.81.56.224",13,0,036,"none",0,0,0,0,0,043,0,5481870174408,5512688,5676032,3,87 ) [context] => /home/users/b/borisa/domains/futurin.ru/classes/modules/adminstat/mapper/Adminstat.mapper.class.php line 88 )

avatar
Был баг, который был устранен еще в версии 1.0.14: livestreet.ru/blog/2775.html
И из-за последнего пункта (баг с запятой) некоторым придется удалить файлы logs/astat.NN.tN.log, куда уже сложена какая-то статистика. Извиняйте, господа, не доглядел.
Там в файлы сливались данные чуток не в том виде, как должны были. Можно было, конечно, поколдовать, чтоб загружать «кривые» данные, но я решил на это время не тратить, т.к. модуль только что вышел и данных не могло много накопиться. Поэтому мне показалось разумней старые файлы удалить и начать копить статистику снова.
avatar
Здесь закрою комменты, если что — текущее обсуждение здесь: livestreet.ru/blog/2785.html
Автор топика запретил добавлять комментарии