#!/bin/bash
# -----------------------------------------------------------------------------
# Checks the logs of the remote ONOS instance and makes sure they are clean.
# -----------------------------------------------------------------------------

function __usage() {
cat << _EOM_

usage:
 $(basename $0) [node] ['old']

options:
 - [node]  : The node whose logs to inspect. The default is \$OCI.
 - ['old'] : If 'old' is specified, the logs are simply searched for errors
             and exceptions, and they are displayed.

summary:
 Checks the logs of the remote ONOS instance and makes sure they are clean.

_EOM_
}

[ "$1" = "-h" ] && __usage && exit 0

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

remote=$ONOS_USER@${1:-$OCI}

LOG=$ONOS_INSTALL_DIR/log/karaf.log*

aux=/tmp/log.$$

if [ "$2" = "old" ]; then
    ssh $remote "egrep 'ERROR|Exception|Error' $LOG"

else
    ssh $remote "
        [ "'`uname`'" != "'"Linux"'" ] && alias tac='tail -r'
        tac $LOG | awk '
            BEGIN { off = 0; fail = 0; }
            / org.apache.karaf.main.lock.SimpleFileLock lock/ {
                off = 1;
                exit fail;
            }

            / ERROR / {
                if (!off) {
                    print \$0;
                    exc = 0;
                    fail = 1;
                }
            }
            / WARN / {
                if (!off && exc) {
                    print \$0;
                    exc = 0;
                }
            }

            /^[a-zA-Z0-9.]*(Exception|Error)/ {
                if (!off) {
                    print \$0;
                    exc = 1;
                    fail = 1;
                }
            }

            /	at / {
                if (!off) {
                    print \$0;
                }
            }
        END { exit fail; }
        ' > $aux
        status=\$?
        tac $aux && rm $aux
        exit \$status
    "
fi
