Я сгенерировал несколько графиков успешно с помощью классного приложения RRDTool. Тем не менее, у меня есть некоторые проблемы с опцией VRULE при построении графиков.

Я генерирую графики с помощью сценария Bash. Сейчас я пытаюсь нарисовать вертикальную красную линию в полночь (в UTC+02:00).

Код для получения последних 2 часов ночи в эпоху:

NOW=`date +%s`
DAY=86400
ZONE=7200
LDAY=$((NOW/DAY))
MID=$((LDAY*DAY))
SAST=$((MID-ZONE))
YEST=$((SAST-DAY))

Так что, если я echo либо $SAST или $YEST это даст мне время , эпоха в полночь прошлой ночью или днем раньше.

Вот рабочий фрагмент (одного из) графиков:

$RRDTOOL graph /var/www/images/graphs/wdata36h.png                      \
--title 'Pi Traffic Count (wlan0)'                                      \
--watermark "Graph Drawn `date`"                                        \
--vertical-label 'Bytes'                                                \
--lower-limit '0'                                                       \
--rigid                                                                 \
--alt-autoscale                                                         \
--units=si                                                              \
--width '700'                                                           \
--height '200'                                                          \
--full-size-mode                                                        \
--start end-36h                                                         \
'DEF:wrx=/usr/local/bin/system/data.rrd:wrx:AVERAGE'                    \
'DEF:wtx=/usr/local/bin/system/data.rrd:wtx:AVERAGE'                    \
'AREA:wtx#0000FFFF:Upload\:'                                            \
'GPRINT:wtx:LAST:\:%8.2lf %s]'                                          \
'STACK:wrx#00CC00FF:Download\:'                                         \
'GPRINT:wrx:LAST:\:%8.2lf %s]'

Как вы можете видеть, график охватывает последние 36 часов, который включает в себя 2 ночи. Я попытался добавить переменные $SAST и $YEST несколькими способами, но он продолжает читать их как имена переменных, а не как значения переменных.

Я попытался добавить:

'VRULE:$YEST#FF0000' \
'VRULE:$SAST#FF0000' \

а также

'VDEF:yest=$YEST'   \
'VDEF:sast=$SAST'   \
'VRULE:yest#FF0000' \
'VRULE:sast#FF0000' \

Но кавычки приводят к тому, что переменные интерпретируются как имена переменных.

Я действительно не хочу воссоздавать файл data.rrd как в нем много исторических данных. Это означает, что мне нужно рисовать эти вертикальные линии на этапе graph а не на этапе update .

2 ответа2

0

Я пытаюсь рисовать вертикальную линию каждые 6 часов, это мой рабочий сценарий

#!/bin/sh
NOW=`date +%s`
DAY=86400
day6=21600
ZONE=10800
LDAY=$((NOW/DAY))
MID=$((LDAY*DAY))
SAST=$((MID-ZONE))
sa6=$((SAST+day6))
sa12=$((SAST+day6*2))
sa18=$((SAST+day6*3))
#YEST=$((SAST+43200))

bsd="/home/alex112/us/u2"
#dat0=date -u -d $diff" +%-D
rrdtool graph $bsd/temp01.png       \
--watermark "Graph Drawn `date`"   \
 -w 600 -h 220 -v "Temperature"     \
--upper-limit 10 --lower-limit -8   \
  DEF:t11=$bsd/temp.rrd:t1:AVERAGE  \
  DEF:t12=$bsd/temp.rrd:t2:AVERAGE  \
  CDEF:ct11=t11,10,/                \
  CDEF:ct12=t12,10,/                \
  LINE1:ct11#00FF00:"fridge"        \
  LINE1:ct12#0000FF:"stock"         \
  HRULE:0#000000:"Zero Level"      \
  HRULE:8#FF0000:"Max temp"        \
  HRULE:-6#FF0000:"Min Fridge"     \
  VRULE:$SAST#FF0000:   \
  VRULE:$sa6#FF0000:   \
  VRULE:$sa12#FF0000:   \
  VRULE:$sa18#FF0000:"Zero time"
0

После МНОГО проб и ошибок (подробнее об этом ниже)

Я обнаружил, что не могу привести все аргументы в кавычки.

Я закончил с этим:

$RRDTOOL graph /var/www/images/graphs/wdata36h.png                      \
--title 'Pi Traffic Count (wlan0)'                                      \
--watermark "Graph Drawn `date`"                                        \
--vertical-label 'Bytes'                                                \
--lower-limit '0'                                                       \
--rigid                                                                 \
--alt-autoscale                                                         \
--units=si                                                              \
--width '700'                                                           \
--height '200'                                                          \
--full-size-mode                                                        \
--start end-36h                                                         \
'DEF:wrx=/usr/local/bin/system/data.rrd:wrx:AVERAGE'                    \
'DEF:wtx=/usr/local/bin/system/data.rrd:wtx:AVERAGE'                    \
'AREA:wtx#0000FFFF:Upload\:'                                            \
'GPRINT:wtx:LAST:\:%8.2lf %s]'                                          \
'STACK:wrx#00CC00FF:Download\:'                                         \
'GPRINT:wrx:LAST:\:%8.2lf %s]'                                          \
VRULE:$YEST#FF0000                                                      \
VRULE:$SAST#FF0000

Я попытался объединить весь graph в одну переменную, а затем запустить эту переменную, но он потерпел неудачу, так как удалял одинарные кавычки, а затем полагал, что любой пробел означает новую команду или функцию, приводящую к ошибкам типа ERROR: 'T' is not a valid function name (из "T" в --title 'Pi Traffic Count (wlan0)').

Затем я попытался удалить все пробелы физически (и с \), но все равно получил ту же ошибку, на этот раз она была от меня, генерируя сегодняшнюю дату:

--watermark "Graph Drawn `date`"

Который бывает "четверг".

Надеюсь, это поможет кому-то с той же проблемой, что и у меня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .