1#!/bin/sh 2 3if [ $# -ne 2 ] 4then 5 echo "usage: $0 rrdname pngname" 6 exit 1 7fi 8rrdname="${1}" 9pngname="${2}" 10 11# Prefixes for rrd and png files. Note that if the prefix is a directory, it must incldue the trailing slash 12# If no value is set, the files are located in the current directory when the cgi script runs 13rrdprefix= 14pngprefix=/tmp/ 15 16 17# Graph dimensions 18#graph_height=240 19#graph_width=720 20graph_height=280 21graph_width=840 22 23# Preferred font 24font="DejaVuSansMono" 25 26# Latency breakpoints in milliseconds 27latency_s0=20 28latency_s1=40 29latency_s2=80 30latency_s3=160 31latency_s4=320 32 33# Latency colors 34latency_c0="dddddd" 35latency_c1="ddbbbb" 36latency_c2="d4aaaa" 37latency_c3="cc9999" 38latency_c4="c38888" 39latency_c5="bb7777" 40 41# Standard deviation color & opacity 42stddev_c="55333355" 43 44# Loss color 45loss_c="ee0000" 46 47 48gen_graph() 49{ 50 png=$1 51 rrd=$2 52 start=$3 53 end=$4 54 step=$5 55 description=$6 56 57 echo "<RRD::GRAPH \"${png}\"" 58 echo "--lazy" 59 echo "--start \"${start}\" --end \"${end}\" --step \"${step}\"" 60 echo "--height ${graph_height} --width ${graph_width}" 61 echo "--title \"Average Latency and Packet Loss - ${description}\"" 62 echo "--disable-rrdtool-tag" 63 echo "--color BACK#ffffff" 64 echo "--font DEFAULT:9:\"${font}\"" 65 echo "--font AXIS:8:\"${font}\"" 66 67 echo "DEF:latency_us=\"${rrd}\":latency:AVERAGE:step=\"${step}\"" 68 echo "CDEF:latency=latency_us,1000,/" 69 echo "CDEF:latency_s0=latency,${latency_s0},MIN" 70 echo "CDEF:latency_s1=latency,${latency_s1},MIN" 71 echo "CDEF:latency_s2=latency,${latency_s2},MIN" 72 echo "CDEF:latency_s3=latency,${latency_s3},MIN" 73 echo "CDEF:latency_s4=latency,${latency_s4},MIN" 74 echo "VDEF:latency_min=latency,MINIMUM" 75 echo "VDEF:latency_max=latency,MAXIMUM" 76 echo "VDEF:latency_avg=latency,AVERAGE" 77 echo "VDEF:latency_last=latency,LAST" 78 79 echo "DEF:stddev_us=\"${rrd}\":stddev:AVERAGE:step=\"${step}\"" 80 echo "CDEF:stddev=stddev_us,1000,/" 81 echo "VDEF:stddev_min=stddev,MINIMUM" 82 echo "VDEF:stddev_max=stddev,MAXIMUM" 83 echo "VDEF:stddev_avg=stddev,AVERAGE" 84 echo "VDEF:stddev_last=stddev,LAST" 85 86 echo "DEF:loss=\"${rrd}\":loss:AVERAGE:step=\"${step}\"" 87 echo "CDEF:loss_neg=loss,-1,*" 88 echo "VDEF:loss_min=loss,MINIMUM" 89 echo "VDEF:loss_max=loss,MAXIMUM" 90 echo "VDEF:loss_avg=loss,AVERAGE" 91 echo "VDEF:loss_last=loss,LAST" 92 93 echo "COMMENT:\" Min Max Avg Last\n\"" 94 95 echo "COMMENT:\" \"" 96 echo "AREA:latency#${latency_c5}" 97 echo "AREA:latency_s4#${latency_c4}" 98 echo "AREA:latency_s3#${latency_c3}" 99 echo "AREA:latency_s2#${latency_c2}" 100 echo "AREA:latency_s1#${latency_c1}" 101 echo "AREA:latency_s0#${latency_c0}" 102 echo "LINE1:latency#000000:\"Latency \"" 103 echo "GPRINT:\"latency_min:%8.3lf ms\t\"" 104 echo "GPRINT:\"latency_max:%8.3lf ms\t\"" 105 echo "GPRINT:\"latency_avg:%8.3lf ms\t\"" 106 echo "GPRINT:\"latency_last:%8.3lf ms\n\"" 107 108 echo "COMMENT:\" \"" 109 echo "LINE1:stddev#${stddev_c}:\"Stddev \"" 110 echo "GPRINT:\"stddev_min:%8.3lf ms\t\"" 111 echo "GPRINT:\"stddev_max:%8.3lf ms\t\"" 112 echo "GPRINT:\"stddev_avg:%8.3lf ms\t\"" 113 echo "GPRINT:\"stddev_last:%8.3lf ms\n\"" 114 115 echo "COMMENT:\" \"" 116 echo "AREA:loss_neg#${loss_c}:\"Loss \"" 117 echo "GPRINT:\"loss_min:%4.1lf %%\t\t\"" 118 echo "GPRINT:\"loss_max:%4.1lf %%\t\t\"" 119 echo "GPRINT:\"loss_avg:%4.1lf %%\t\t\"" 120 echo "GPRINT:\"loss_last:%4.1lf %%\n\"" 121 echo "COMMENT:\" \n\"" 122 echo "GPRINT:\"latency_last:Ending at %H\\:%M on %B %d, %Y\\r:strftime\"" 123 124 echo ">" 125 echo "<p>" 126} 127 128( 129 echo "#!/usr/bin/rrdcgi" 130 echo "<html> <head> <title>Latency Statistics for ${rrdname}</title> </head> <body>" 131 132 gen_graph "${pngprefix}${pngname}-1.png" "${rrdprefix}${rrdname}.rrd" "now-8h" "now" "60" "Last 8 hours - 1 minute intervals" 133 gen_graph "${pngprefix}${pngname}-2.png" "${rrdprefix}${rrdname}.rrd" "now-36h" "now" "300" "Last 36 hours - 5 minute intervals" 134 gen_graph "${pngprefix}${pngname}-3.png" "${rrdprefix}${rrdname}.rrd" "now-8d" "now" "1800" "Last 8 days - 30 minute intervals" 135 gen_graph "${pngprefix}${pngname}-4.png" "${rrdprefix}${rrdname}.rrd" "now-60d" "now" "14400" "Last 60 days - 4 hour intervals" 136 gen_graph "${pngprefix}${pngname}-5.png" "${rrdprefix}${rrdname}.rrd" "now-1y" "now" "86400" "Last 1 year - 1 day intervals" 137 gen_graph "${pngprefix}${pngname}-6.png" "${rrdprefix}${rrdname}.rrd" "now-4y" "now" "86400" "Last 4 years - 1 day intervals" 138 139 echo "</body> </html>" 140) > "${pngname}.cgi" 141