Захотелось мне странного – чтобы на графике RRD c температурой процессора был градиент вместо простой линии.
То, что вы видите выше – результат моих изысканий, изначально график выглядел примерно так:
Просто полка и не очень ясно, какая там обстановка, пока не глянешь на цифровые значения. А если учесть наличие других графиков на странице, то не заметить перегрев проще простого.
В интернетах нашел небольшой мануал по рисованию красивости – Grading with RRDtool Tutorialс картинкой:
Основная идея в том, чтобы каждый столбик графика рисовать с помощью правил в зависимости от высоты столбика:
"CDEF:shading10=ping_time,0.90,*" "AREA:shading10#E10000"
shading10 – это 90% от высоты нарисованного столбика shading2 (т.е. исходного числа ping_time). Математически это выглядит так:
shading10=ping_time*0.9
* В CDEF используются правила RPN – Reverse Polish notation (Обратная польская запись).
Так прорисовываются все столбики, от самого большого, до самого маленького.
График, конечно, красивый, но в отношении температуры, цвет столбца должен прямо зависеть от координаты, т.е. температуры. В моем случае, пробный график стал таким:
Даже если бы температура процессора была 20 градусов цельсия, график был бы точно таким же, а это не то, что требовалось. Добиться интуитивно понятной визуализации можно только привязав цвет к температуре.
Вторая попытка была ближе к правде 🙂
Но градиент выглядел не совсем градиентно))
* С градиентами отдельная история, я думал в сети есть какие-то онлайн инструменты для создания массива цветов градиента, оказывается, максимум, что есть, это простые инструменты – раз, два и три.
Дальше было:
Выглядит как негатив) Я попутал переменные и вышел такой компот. Поставив все на свои места, получил:
Заменил верхний цвет нижнего графика:
и обнаружил косяк: некоторое время не работал сбор параметров температуры и в базе значения nan. Когда попадаются такие значения, график рисуется градиентом в полный рост. Сделал дополнительную проверку переменной min и в отрисовке использую minn:
'CDEF:minn=min,UN,0,min,IF' 'CDEF:shading99=minn,100,LT,minn,100,IF' 'AREA:shading99#F20D6E' 'CDEF:shading95=minn,95,LT,minn,95,IF' 'AREA:shading95#E61A75' ... 'CDEF:shading05=minn,5,LT,minn,5,IF' 'AREA:shading05#00FFFF'
Есть еще один баг, но я считаю его не значительным. При получении данных из базы RRD, в последней минуте данные в значении nan (полагаю, они просто еще не попали в базу), и, после замены nan на 0, на графике рисуется вертикальная “полка” (точнее, “яма”), это видно на самом первом графике – темный столбик справа.
P.S.
на графике процессор имеет температуру 84С, на самом деле это не правда, BIOS говорит другие цифры, у жестких дисков 32-35С, а процессор на 84С страшно бы глючил или сгорел. Я думаю это температура в F (Фаренгейтах), но пока не доходят руки устранить этот баг 😉