diff --git a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher index d835acd..cffb0d2 100755 --- a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher +++ b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher @@ -9,15 +9,15 @@ test -f /tmp/started || exit #Get the configuration from the uci configuration file #If it does not exists, then get it from a normal bash file with variables. if [ -f /etc/config/nodewatcher ];then - SCRIPT_ERROR_LEVEL=`uci get nodewatcher.@script[0].error_level` - SCRIPT_LOGFILE=`uci get nodewatcher.@script[0].logfile` - SCRIPT_DATA_FILE=`uci get nodewatcher.@script[0].data_file` - MESH_INTERFACE=`uci get nodewatcher.@network[0].mesh_interface` - IFACEBLACKLIST=`uci get nodewatcher.@network[0].iface_blacklist` - IPWHITELIST=`uci get nodewatcher.@network[0].ip_whitelist` - SCRIPT_STATUS_FILE=`uci get nodewatcher.@script[0].status_text_file` + SCRIPT_ERROR_LEVEL=`uci get nodewatcher.@script[0].error_level` + SCRIPT_LOGFILE=`uci get nodewatcher.@script[0].logfile` + SCRIPT_DATA_FILE=`uci get nodewatcher.@script[0].data_file` + MESH_INTERFACE=`uci get nodewatcher.@network[0].mesh_interface` + IFACEBLACKLIST=`uci get nodewatcher.@network[0].iface_blacklist` + IPWHITELIST=`uci get nodewatcher.@network[0].ip_whitelist` + SCRIPT_STATUS_FILE=`uci get nodewatcher.@script[0].status_text_file` else - . `dirname $0`/nodewatcher_config + . `dirname $0`/nodewatcher_config fi if [ $SCRIPT_ERROR_LEVEL -gt "1" ]; then @@ -32,73 +32,73 @@ fi #this method checks id the logfile has bekome too big and deletes the first X lines delete_log() { - if [ -f $SCRIPT_LOGFILE ]; then - if [ `ls -la $SCRIPT_LOGFILE | awk '{ print $5 }'` -gt "6000" ]; then - sed -i '1,60d' $SCRIPT_LOGFILE + if [ -f $SCRIPT_LOGFILE ]; then + if [ `ls -la $SCRIPT_LOGFILE | awk '{ print $5 }'` -gt "6000" ]; then + sed -i '1,60d' $SCRIPT_LOGFILE err "`date`: Logfile has been made smaller" - fi - fi + fi + fi } inArray() { - local value - for value in $1; do - if [ "$value" = "$2" ]; then - return 0 - fi - done - return 1 + local value + for value in $1; do + if [ "$value" = "$2" ]; then + return 0 + fi + done + return 1 } #this method generates the crawl data xml file that is beeing fetched by netmon #and provided by a small local httpd crawl() { - #Get system data from other locations - err "`date`: Collecting basic system status data" - hostname="$(cat /proc/sys/kernel/hostname)" - description="$(uci get system.@system[0].description)" - if [ -n "$description" ]; then - description="$description" - fi - latitude="$(uci get system.@system[0].latitude)" - longitude="$(uci get system.@system[0].longitude)" - if [ -n "$longitude" -a -n "$latitude" ]; then - geo="$latitude$longitude"; - fi - position_comment="$(uci get system.@system[0].position_comment)" - if [ -n "$position_comment" ]; then - position_comment="$position_comment" - fi - contact="$(uci get system.@system[0].contact)" - if [ -n "$contact" ]; then - contact="$contact" - fi - uptime=$(awk '{ printf ""$1""$2"" }' /proc/uptime) - + #Get system data from other locations + err "`date`: Collecting basic system status data" + hostname="$(cat /proc/sys/kernel/hostname)" + description="$(uci get system.@system[0].description)" + if [ -n "$description" ]; then + description="$description" + fi + latitude="$(uci get system.@system[0].latitude)" + longitude="$(uci get system.@system[0].longitude)" + if [ -n "$longitude" -a -n "$latitude" ]; then + geo="$latitude$longitude"; + fi + position_comment="$(uci get system.@system[0].position_comment)" + if [ -n "$position_comment" ]; then + position_comment="$position_comment" + fi + contact="$(uci get system.@system[0].contact)" + if [ -n "$contact" ]; then + contact="$contact" + fi + uptime=$(awk '{ printf ""$1""$2"" }' /proc/uptime) + memory=$(awk ' /^MemTotal/ { printf ""$2"" } /^Cached:/ { printf ""$2"" } /^Buffers/ { printf ""$2"" } /^MemFree/ { printf ""$2"" } ' /proc/meminfo) - cpu=$(awk -F': ' ' + cpu=$(awk -F': ' ' /model/ { printf ""$2"" } /system type/ { printf ""$2"" } ' /proc/cpuinfo) - model="$(cat /var/sysinfo/model)" - local_time="`date +%s`" - load=$(awk '{ printf ""$3""$4"" }' /proc/loadavg) + model="$(cat /var/sysinfo/model)" + local_time="`date +%s`" + load=$(awk '{ printf ""$3""$4"" }' /proc/loadavg) err "`date`: Collecting version information" - - batman_adv_version=$(cat /sys/module/batman_adv/version) - kernel_version=$(uname -r) - fastd_version=$(fastd -v | awk '{ print $2 }') - nodewatcher_version=$SCRIPT_VERSION - if [ -f "$SCRIPT_STATUS_FILE" ]; then - status_text="$(cat "$SCRIPT_STATUS_FILE")" - fi + batman_adv_version=$(cat /sys/module/batman_adv/version) + kernel_version=$(uname -r) + fastd_version=$(fastd -v | awk '{ print $2 }') + nodewatcher_version=$SCRIPT_VERSION + + if [ -f "$SCRIPT_STATUS_FILE" ]; then + status_text="$(cat "$SCRIPT_STATUS_FILE")" + fi # example for /etc/openwrt_release: #DISTRIB_ID="OpenWrt" @@ -107,7 +107,7 @@ crawl() { #DISTRIB_CODENAME="attitude_adjustment" #DISTRIB_TARGET="atheros/generic" #DISTRIB_DESCRIPTION="OpenWrt Attitude Adjustment 12.09-rc1" - . /etc/openwrt_release + . /etc/openwrt_release distname=$DISTRIB_ID distversion=$DISTRIB_RELEASE @@ -116,14 +116,14 @@ crawl() { #BUILD_DATE="build date: Di 29. Jan 19:33:34 CET 2013" #OPENWRT_CORE_REVISION="35298" #OPENWRT_FEEDS_PACKAGES_REVISION="35298" - . /etc/firmware_release - SYSTEM_DATA="online$status_text$hostname${description}${geo}${position_comment}${contact}$distname$distversion$cpu$model$memory$load$uptime$local_time$batman_adv_version$kernel_version$fastd_version$nodewatcher_version$FIRMWARE_VERSION$FIRMWARE_COMMUNITY$BUILD_DATE$OPENWRT_CORE_REVISION$OPENWRT_FEEDS_PACKAGES_REVISION" + . /etc/firmware_release + SYSTEM_DATA="online$status_text$hostname${description}${geo}${position_comment}${contact}$distname$distversion$cpu$model$memory$load$uptime$local_time$batman_adv_version$kernel_version$fastd_version$nodewatcher_version$FIRMWARE_VERSION$FIRMWARE_COMMUNITY$BUILD_DATE$OPENWRT_CORE_REVISION$OPENWRT_FEEDS_PACKAGES_REVISION" err "`date`: Collecting information from network interfaces" - #Get interfaces - interface_data="" - #Loop interfaces + #Get interfaces + interface_data="" + #Loop interfaces for filename in `grep 'up\|unknown' /sys/class/net/*/operstate`; do ifpath=${filename%/operstate*} iface=${ifpath#/sys/class/net/} @@ -145,7 +145,7 @@ crawl() { traffic_rx=`cat $ifpath/statistics/rx_bytes` traffic_tx=`cat $ifpath/statistics/tx_bytes` - + interface_data=$interface_data"<$iface>$iface$addrs$traffic_rx$traffic_tx" interface_data=$interface_data$(iwconfig ${iface} 2>/dev/null | awk -F':' ' @@ -155,10 +155,10 @@ crawl() { /Freq/{ split($3, f, " "); printf ""f[1]f[2]"" } /Tx-Power/{ split($0, p, "="); sub(/[[:space:]]*$/, "", p[2]); printf ""p[2]"" } ')"" - done + done err "`date`: Collecting information from batman advanced and it´s interfaces" - #B.A.T.M.A.N. advanced + #B.A.T.M.A.N. advanced if [ -f /sys/module/batman_adv/version ]; then for iface in $(grep active /sys/class/net/*/batman_adv/iface_status); do status=${iface#*:} @@ -184,41 +184,41 @@ crawl() { i++ } }' /sys/kernel/debug/batman_adv/bat0/originators) - - batman_adv_gateway_mode=$(batctl gw) - - batman_adv_gateway_list=$(awk \ - 'BEGIN { FS=" "; i=0 } - /Gateway/ { next } - /No gateways/ { next } - { sub("=>", "true", $0) - sub(" ", "false", $0) - sub("\\(", "", $0) - sub("\\)", "", $0) - sub("\\[", "", $0) - sub("\\]:", "", $0) - sub(" ", " ", $0) - printf ""$1""$2""$3""$4""$5""$6" "$7" "$8"" - i++ - }' /sys/kernel/debug/batman_adv/bat0/gateways) + + batman_adv_gateway_mode=$(batctl gw) + + batman_adv_gateway_list=$(awk \ + 'BEGIN { FS=" "; i=0 } + /Gateway/ { next } + /No gateways/ { next } + { sub("=>", "true", $0) + sub(" ", "false", $0) + sub("\\(", "", $0) + sub("\\)", "", $0) + sub("\\[", "", $0) + sub("\\]:", "", $0) + sub(" ", " ", $0) + printf ""$1""$2""$3""$4""$5""$6" "$7" "$8"" + i++ + }' /sys/kernel/debug/batman_adv/bat0/gateways) fi err "`date`: Collecting information about conected clients" - #CLIENTS - client_count=0 - CLIENT_INTERFACES=$(bridge link | awk '$2 !~/^bat/{ printf $2" " }') - for clientif in ${CLIENT_INTERFACES}; do - local cc=$(bridge fdb show br $MESH_INTERFACE brport $clientif | grep -v self | grep -v permanent -c) - client_count=$((client_count + $cc)) - done + #CLIENTS + client_count=0 + CLIENT_INTERFACES=$(bridge link | awk '$2 !~/^bat/{ printf $2" " }') + for clientif in ${CLIENT_INTERFACES}; do + local cc=$(bridge fdb show br $MESH_INTERFACE brport $clientif | grep -v self | grep -v permanent -c) + client_count=$((client_count + $cc)) + done err "`date`: Putting all information into a XML-File and save it at "$SCRIPT_DATA_FILE - DATA="$SYSTEM_DATA$interface_data$BATMAN_ADV_INTERFACES$batman_adv_originators$batman_adv_gateway_mode$batman_adv_gateway_list$client_count" + DATA="$SYSTEM_DATA$interface_data$BATMAN_ADV_INTERFACES$batman_adv_originators$batman_adv_gateway_mode$batman_adv_gateway_list$client_count" - #write data to hxml file that provides the data on httpd - SCRIPT_DATA_DIR=$(dirname $SCRIPT_DATA_FILE) - test -d $SCRIPT_DATA_DIR || mkdir -p $SCRIPT_DATA_DIR - echo $DATA | gzip | tee $SCRIPT_DATA_FILE | alfred -s 64 + #write data to hxml file that provides the data on httpd + SCRIPT_DATA_DIR=$(dirname $SCRIPT_DATA_FILE) + test -d $SCRIPT_DATA_DIR || mkdir -p $SCRIPT_DATA_DIR + echo $DATA | gzip | tee $SCRIPT_DATA_FILE | alfred -s 64 } LANG=C