Ну и кто там говорил, что бесплатных модулей больше не будет? Нате!
Думаю, всем известна плашка со статистикой сайта, которая вылезает внизу каждой страницы, если залогиниться админом. Было даже несколько доработок, как ее сделать покрасивее. Это гуд, конечно, но ведь эти цифирьки мы видим только тогда, когда сами бродим по сайту. А что происходит с ним, когда нас там нет? Так подумал я, и сделал модулечек, который эти самые цифирьки аккуратно складывает в специально приспособленный файлик, а потом админ может загрузить все эти цифры в табличку и посмотреть, так сказать, динамику их изменения. Или полюбоваться на их стабильность.
Короче, берет модуль те же самые цифры, что выводятся в подвале у админа и выдает их среднее значение в пересчете по суткам.
Это, на мой взгляд, уже хорошо. Но есть две махонькие фишки, которые не видны в стандартной плашке статистики:
1) Модуль подсчитывает среднее число онлайн-юзеров при показе каждой страницы — производительность сайта иногда очень сильно от этого зависит
2) Модуль считает время отклика сервера на запрос клиента. Ведь бывает порой, что сами скрипты отрабатывают довольно быстро, а, скажем, сервак сидит на узком, забитом гов трафиком, канале и уже готовую страницу отдает ну ооооооооооооооочень долго.
Кому нужен такой модулек (а кому он не нужен?), он доступен будет после модерации здесь: livestreet.ru/addons/93/
А, догнал, ты про это: "… в специально приспособленный файлик..."?
Ну я просто всю процедуру расписывать не стал. Во-первых, файлик не один, а целых два. :)
Во-вторых, изначальная запись идет в файлы, а не в базу исключительно из соображений быстродействия и уменьшения «побочного эффекта». Ведь использование базы, доп. модулей и прочих наворотов — это ресурсы, которые будут потребляться уже после того, как мы, вроде все подсчитали. Я ради этого отказался и от встроенного модуля логгирования, и от своего, который в админке используется. Постарался сделать все с минимальными накладными расходами.
А, в-третьих, потом это все хозяйство все равно в базу складывается. Заходишь в админку статистики, загружаешь данные в базу (файлы при этом удаляются, конечно), и вывод инфы — это уже из базы берется.
Крутой модуль, спасибо большое, Но…
То ли лыжи не едут… Проштудировал readme.txt + текст топика + все файлы в папочках архива, но так и не понял, как попасть в админку статистики)) Подскажите, пожалуйста!
Устанавливал ручками. И там нет информации по изменениям в базе. А они как я понял требуются. Судя по содержанию того же конфига. Плюс вылазит ошибка при попытке подгрузить данные:
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
Изменения в базе (добавление нужных таблиц) делаются автоматом, поэтому править ручками базу не требуется.
А эта ошибка как раз то, о чем сказано здесь: livestreet.ru/blog/addons/2767.html#comment32572 — хостер, исходя из своих соображений, запрещает SQL-команду LOAD DATA INFILE. Дождитесь доработанной версии, где будет возможность указывать способ загрузки данных специально для таких осторожных хостеров.
Запросом в $_REQUEST['stat_info'] можно послать что угодно.
Итого: SQL-injection, XSS.
P.S. XSS конечно в 32 байта надо постараться (`uid` varchar(32) NOT NULL). Но за счет намеренно кривого запроса и вывода об этом ошибки админу — только в путь.
При попытке взять данные, которые раньше не брались, а потому просто копились. Обновился до 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 )
И из-за последнего пункта (баг с запятой) некоторым придется удалить файлы logs/astat.NN.tN.log, куда уже сложена какая-то статистика. Извиняйте, господа, не доглядел.
Там в файлы сливались данные чуток не в том виде, как должны были. Можно было, конечно, поколдовать, чтоб загружать «кривые» данные, но я решил на это время не тратить, т.к. модуль только что вышел и данных не могло много накопиться. Поэтому мне показалось разумней старые файлы удалить и начать копить статистику снова.
27 комментариев
Ну я просто всю процедуру расписывать не стал. Во-первых, файлик не один, а целых два. :)
Во-вторых, изначальная запись идет в файлы, а не в базу исключительно из соображений быстродействия и уменьшения «побочного эффекта». Ведь использование базы, доп. модулей и прочих наворотов — это ресурсы, которые будут потребляться уже после того, как мы, вроде все подсчитали. Я ради этого отказался и от встроенного модуля логгирования, и от своего, который в админке используется. Постарался сделать все с минимальными накладными расходами.
А, в-третьих, потом это все хозяйство все равно в базу складывается. Заходишь в админку статистики, загружаешь данные в базу (файлы при этом удаляются, конечно), и вывод инфы — это уже из базы берется.
То ли лыжи не едут… Проштудировал readme.txt + текст топика + все файлы в папочках архива, но так и не понял, как попасть в админку статистики)) Подскажите, пожалуйста!
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
А эта ошибка как раз то, о чем сказано здесь:
Warning: Wrong parameter count for max() in /home/.../www/.../classes/modules/adminstat/Adminstat.inc.php on line 55
И т.д.
Юзай плейсхолдеры и жить станет легче;)
Запросом в $_REQUEST['stat_info'] можно послать что угодно.
Итого: SQL-injection, XSS.
P.S. XSS конечно в 32 байта надо постараться (`uid` varchar(32) NOT NULL). Но за счет намеренно кривого запроса и вывода об этом ошибки админу — только в путь.
Там в файлы сливались данные чуток не в том виде, как должны были. Можно было, конечно, поколдовать, чтоб загружать «кривые» данные, но я решил на это время не тратить, т.к. модуль только что вышел и данных не могло много накопиться. Поэтому мне показалось разумней старые файлы удалить и начать копить статистику снова.