понедельник, 5 апреля 2010 г.

WEB-интерфейс для анализа статистики CUPS

Ранее, в посте "Анализ статистики CUPS" я описывал как сохранить статистику принт-сервера в базе MySQL, сегодня выложу WEB-интерфейс, для анализа этой статистики.



Отказ от ответственности
Автор не несет ответственности за любые последствия которые могут наступить в результате установки и использования WEB-интерфейса CSC v.0.1, пользователь использует его "как есть" на свой страх и риск.

Что используем:
Gentoo
Apache 2.2
PHP 5.2
gd 2.0
MySQL 5.0

Модернизируем базу данных
К структуре БД, описанной ранее, добавляем две таблицы:
prn - для хранения информации о принтерах
users - для хранения информации о пользователях
# mysql -D cups_stat

mysql> CREATE TABLE `prn` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(30) NOT NULL,
  `model` varchar(30) NOT NULL,
  `comment` varchar(128) NOT NULL,
  `status` enum('0','1') default '1',
  `balance` enum('0','1') NOT NULL default '1',
  `b_date` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `p_rur` decimal(10,2) NOT NULL,
  `p_usd` decimal(5,2) NOT NULL,
  `c_type` varchar(30) character set utf8 collate utf8_unicode_ci NOT NULL,
  `c_type1` varchar(30) character set utf8 collate utf8_unicode_ci NOT NULL,
  `c_type2` varchar(30) character set utf8 collate utf8_unicode_ci NOT NULL,
  `c_type3` varchar(30) character set utf8 collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;

