
Pisg — сокращение от Perl IRC Statistic Generator. Парсер, который генерирует красивую html-статистику активности пользователей на определённом канале в IRC. Использует для генерации файлы логов. Поддерживаемые форматы: X-Chat, mIRC, mIRC6, Eggdrops, bxlog for BitchX, irssi, virc98, dancer, Trillian, Grufti, mbot, winbot, zcbot, muh, energymech, ircII, psybnc, ircle, infobot, axur, bobot++, oer, perlbot, Vision, pircbot, KVIrc, HydraIRC, sirc, moobot, supybot, blootbot, dircproxy.
Ниже мы рассмотрим установку и поверхностную настройку на Debian.
Требование для работы лишь одно: Perl (ну и естественно сами логи).
Поехали?
ircd@server:~/pisg$ wget http://prdownloads.sourceforge.net/pisg/pisg-0.72.tar.gz
100%[======================================>] 237,706 637K/s in 0.4s
2011-07-25 10:03:44 (637 KB/s) - `pisg-0.72.tar.gz' saved [237706/237706]
получилось у нас /home/user/pisg/pisg-0.72.tar.gz, распаковываемircd@server:~/pisg$ tar -xzvf pisg-0.72.tar.gz
...
pisg-0.72/docs/dev/
pisg-0.72/docs/dev/API
ircd@server:~/pisg$
небольшое примечание для начинающих: если у вас длинное название файла/папки и вам очень лень его набирать, то вы можете использовать клавишу табуляции (tab), например вы вводите первую букву названия папки «р» и нажимаете tab ircd@server:~$ cd p
pisg/ pvpgn/
в моём случае показало, что под такую маску попадают две папки, далее пишем ещё одну букву (i, т.е. вместе pi) и снова tabircd@server:~$ cd pisg/
возвращаемся к нашему барану
распаковались, меняем директорию
ircd@server:~/pisg$ cd pisg-0.72
ircd@server:~/pisg/pisg-0.72$
смотрим, что у нас есть здесьircd@server:~/pisg/pisg-0.72$ ls
COPYING docs gfx lang.txt layout modules pisg pisg.cfg README scripts
нам надо отредактировать конфиг (а как же иначе-то?)
я пользую редактор nano
ircd@server:~/pisg/pisg-0.72$ nano pisg.cfg
нам открыло файл pisg.cfg для последующего редактирования, в котором показан пример самой простой настройки для канала, можно его продублировать (или же убрать коментарии (символ #) и изменить на свои данные)мой случай: логи пишет бот (eggdrop), который находится в соседней папке, небольшая нестыковка в кодировках, поэтому мне пришлось вручную указывать в конфиге pisg какую кодировку использовать при обработке логов. Получилось:
<channel="#mychan">
LogDir="/usr/home/ircd/eggdrop/logs/botnick/rubin/"
Format="eggdrop"
Network="mynetwork"
Lang="RU"
Charset="cp1251"
Maintainer="botnick"
OutputFile="/usr/home/ircd/www_irc/irc/stats/index.html"
Давайте же разберём, что здесь да как.Настройки конфига идут на каждый канал отдельно, этому соответствует запись
<channel="#mychan">
естественно, ради красивости Вам желательно поменять название канала. Не забудем так же закрыть тег в конце настроек для данного канала.папка, где лежат логи для использования в pisg (путь у каждого свой)
LogDir="/usr/home/ircd/eggdrop/logs/botnick/rubin/"
Ваш тип лога, список поддерживаемых ищите в шапке поста.Format="eggdrop"
Ради красивости название сети, будет использоваться в html файле.Network="mynetwork"
Язык логов. Думаю тут все понятно.
Lang="RU"
собственно здесь и была у меня загвоздка, кодировка используемых логов, большинство русскоязычных irc использует именно cp1251, врятли прогадаете
Charset="cp1251"
Кто предоставляет логи (в моем случае ник бота)Maintainer="botnick"
Наверно, самая важная строка, файл, в который будет генерироваться конечный результат (сама статистика), который можно выложить на обзор людям.OutputFile="/usr/home/ircd/www_irc/irc/stats/index.html"
Этого вполне хватит для нормальной работы парсера, при условии верно вписанных путей к директориям. Можно закрывать настройку данного канала Хотите больше каналов? Нет проблемМожно продублировать запись в конфиге, поменяв название, пути к директориям.
Пример:
<channel="#mychan1">
LogDir="/usr/home/ircd/eggdrop/logs/botnick/logdir/"
Format="eggdrop"
Network="mynetwork"
Lang="RU"
Charset="cp1251"
Maintainer="botnick"
OutputFile="/usr/home/ircd/www_irc/irc/stats/index.html"
<channel="#mychan2">
LogDir="/usr/home/ircd/eggdrop/logs/botnick/logdir2/"
Format=«eggdrop»
Network=«mynetwork»
Lang=«RU»
Charset=«cp1251»
Maintainer=«botnick»
OutputFile="/usr/home/ircd/www_irc/irc/stats2/index.html"
Прошу заметить, есть разница в путях к папкам/файлам. ^
Закрываем редактор nano (F2) нас спросит сохранить ли изменения, отвечаем Y.
Вернулись в папку, где лежит сам pisg (уже распакованный).
Запуск парсера осуществляется очень просто:
ircd@server:~/pisg/pisg-0.72$ ./pisg
Если есть какие-либо файлы для обработки, нам напишет в окно консоли. Окончанием работы будет строка:Channel analyzed successfully in 00 hours, 00 minutes and 01 seconds on Mon Jul 25 10:59:26 2011
Насчет даты не придирайтесь ;)В итоге pisg создал html файл в указанной директории с конфигом, это и есть ваша статистика.
Всё, можно кричать «УРА!!!» и хвастаться друзьям.
Но давайте дальше рассмотрим процесс автоматизации генерации (о как завернул-то). Проще говоря, что б статистика сама обновлялась без участия человека. Для этого нам предоставляются уже готовые решения.
Подключение tcl-скрипта к eggdrop.
Сам скрипт находится pisg-0.72/scripts/eggdrop-pisg.tcl
Внутри него в первых 25-ти строчках находятся редактируемые переменные.
Нам важно поменять следующее:
#Location of pisg execuitable perl script
set pisgexe "/usr/home/ircd/pisg/pisg-0.72/pisg"
Внимание! путь должен быть не к папке, а к самому запускаемому файлу.Далее меняем время автообновления статистики.
#How often the stats will be updated in minutes, ie: 30 - stats will be updated every 30 minutes
set pisgtime "1440"
Остальные настройки не столь важны. Рассматривайте их сами, а мне ещё много чего рассказать Вам.
Подключение к eggdrop довольно обычное:
копируем файл eggdrop-pisg.tcl в eggdrop*/scipts/
в конфиге eggdrop.conf добавляем строку
source scripts/eggdrop-pisg.tcl
Использование: бот будет сам запускать pisg через то время, что указано в скрипте;
так же Вы можете сами запустить обновление командой !stats (в скрипте есть настройка бинда) на канале (который все в том же скрипте) если у вас есть права (в скрипте, по умолчанию: владелец бота и ботмастер).
Подкючили? Rehash боту, в патилайне высветиться
pisg.tcl 0.15 loaded
Отлично! Сработало. Можете откинуться на спинку своего кресла… *
Запись в cron.
Это альтернатива подключение скрипта к боту, более лёгкая и удобная.
Что такое крон? Планировщик задач в Unix системах.
Morten Brix Pedersen (автор pisg) позаботился и про это.
В папке pisg-0.72/scripts/ лежит файл crontab, в котором написано как добавить pisg.
Собственно, вам нужно в консоли (шелле, командной строке) набрать (папка не имеет значения, крон пишется для каждого пользователя свой)
ircd@server:~/pisg/pisg-0.72$ crontab -e
Вам откроет окно, мой случай:# m h dom mon dow command
0,30 * * * * /usr/home/ircd/pisg/pisg-0.72/pisg --silent
первые две цифры, показывают в какие минуты каждого часа запускается pisg
В рекомендации:
*/10 * * * * /path/to/pisg --silent
будет запуск каждые 10 минут, при условии, что поменяете путь к исполняемому файлу (Внимание! к исполняемому файлу, а не папке с pisg)Сохраняем, выходим (F2, т.к. у меня редактор nano)
crontab: installing new crontab
Крон поставили, осталось Вам лично убедиться работает ли он.Если у вас pisg работает как надо, дальше можете не читать.
Проблемы и их решения.
Если у Вас pisg не хочет запускаться, пишет:
ircd@server:~/pisg/pisg-0.72$ ./pisg
-sh: ./pisg: Permission denied
это значит у файла не стоят атрибуты на запуск.Решение:
ircd@server:~/pisg/pisg-0.72$ chmod +x pisg
Таймстампы.
Пользуете eggdrop? Были проблемы с генерацией статистики после обновления до 1.6.20+ версии?
Все дело в том, что по умолчанию eggdrop до 1.6.20+ писал таймстампы в формате [HH:mm], pisg был с этим ознакомлён и работал как надо. Eggdrop обновился, поменял формат таймстампов на [HH:mm:ss], а pisg нет. Но уважаемый товарищ Buster предоставил нам переделанный парсер, для работы с логами, где встречаются старые и новые таймстампы. Ложить eggdrop.pm в pisg-0.72/modules/Pisg/Parser/Format/ с заменой (но лучше заранее сохранить существующий, на всякий случай).
Картинки.
Для корректного отображения html статистики вам следует скопировать содержимое директории pisg-0.72/gfx/ в папку, где находится ваш html файл. (Можно конечно и сам скрипт генерации отредактировать, ковырять pisg.pm что в /modules, но не стоит туда лезть, если не понимаешь).
Логи парсит, но не обновляет статистику, одно и то же всегда.
Вам стоит правильно настроить логгирование на/в боте/клиенте. Pisg не запоминает статистику предыдущую, он всегда заново парсит все логи. Т.е. Вам необходимо логи хранить.
Pisg считывает все логи в папке, а я хочу только по определённой маске.
Не проблема. В настройках канала (pisg.cfg) добавьте строку
LogPrefix="localhost-"
это заставит парсер отбирать логи начинающиеся на localhost-*.Более детально с возможностями pisg Вы можете ознакомится на pisg.sourceforge.net/docs но прийдётся вспоминать английский язык.
Примечание:
* — это не мотиватор.