#!/bin/ash

PIPE='/tmp/monitoring-pipe'
if [[ ! -p $PIPE ]]; then
    mkfifo $PIPE
fi

MAC=$(cat /sys/class/net/eth0/address)
log-upload `printf "monitoring-%s" $MAC` $PIPE /etc/monitoring-upload.cfg &
LOG_UPLOAD_PID=$!
trap "kill -TERM $LOG_UPLOAD_PID; exit 0" TERM

while true; do
    OUTPUT=$(
        # CPU (load avg 1m, no. of kernel scheduling entities):
        # "0.00,42"
        cat /proc/loadavg | awk {'split($4, a, "/"); print $1 "," a[2]'}

        # RAM (used, free, shared, buffers):
        # "27600,1596,80,3968"
        free | grep Mem | awk {'print $3 "," $4 "," $5 "," $6'}

        # Disk usage (list of mountpoints and usages):
        # "/rom,100%;/tmp,1%;/overlay,22%;/dev,0%"
        df | grep '/' | grep -v '/$' | awk {'print $6 "," $5'} \
            | xargs | tr ' ' ';'

        # Uptime (in seconds):
        # "83917.61"
        cat /proc/uptime | awk {'print $1'}

        # Default gateway (or gateways):
        # "eth0.1"
        route | grep "^default" | grep -o "[^ ]*$" | xargs | tr ' ' ';'

        # MAC addresses of connected clients (or parent AP):
        # "eeeeeeeeeeee;ffffffffffff"
        iw dev wlan0 station dump | grep wlan0 | awk {'print $2'} \
            | xargs | tr ' ' ';' | tr -d ':'

        # IP addresses and corresponding RX and TX stats on given interfaces:
        # (eth0.1 IP, RX, TX; wlan0 IP, RX, TX; tun0 IP, RX, TX)
        # ",0,10619935;192.168.42.43,1699902,3050187;192.168.10.9,17736,11940"
        for i in "eth0.1" "wlan0" "tun0"; do
            addr=`ip a show $i | grep 'inet ' \
                | awk {'split($2, a, "/"); print a[1]'}`;
            rxtx=`cat /proc/net/dev | grep $i | awk {'print $2 "," $10'}`;
            printf '%s,%s\n' "${addr:-}" "${rxtx:-}";
        done | xargs | tr ' ' ';'

        # Image version:
        # "image-19"
        cat /etc/heni_image
    )
    # Enumerate outputs:
    echo "$OUTPUT" | awk {'print NR$0'} > $PIPE
    sleep 59
done
