# no need for shebang - this file is loaded from charts.d.plugin # netdata # real-time performance and health monitoring, done right! # (C) 2016 Costa Tsaousis # GPL v3+ # # _update_every is a special variable - it holds the number of seconds # between the calls of the _update() function ap_update_every= ap_priority=6900 declare -A ap_devs=() # _check is called once, to find out if this chart should be enabled or not ap_check() { require_cmd iw || return 1 local ev=$(run iw dev | awk ' BEGIN { i = ""; ssid = ""; ap = 0; } /^[ \t]+Interface / { if( ap == 1 ) { print "ap_devs[" i "]=\"" ssid "\"" } i = $2; ssid = ""; ap = 0; } /^[ \t]+ssid / { ssid = $2; } /^[ \t]+type AP$/ { ap = 1; } END { if( ap == 1 ) { print "ap_devs[" i "]=\"" ssid "\"" } } ') eval "${ev}" # this should return: # - 0 to enable the chart # - 1 to disable the chart [ ${#ap_devs[@]} -gt 0 ] && return 0 error "no devices found in AP mode, with 'iw dev'" return 1 } # _create is called once, to create the charts ap_create() { local ssid dev for dev in "${!ap_devs[@]}" do ssid="${ap_devs[${dev}]}" # create the chart with 3 dimensions cat < 0) { print \"BEGIN ap_clients.\" dev; print \"SET clients = \" c; print \"END\"; print \"BEGIN ap_bandwidth.\" dev; print \"SET received = \" rb; print \"SET sent = \" tb; print \"END\"; print \"BEGIN ap_packets.\" dev; print \"SET received = \" rp; print \"SET sent = \" tp; print \"END\"; print \"BEGIN ap_issues.\" dev; print \"SET retries = \" tr; print \"SET failures = \" tf; print \"END\"; if( c == 0 ) c = 1; print \"BEGIN ap_signal.\" dev; print \"SET signal = \" int(s / c); print \"END\"; print \"BEGIN ap_bitrate.\" dev; print \"SET receive = \" int(rt / c); print \"SET transmit = \" int(tt / c); print \"SET expected = \" int(e / c); print \"END\"; } zero_data(); } BEGIN { zero_data(); } /^DEVICE / { print_device(); dev = \$2; } /^Station/ { c++; } /^[ \\t]+rx bytes:/ { rb += \$3; } /^[ \\t]+tx bytes:/ { tb += \$3; } /^[ \\t]+rx packets:/ { rp += \$3; } /^[ \\t]+tx packets:/ { tp += \$3; } /^[ \\t]+tx retries:/ { tr += \$3; } /^[ \\t]+tx failed:/ { tf += \$3; } /^[ \\t]+signal:/ { x = \$2; s += x * 1000; } /^[ \\t]+rx bitrate:/ { x = \$3; rt += x * 1000; } /^[ \\t]+tx bitrate:/ { x = \$3; tt += x * 1000; } /^[ \\t]+expected throughput:(.*)Mbps/ { x=\$3; sub(/Mbps/, \"\", x); e += x * 1000; } END { print_device(); } " return 0 }