#! /bin/bash # script to generate graphics # tnka@linux-sottises.net # check general config file exists if ! [ -f /etc/mrtnk.setup ];then echo "Error: you have to put mrtnk.setup in /etc" exit 1 fi # Config file must be given if ! [ "$1" ];then echo "Error: provide the config file name" exit 1 fi # General Parameters . /etc/mrtnk.setup # Configuration file is read from command line CONFIG=$1 # # Determine all the targets TARGET_LIST=(`cat $CONFIG|grep -i target|grep -v "#"|cut -d"[" -f2|cut -d "]" -f1`) # Loop on all the targets for i in "${TARGET_LIST[@]}"; do # make the graphics only if the rrd file exists for the corresponding target if [ -f "$LOGS"/"$i".rrd ]; then # Default parameters for targets . $CONF/default.conf # Generate the temporary target parameters file cat $CONFIG|grep -i "\[$i\]"|grep -v "#"|grep -vi target|sed s/\\[.*\\]// > $LOGS/$i.tmp # Run the temporary target parameters file . $LOGS/$i.tmp # Delete the temporary target file rm $LOGS/$i.tmp #Some parameters TARGET=$i BACK=(-$DAY -$WEEK -$MONTH -$YEAR) STIME=(-300 -300 -300 -300) MOMENT=(day week month year) # Directories where to store html files and images if [ -n "$DIRECTORY" ];then if ! [ -d "$HTML/$DIRECTORY" ];then mkdir "$HTML/$DIRECTORY" fi if ! [ -d "$HTML/$DIRECTORY/$IMAGES" ];then mkdir "$HTML/$DIRECTORY/$IMAGES" fi IMAGEDIR="$HTML/$DIRECTORY/$IMAGES" else IMAGEDIR="$HTML/$IMAGES" fi #Beginning of the args building to generate graphics ARG="-w $XSIZE -h $YSIZE -v \"$UNIT\" -a PNG" if [ -n "$LOW" ];then ARG="$ARG -l $LOW" fi if [ -n "$UP" ];then ARG="$ARG -u $UP" fi if [ -n "$RIGID" ];then ARG="$ARG -r" fi if [ -n "$TITLE" ]; then ARG="$ARG -t \"$TITLE\"" fi if [ -n "$BASE" ]; then ARG="$ARG -b $BASE" fi if [ "$NO_LAZY" != "yes" ] && [ "$NO_LAZY" != "YES" ];then ARG="$ARG --lazy" fi if [ "$NO_HOLE" = "yes" ] || [ "$NO_HOLE" = "YES" ];then PREVIOUS=PREV else PREVIOUS=0 fi ARG="$ARG DEF:indata=$LOGS/$TARGET.rrd:ds0:AVERAGE" ARG="$ARG CDEF:inlegend=indata,$FACTOR,*" ARG="$ARG CDEF:in=inlegend,UN,$PREVIOUS,inlegend,IF" ARG="$ARG DEF:inmaxdata=$LOGS/$TARGET.rrd:ds0:MAX" ARG="$ARG CDEF:inmaxlegend=inmaxdata,$FACTOR,*" ARG="$ARG CDEF:inmax=inmaxlegend,UN,$PREVIOUS,inmaxlegend,IF" ARG="$ARG CDEF:indiff=inmax,in,-" ARG="$ARG DEF:outdata=$LOGS/$TARGET.rrd:ds1:AVERAGE" ARG="$ARG CDEF:outlegend=outdata,$FACTOR,*" ARG="$ARG DEF:outmaxdata=$LOGS/$TARGET.rrd:ds1:MAX" ARG="$ARG CDEF:outmaxlegend=outmaxdata,$FACTOR,*" if [ "$GRAPH" = inoutpeak ] || [ "$GRAPH" = inout ];then ARG="$ARG CDEF:outlegendi=0,outlegend,-" ARG="$ARG CDEF:out=outlegendi,UN,$PREVIOUS,outlegendi,IF" ARG="$ARG CDEF:outmaxlegendi=0,outmaxlegend,-" ARG="$ARG CDEF:outmax=outmaxlegendi,UN,$PREVIOUS,outmaxlegendi,IF" else ARG="$ARG CDEF:out=outlegend,UN,$PREVIOUS,outlegend,IF" ARG="$ARG CDEF:outmax=outmaxlegend,UN,$PREVIOUS,outmaxlegend,IF" fi ARG="$ARG CDEF:outdiff=outmax,out,-" if [ -n "$MAX" ];then ARG="$ARG HRULE:$MAX#$COLORINPEAK" fi if [ -n "$MIN" ];then ARG="$ARG HRULE:$MIN#$COLOROUTPEAK" fi LEGEND_IN="GPRINT:inlegend:MAX:\" Max %1.1lf %s$UNIT\"" LEGEND_IN="$LEGEND_IN GPRINT:inlegend:AVERAGE:\"Average %1.1lf %s$UNIT\"" LEGEND_IN="$LEGEND_IN GPRINT:inlegend:LAST:\"Current %1.1lf %s$UNIT\l\"" LEGEND_IN_PEAK="GPRINT:inmaxlegend:MAX:\" Max %1.1lf %s$UNIT\"" LEGEND_IN_PEAK="$LEGEND_IN_PEAK GPRINT:inmaxlegend:AVERAGE:\"Average %1.1lf %s$UNIT\"" LEGEND_IN_PEAK="$LEGEND_IN_PEAK GPRINT:inmaxlegend:LAST:\"Current %1.1lf %s$UNIT\l\"" LEGEND_OUT="GPRINT:outlegend:MAX:\" Max %1.1lf %s$UNIT\"" LEGEND_OUT="$LEGEND_OUT GPRINT:outlegend:AVERAGE:\"Average %1.1lf %s$UNIT\"" LEGEND_OUT="$LEGEND_OUT GPRINT:outlegend:LAST:\"Current %1.1lf %s$UNIT\l\"" LEGEND_OUT_PEAK="GPRINT:outmaxlegend:MAX:\" Max %1.1lf %s$UNIT\"" LEGEND_OUT_PEAK="$LEGEND_OUT_PEAK GPRINT:outmaxlegend:AVERAGE:\"Average %1.1lf %s$UNIT\"" LEGEND_OUT_PEAK="$LEGEND_OUT_PEAK GPRINT:outmaxlegend:LAST:\"Current %1.1lf %s$UNIT\l\"" # see what graphics to suppress TESTS[0]=`echo $SUPPRESS|grep -i d` TESTS[1]=`echo $SUPPRESS|grep -i w` TESTS[2]=`echo $SUPPRESS|grep -i m` TESTS[3]=`echo $SUPPRESS|grep -i y` DATE=`date` LDATE="COMMENT:\"$DATE\r\"" case "$GRAPH" in inoutpeak|INOUTPEAK) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then if [ "$j" != 0 ];then ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV STACK:indiff#$COLORINPEAK:\"$LEGENDINPEAK\" $LEGEND_IN_PEAK" ARGV="$ARGV AREA:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" ARGV="$ARGV STACK:outdiff#$COLOROUTPEAK:\"$LEGENDOUTPEAK\" $LEGEND_OUT_PEAK" else ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV AREA:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" fi ARGV="-s ${BACK[$j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; inout|INOUT) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV AREA:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; doublepeak|DOUBLEPEAK) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then if [ "$j" != 0 ]; then ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV STACK:indiff#$COLORINPEAK:\"$LEGENDINPEAK\" $LEGEND_IN_PEAK" ARGV="$ARGV LINE1:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" ARGV="$ARGV STACK:outdiff#$COLOROUTPEAK:\"$LEGENDOUTPEAK\" $LEGEND_OUT_PEAK" else ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV LINE1:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" fi ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; double|DOUBLE) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV LINE1:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; singlepeak|SINGLEPEAK) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then if [ "$j" != 0 ]; then ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV STACK:indiff#$COLORINPEAK:\"$LEGENDINPEAK\" $LEGEND_IN_PEAK" else ARGV="$ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" fi ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; single|SINGLE) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then ARGV="-e ${STIME[$j]} $ARG AREA:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; singlelinepeak|SINGLELINEPEAK) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then if [ "$j" != 0 ]; then ARGV="-e ${STIME[$j]} $ARG LINE1:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV STACK:indiff#$COLORINPEAK:\"$LEGENDINPEAK\" $LEGEND_IN_PEAK" else ARGV="-e ${STIME[$j]} $ARG LINE1:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" fi ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; singleline|SINGLELINE) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then ARGV="-e ${STIME[$j]} $ARG LINE1:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; doublelinepeak|DOUBLELINEPEAK) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then if [ "$j" != 0 ]; then ARGV="-e ${STIME[$j]} $ARG LINE1:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV STACK:indiff#$COLORINPEAK:\"$LEGENDINPEAK\" $LEGEND_IN_PEAK" ARGV="$ARGV LINE1:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" ARGV="$ARGV STACK:outdiff#$COLOROUTPEAK:\"$LEGENDOUTPEAK\" $LEGEND_OUT_PEAK" else ARGV="-e ${STIME[$j]} $ARG LINE1:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV LINE1:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" fi ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; doubleline|DOUBLELINE) for j in 0 1 2 3; do if [ -z "${TESTS[$j]}" ]; then ARGV="-e ${STIME[$j]} $ARG LINE1:in#$COLORIN:\"$LEGENDIN\" $LEGEND_IN" ARGV="$ARGV LINE1:out#$COLOROUT:\"$LEGENDOUT\" $LEGEND_OUT" ARGV="-s ${BACK[j]} $ARGV" IMG="$IMAGEDIR/$TARGET-${MOMENT[j]}.png" CMD="$RRD graph $IMG $ARGV $LDATE" echo $CMD > $LOGS/$i.$j.tmp . $LOGS/$i.$j.tmp > $IMAGEDIR/$i.${MOMENT[j]}.size rm $LOGS/$i.$j.tmp fi done ;; *) echo "Error in GRAPH for target $i" exit 1 ;; esac fi done