Como eu insiro um VRULE no RRDTool em tempo de execução com uma variável no Bash?

0

Estou gerando vários gráficos com sucesso com o incrível aplicativo RRDTool. No entanto, estou tendo alguns problemas com a opção VRULE durante o gráfico.

Estou gerando os gráficos com um script Bash. Por enquanto, estou tentando desenhar uma linha vermelha vertical à meia-noite (na UTC + 02: 00).

O código para obter os últimos 2 tempos da meia-noite na época:

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

Então, se eu echo $SAST ou $YEST , isso me dará a hora da meia-noite da noite anterior ou do dia anterior.

Aqui está o trecho de trabalho para (um dos) gráficos:

$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]'

Como você pode ver, o gráfico abrange as últimas 36 horas, o que inclui dois períodos intermediários. Eu tentei adicionar as variáveis $SAST e $YEST de algumas maneiras, mas elas continuam sendo lidas como os nomes das variáveis, não como os valores das variáveis.

Eu tentei adicionar:

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

e

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

Mas as marcas de aspas estão fazendo com que as variáveis sejam interpretadas como nomes de variáveis.

Eu realmente não quero recriar o arquivo data.rrd , pois ele contém muitos dados históricos. Isso significa que eu preciso desenhar essas linhas verticais no estágio graph e não no estágio update .

    
por Jim 13.10.2016 / 10:40

2 respostas

0

Depois de muita tentativa e erro (mais sobre isso abaixo)

Descobri que não posso ter todos os argumentos entre aspas.

Acabei com isso:

$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

Tentei concatenar todo o graph em uma variável e depois executar essa variável, mas ela falhou de forma espetacular, pois estava removendo as aspas simples e acreditava que qualquer espaço significava um novo comando ou função resultando em erros como ERROR: 'T' is not a valid function name (do "T" em - título 'Contagem de Tráfego Pi (wlan0)' ).

Então tentei remover todos os espaços fisicamente (e com \ ), mas ainda recebi o mesmo erro, desta vez foi de mim que gerou a data de hoje:

--watermark "Graph Drawn 'date'"

Que acontece de ser "quinta-feira".

Espero que isso ajude alguém com o mesmo problema que eu tive.

    
por 13.10.2016 / 16:03
0

Eu tento desenhar uma linha vertical a cada 6 horas é meu script de trabalho

#!/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"
    
por 28.09.2018 / 19:47

Tags