Сен 272015
 

Захотелось скрестить ежа с ужом систему голосования с графикой, чтобы видеть в динамике, за какой пункт опроса отдаются голоса. При этом, очень хотелось, чтобы всё было автоматизировано по самое “не хочу.

Потребовалось написать два скрипта для cron. Один отвечает за обновление данных, второй – за рисование графиков. Сами скрипты не публикую, там куча внутренних подробностей, но идеи такие:

  • Скрипт обновления
    • Создаёт список всех открытых опросов
    • Для каждого получаем список возможных ответов
    • Проверяет существование rrd-базы ориентируясь на timestamp начала опроса, если надо – создаёт с 1 элементом данных.
    • Проверяет наличие нужного DS по названию (номеру, рассматриваемому, как строка) ответа, если надо добавляет. Добавление производится через perl скрипт, поскольку rrdtool с параметром tune я, почему-то, не смог заставить работать.
    • Формируется шаблон параметров (порядок следования) для обновления набора данных
    • Ну и собственно rrdtool update -t <шаблон> N:<данные в том же порядке>
  • Скрипт рисования
    • Очень похоже на предыдущий, сначала список всех открытых опросов
    • Для каждого – несколько ответов с максимальным количеством голосов с обратной сортировкой.
    • В цикле создаётся скрипт. Временный. Связано это с тем, что мне надоело воевать с экранированием символов в bash. Слишком сложно получается. А тут – нормально и посмотреть можно на временный файл, если что не заработает.
    • Ну и запустить скрипт, который выводит на экран размер создаваемых изображений. Можно пустить на /dev/null
  • Отдельный web-сайт
    • Получившиеся изображения я кидаю на отдельный сайт
    • Связано с тем, что эти изображения не должны кешироваться. Точнее, принцип кеширования немного другой. Проще сделать no-cache.

Получается примерно так:

1443260375

Ссылки