mysql> CREATE TABLE `users` (
`id` tinyint(3) NOT NULL auto_increment,
`user` varchar(50) NOT NULL,
`name` varchar(128) default NULL,
`div` varchar(128) character set utf8 collate utf8_unicode_ci NOT NULL,
`status` enum('0','1') default '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
 Устанавливаем gd
Поскольку для наглядности просмотра статистики используются круговые диаграммы, необходимо установить графическую библиотеку.
# USE="jpeg png truetype" emerge -av gd
Устанавливаем и настраиваем WEB-интерфейс
Берем отсюда архив с WEB-интерфейсом и разворачиваем его в папку /var/www/localhost/htdocs
# tar -xvzf ./cups.tar.gz -C /var/www/localhost/htdocs/
 Открываем и редактируем файл настроек /var/www/localhost/htdocs/cups/config.php
Необходимо указать хост, на котором крутится MySQL, имя пользователя и пароль на доступ к просмотру статистики, имя пользователя и пароль для доступа к БД.
На этом установку и настройку можно считать законченными.
Открываем в браузере главную страницу http://192.168.0.x/cups, авторизуемся и регистрируем принтеры и пользователей. Зарегистрировать можно только принтеры и пользователей информация о которых уже есть в БД, в таблице tasks_log, имена пользователей и принтеров выбираются из выпадающего списка. В подробном описании регистрации смысла не вижу, поскольку все достаточно просто и логично(по крайней мере для меня ;) ). По использованию тоже не должно возникнуть сложностей. Если что то будет непонятно - пишите в комменты, постараюсь по возможности ответить.
Да, когда я писал это безобразие, то разбираться с сессиями PHP мне было лень, поэтому некоторые параметры передаются через временные файлы, соответственно адекватная работа гарантирована только одному пользователю одновременно, по той же причине можно завести только одну учетную запись пользователя, если можно так сказать. Все же я админ, а не программер.
Еще раз повторюсь, что все делалось под себя. CSC означает CUPS Statistics Center, v.0.1 как бы намекает нам, что этот продукт далек от совершенства, поэтому претензии не принимаются (см. Отказ от ответственности), пожелания по добавлению функционала, или доработке существующего рассматриваются, но весьма неспешно, единственным критерием для внесения изменений будет то, насколько данный функционал меня заинтересует.
На этом пока все.
Upd. 26.10.2012
Перезалил сюда.

39 комментариев:

  1. Статистика просто замечательная, чисто мое пожелание, не хватает вывода статистики по группам пользователей например занесение в группу пользователей и вывод статистики только по этой группе какие там пользователи и кто сколько напечатал , ну или хотя бы просто сколько в общем напечатала такая то группа человек. Было бы вообще суперски.

    ОтветитьУдалить
  2. Будет время, может быть и сделаю, в принципе отделы для сотрудников предусмотрены, можно будет по ним сделать.

    ОтветитьУдалить
  3. Нашли ошибочку в Web интерфейсе: надо поправить
    if ($period==0)
    {
    $s='всё время учёта';
    $query="SELECT `prn_name`,COUNT(DISTINCT `task_id`),SUM(`rep_num`), MAX(`page_num`), ROUND(SUM(`rep_num`)/COUNT(DISTINCT `task_id`)),ROUND( sum( `rep_num` ) / count( DISTINCT date_format( `p_date` , '%d %m %Y' ))) ,TO_DAYS( MAX( `p_date` ) ) - TO_DAYS( MIN( `p_date` ) ),DATE_FORMAT(MIN( `p_date` ),'%d.%m.%Y'), DATE_FORMAT(MAX( `p_date` ),'%d.%m.%Y') FROM tasks_log WHERE `prn_name`='$prn'";

    надо добавить group by(`prn_name`)

    ОтветитьУдалить
  4. А смысл группировать по принтеру в выборке по одному принтеру?

    ОтветитьУдалить
  5. Без этого выборка по одному принтеру не работает выдает ошибку и не отображает статистику.

    ОтветитьУдалить
  6. Странно, у меня все работает, или я не там смотрю. Поподробнее можно? Это когда кликаешь на имя принтера в основном окне принтеров?

    ОтветитьУдалить
  7. Это когда входишь в Принтер => Общая статистика за период и кликаешь на принтер со страници cups/index.php?prn=xerox4510l&period=0 и он не выдавал Статистика принтера xerox4510l за всё время учёта.

    ОтветитьУдалить
  8. Gunther, еще вопросик как настроить Cron на запуск скрипта каждые 30 минут , так что бы он запускал скрипт и он работал, настроил crontab -e добавил в него строку запуска, скрипт добавил в группу lpadmin и дал права на запуск 777 скрипту , однако на следующий день когда обновляется фаил page_log надо на фаил давать права иначе скрипт не добавляет в базу данные из файла page_log

    ОтветитьУдалить
  9. 1. crontab - e */30 * * * * /var/www/cups/script.pl
    2. Какой дистрибутив используете? Кому и какие права даны на page_log по умолчанию?

    ОтветитьУдалить
  10. Ubuntu 8.04 права rw r r походу стоят по умолчанию, У меня было в кроне не так прописано щас попробую будет ли обновляться просто было прописано так
    30 0 * * * /var/www/cups/cups.pl

    ОтветитьУдалить
  11. Таких прав должно быть достаточно, чтобы любой пользователь мог читать page_log. То что было прописано в crontab, запускало скрипт ежедневно в 0 часов 30 минут.

    ОтветитьУдалить
  12. Gunther, добрый день не подскажешь , как в БД поправить кодировку , что бы в БД имена пользователей русские нормально отображались.. а то пишет в utf8_general_ci вот такую вот крякозябру Матвеев Ð� ваыв

    ОтветитьУдалить
  13. Смотри /etc/my.cnf

    [mysql]
    character-sets-dir=/usr/share/mysql/charsets
    default-character-set=utf8

    [mysqladmin]
    character-sets-dir=/usr/share/mysql/charsets
    default-character-set=utf8

    [mysqlcheck]
    character-sets-dir=/usr/share/mysql/charsets
    default-character-set=utf8

    [mysqldump]
    character-sets-dir=/usr/share/mysql/charsets
    default-character-set=utf8

    [mysqlimport]
    character-sets-dir=/usr/share/mysql/charsets
    default-character-set=utf8

    [mysqlshow]
    character-sets-dir=/usr/share/mysql/charsets
    default-character-set=utf8

    [mysqld]
    character-set-server = utf8
    default-character-set = utf8

    ОтветитьУдалить
  14. Все поправил , но в Phpmyadmin базе по прежнему такая же крякозябра сравнение баз стоит utf8_general_ci , фаил /etc/mysql/my.cnf поправил, но эфект тот же в веб интерфейсе все норм отображается , а вот в базу записывается кракозяброй.

    ОтветитьУдалить
  15. На главной странице phpmyadmin в поле "Сопоставление соединения с MySQL:" нужно выбрать utf8_general_ci.
    В какой кодировке отображается phpmyadmin? Если не UTF-8, что происходит с отображением имен пользователей, если выставить UTF-8 вручную. Какая локаль стоит на сервере? (посмотреть вывод команды locale в консоли)

    ОтветитьУдалить
  16. Локаль стоит LANG=ru_RU.UTF-8
    LC_CTYPE="ru_RU.UTF-8"
    LC_NUMERIC="ru_RU.UTF-8"
    LC_TIME="ru_RU.UTF-8"
    LC_COLLATE="ru_RU.UTF-8"
    LC_MONETARY="ru_RU.UTF-8"
    LC_MESSAGES="ru_RU.UTF-8"
    LC_PAPER="ru_RU.UTF-8"
    LC_NAME="ru_RU.UTF-8"
    LC_ADDRESS="ru_RU.UTF-8"
    LC_TELEPHONE="ru_RU.UTF-8"
    LC_MEASUREMENT="ru_RU.UTF-8"
    LC_IDENTIFICATION="ru_RU.UTF-8"
    LC_ALL=
    Сопоставление соединения с MySQL: utf8_general_ci Сравнение utf8_general_ci
    MySQL-кодировка: UTF-8 Unicode (utf8)

    ОтветитьУдалить
  17. Странно. С такими настройками должно быть все нормально. Может быть глюк конкретной версии phpmyadmin. MySQL явно работает корректно, отдает в UTF-8, как и задумывалось. WEB-интерфейс так же заточен под юникод.

    ОтветитьУдалить
  18. Приветствую!
    архив с депозита убрали.
    Можно Вас попросить выложить его заново или на почту прислать.
    Заранее спасибо!

    ОтветитьУдалить
  19. Перезалил - http://depositfiles.com/files/ekt1a9p9t

    ОтветитьУдалить
  20. Еще раз можно веб-интерфейс выложить? ))

    ОтветитьУдалить
  21. Можно, конечно. Только вот не сегодня. :) В понедельник - вторник перезалью.

    ОтветитьУдалить
  22. Вот уж не согласен, просто "... понедельник"
    Собственно вот - http://depositfiles.com/files/hg0ijsnle

    ОтветитьУдалить
  23. Здравствуйте, можно ещё раз попросить выложить архив? Наверное уже достали этим...

    ОтветитьУдалить
  24. День добрый, на днях выложу. С переездом на новый ноут архив где то затерялся, так что нужно искать. Кстати, на свежих версиях PHP возможны всякого рода warning'и, пока с ними не разбирался, ибо лень... :)

    ОтветитьУдалить
  25. Спасибо, посмотрим что там :)
    Ещё и скрипт парсинга тоже помер (архив) :)

    ОтветитьУдалить
  26. Выложил -http://depositfiles.com/files/adc4nofwo -раз, http://depositfiles.com/files/x3ake60hi - два.

    ОтветитьУдалить
  27. Здравствуйте. На php-5.2.8 и gd-2.0.35 на диаграммах вместо подписи были кракозябры. Решение подсмотрено на http://stackoverflow.com/questions/198007/php-function-imagettftext-and-unicode

    Модификации подверглись /var/www/htdocs/cups/img.php и /var/www/htdocs/cups/img1.php
    Там где используется функция imagettftext(), перед ней добавить:
    $text = mb_encode_numericentity("Количество страниц",
    array (0x0, 0xffff, 0, 0xffff), 'UTF-8');
    предварительно так же заменив в imagettftext() аргумент "Количество страниц" на $text.
    Эти строки приведены в качестве примера.
    В остальных случаях поступить аналогичным образом лишь заменяя соответствующий текст.

    ОтветитьУдалить
  28. День добрый! Спасибо большое! Если вдруг придется допиливать, буду знать куда копать. :)
    Да, все забываю уточнить - записи в page_log попадают не зависимо от того удалось напечатать задание или нет, поэтому в результате получаем не статистику напечатанных страниц, а статистику того, сколько страниц хотели напечатать. Ну да для целей приближенного анализа загрузки принтеров вполне сойдет.

    ОтветитьУдалить
  29. Здравствуйте ещё раз, комментарий\исправления :)
    На ubuntu 10.10 не работали круговые диаграммы, надо убрать кавычки около параметра IMG_ARC_PIE в img.php

    Спасибо за труд! :)

    ОтветитьУдалить
  30. Выложите ещё раз веб-интерфейс пожалста, заранее благодарю

    ОтветитьУдалить
  31. Постараюсь найти и выложить, скорее всего на след. неделе. Только имейте в виду, делалось все весьма давно и на свежих версиях php работает криво. Так что придется править самостоятельно.

    ОтветитьУдалить
  32. А не, обманул, уже нашёл и выложил http://depositfiles.com/files/nb7h4nuar :)

    ОтветитьУдалить
  33. Спасибо, если все получится - поделюсь :-)

    ОтветитьУдалить
  34. Всё отлично, заработало без бубна, платформа ubuntu server 12.10

    ОтветитьУдалить
  35. А еще разок выложить можно?

    ОтветитьУдалить