1 # no need for shebang - this file is loaded from charts.d.plugin
3 # _update_every is a special variable - it holds the number of seconds
4 # between the calls of the _update() function
10 export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/sbin"
12 # _check is called once, to find out if this chart should be enabled or not
14 require_cmd iw || return 1
16 local ev=$(iw dev | awk '
24 print "ap_devs[" i "]=\"" ssid "\""
31 /^[ \t]+ssid / { ssid = $2; }
32 /^[ \t]+type AP$/ { ap = 1; }
35 print "ap_devs[" i "]=\"" ssid "\""
42 # - 0 to enable the chart
43 # - 1 to disable the chart
45 [ ${#ap_devs[@]} -gt 0 ] && return 0
49 # _create is called once, to create the charts
53 for dev in "${!ap_devs[@]}"
55 ssid="${ap_devs[${dev}]}"
57 # create the chart with 3 dimensions
59 CHART ap_clients.${dev} '' "Connected clients to ${ssid} on ${dev}" "clients" ${dev} ap.clients line $((ap_priority + 1)) $ap_update_every
60 DIMENSION clients '' absolute 1 1
62 CHART ap_bandwidth.${dev} '' "Bandwidth for ${ssid} on ${dev}" "kilobits/s" ${dev} ap.net area $((ap_priority + 2)) $ap_update_every
63 DIMENSION received '' incremental 8 1024
64 DIMENSION sent '' incremental -8 1024
66 CHART ap_packets.${dev} '' "Packets for ${ssid} on ${dev}" "packets/s" ${dev} ap.packets line $((ap_priority + 3)) $ap_update_every
67 DIMENSION received '' incremental 1 1
68 DIMENSION sent '' incremental -1 1
70 CHART ap_issues.${dev} '' "Transmit Issues for ${ssid} on ${dev}" "issues/s" ${dev} ap.issues line $((ap_priority + 4)) $ap_update_every
71 DIMENSION retries 'tx retries' incremental 1 1
72 DIMENSION failures 'tx failures' incremental -1 1
74 CHART ap_signal.${dev} '' "Average Signal for ${ssid} on ${dev}" "dBm" ${dev} ap.signal line $((ap_priority + 5)) $ap_update_every
75 DIMENSION signal 'average signal' absolute 1 1
77 CHART ap_bitrate.${dev} '' "Bitrate for ${ssid} on ${dev}" "Mbps" ${dev} ap.bitrate line $((ap_priority + 6)) $ap_update_every
78 DIMENSION receive '' absolute 1 1000
79 DIMENSION transmit '' absolute -1 1000
80 DIMENSION expected 'expected throughput' absolute 1 1000
88 # _update is called continiously, to collect the values
90 # the first argument to this function is the microseconds since last update
91 # pass this parameter to the BEGIN statement (see bellow).
93 # do all the work to collect / calculate the values
95 # remember: KEEP IT SIMPLE AND SHORT
97 for dev in "${!ap_devs[@]}"
99 iw ${dev} station dump |\
116 /^[ \\t]+rx bytes:/ { rb += \$3 }
117 /^[ \\t]+tx bytes:/ { tb += \$3 }
118 /^[ \\t]+rx packets:/ { rp += \$3 }
119 /^[ \\t]+tx packets:/ { tp += \$3 }
120 /^[ \\t]+tx retries:/ { tr += \$3 }
121 /^[ \\t]+tx failed:/ { tf += \$3 }
122 /^[ \\t]+signal:/ { s += \$2; }
123 /^[ \\t]+rx bitrate:/ { x = \$3; rt += x * 1000; }
124 /^[ \\t]+tx bitrate:/ { x = \$3; tt += x * 1000; }
125 /^[ \\t]+expected throughput:(.*)Mbps/ {
127 sub(/Mbps/, \"\", x);
131 print \"BEGIN ap_clients.${dev}\"
132 print \"SET clients = \" c;
134 print \"BEGIN ap_bandwidth.${dev}\"
135 print \"SET received = \" rb;
136 print \"SET sent = \" tb;
138 print \"BEGIN ap_packets.${dev}\"
139 print \"SET received = \" rp;
140 print \"SET sent = \" tp;
142 print \"BEGIN ap_issues.${dev}\"
143 print \"SET retries = \" tr;
144 print \"SET failures = \" tf;
146 print \"BEGIN ap_signal.${dev}\"
147 print \"SET signal = \" s / c;
151 print \"BEGIN ap_bitrate.${dev}\"
152 print \"SET receive = \" rt / c;
153 print \"SET transmit = \" tt / c;
154 print \"SET expected = \" e / c;