Как построить простой график в виде одной полоски...???

qazaqq

Новичок
Как построить простой график в виде одной полоски...???

Здравствуйте уважаемые господа!
Вот столкнулся с простой задачей, но как ее проще реализовать не могу сообразить, все как то мысли не в ту сторону работают...

Задача: В базу данных(MySQL) только по изменению состояния, пишутся логи, например:
PHP:
08-07-2008 22:06 device is up state=1
09-07-2008 22:26 device is down state=0
10-07-2008 23:18 device is up state=1
Необходимо сформировать график в виде одной полоски двух цветов(зеленый - state=1 и красный - state=0) как бы реального времени, то есть
PHP:
        |--------------------------------|
21:16                          22:16
на странице отображается график от текущего времени до прошлого часа, пока все норма идет зеленая полоска, как только state=0 - полоска превратилась в красную и т.д.

Обновление страницы думаю делать посредством технологии Ajax(с этим проблем нет) от 10 до 30 сек
Назначение: контроль и быстрое устранение неполадок...

Пробовал сделать формированием ячеек таблицы, в зависимости от состояния заливать нужным цветом, но оказалось очень громоздко и не универсально, так как нужно постоянно пересчитывать процентное соотношение полосок, чтоб хоть примерно наложить на временную шкалу... Так же думал забить 60 пиксельных ячеек таблицы и по текущей минуте проверять запись в базе и выводить соответст. цветом, но как при этом сделать смещение всех ячеек в лево или перерисовывать...
Рисовать график с помощью библиотеки GD как то вроди тоже...
В общем зашел в тупик! Очень надеюсь на вашу помощь... :)
 

Beavis

Banned
для начала хотя бы научись просто выводить текстом временнЫе интервалы для зеленой и красной полосок
а как это красиво отобразить графически, потом уже яснее будет
 

qazaqq

Новичок
Beavis
Спасибо за ответ! Ну текстом впринципе понятно, берем из базы последнее состояние и рисуем его до нового состояния, которое опять же получаем из базы. Если нового нет, продолжаем тем же цветом...
Что-то не хватает мне, может вносить все 60 точек в базу и отсекать потом по лимиту записей в 60...? Это я только что придумал :))
 

Beavis

Banned
Сформируй массив точек времени когда должен "меняться цвет полоски", возьми разницу между вторым и первым элементом, посчитай какую часть это занимает от всей длины полоски и рисуй, например div полученной ширины и высоты 5.. и так для всех элементов массива
 

qazaqq

Новичок
Beavis
В том то и дело, что пересчитывать постоянно пропорции полосок это долги и не систематично. Кстате ширина графика всегда постоянная, например это 400px. Одно дело когда за этот промежуток вр. только одна ну две точки возникает... А когда их неизвестное множество и алгоритм разный, потому, что с каждой последующей точкой нужно перерасчитывать и перерисовывать все предыдущие...

Опять таки вспоминаю свой вариант- забить 60 ячеек по пикселю каждый, одна ячейка - одна минута и просто синхронизировать с базой...

Может какой пример бы мне что-то прояснил, но пока не увидил решения...
 

Balloon

Новичок
ну смотри..
1. допустим ширина графика 360px(для лекости подсчета).. => 1 минута на графике занимает в ширину 6px
2. делаем запрос к базе на получение записей за последний час...
3. если возвращается одна запись значит одноцветный график, если больше то след. алгоритм...
3.1. берем промежуток с первой по вторую.. считаем время в минутах.. из этого получаем длину первой полоски.. (6px*кол-во_минут)
3.2. потом берем промежуток со второй по третью..
3.n. и так далее
4. если записей вообще нет за последний час то берем просто последнюю в таблицу и рисуем одноцветный график соответсвующий цвету последней записи.
5. собсна все...
 

Beavis

Banned
Balloon
я ему это уже говорил...
только он хочет не советов, а решение готовое
 

qazaqq

Новичок
Balloon Действительно просто получается, спасибо!
Beavis Хм, спасибо, что разжевали:) Обязательно попробую, когда будет свободное время, а то работа командировки...
О результате сообщу!!!
 
Сверху