ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Идея модуля для nginx - счетчик



День добрый!

Модуль empty_gif навеял идею нового модуля - счетчика посещений.
Функционал получается близкий к уже существующему в empty_gif. C той разницей, что нужно вести реестр посетителей. Для большей гибкости предлагаю не вводить какие-то заранее вкомпилированные способы учета, а сделать
учет по хешу строки, заданной в конфигурации.
Например, если нам нужно считать общую посещаемость по ip адресам, то объявляем хеш навроде такого:
counter_hash_1 = "$remote_ip"
Если хотим считать с учетом страниц на которые ходят пользователи, то берем хеш типа такого:
counter_hash_2 = "$remote_ip $request_uri".
Будет очень хорошо, если можно будет использовать все внутренние переменные nginx для создания хеша. В этом хеше можно отделить посещения разных страниц с одного и того же ip адреса. Значением хеша может быть число "попаданий" в него. Либо, если идти на шаг дальше и вводить защиту от накруток и случайных срабатываний, то можно записывать массив из 2 элементов: счетчика и времени последнего срабатывания + заданный в конфиге таймаут. Теперь, если приходит запрос, то мы проверяем если текущее время меньше, чем записанное в хеше, то игнорируем запрос. Если же больше, то увеличиваем счетчик и записываем в поле "время" текущее время увеличенное на таймаут для данного хеша.

Для ускорения работы хеш можно хранить в памяти или где-нить в /proc для линукса. Также надо придумать как доставать значения. Можно использовать вариант, который сделан в счетчике сетевых пакетов ipcad. Первая комада типа checkout заставляет его создать новый пустой хеш и записывать новые данные в него. Старый при этом просто висит в памяти. Следующий сигнал, например dump, говорит, что надо сбросить старый хеш в файл и очистить эту область памяти.

Теперь счетчик может считать - надо только отображать значения на кнопке.
Наврядли будет хорошей идеей жестко вкомпилировать код для создания кнопки, т.к. это лишит гибкости, и если надо будет изменить фон, то придется пересобирать сервер. Как вариант, можно сделать подключение внешних программ для отрисовки через fastcgi и передавать им параметры.
Что-то навроде такого:
location  /counter/hosts {
  fastcgi_pass localhost:12345;
fastcgi_param QUERY_STRING hash1=$counter_hash_1_value&hash2=$counter_hash_2_value;
 и т.п.
}
Программа сама разберется как отрисовать эти значения. На чем она будет написана? На чем удобнее человеку: хоть на php хоть на С--


Хотел бы обсудить со всеми и особенно с Игорем такой модуль.
Наверняка, не у меня одного было желание и небходимость сделать счетчик.


С уважением,
Евгений




 




Copyright © Lexa Software, 1996-2009.