command to check errors on log locally
Change-Id: Ib29ab0013179db7e4be915a54ef1bf7f5a0e6d31
diff --git a/tools/test/bin/onos-check-logs-local b/tools/test/bin/onos-check-logs-local
new file mode 100755
index 0000000..7d60676
--- /dev/null
+++ b/tools/test/bin/onos-check-logs-local
@@ -0,0 +1,118 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Checks the logs of the local ONOS instance and makes sure they are clean.
+# -----------------------------------------------------------------------------
+
+function __usage() {
+cat << _EOM_
+usage: $(basename $0) [--old|--ignore-store-exceptions] [node]
+
+options:
+ --ignore-store-exceptions
+ if specified, any store service exceptions are ignored
+ --old
+ if specified, the entire logs are searched for errors and exceptions;
+ otherwise logs are scanned only from the last server start-up
+
+ node the cluster node whose logs to inspect; default is \$OCI
+
+summary:
+ Checks the logs of the remote ONOS instance and makes sure they are clean.
+
+_EOM_
+}
+
+[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
+. $ONOS_ROOT/tools/build/envDefaults
+
+# Process options
+while [ -z $opts ] ; do
+ case "$1" in
+ --ignore-store-exceptions) export ise=1; shift;;
+ --old) export allLogs=1; shift;;
+ --*) __usage && exit 1;;
+ -h) __usage && exit 0;;
+ *) export opts=1;;
+ esac
+done
+
+remote=$ONOS_USER@${1:-$OCI}
+
+LOG=/tmp/onos-$ONOS_POM_VERSION/apache-karaf-$KARAF_VERSION/data/log/karaf.log*
+
+aux=/tmp/log.$$
+
+if [ -n "$allLogs" ]; then
+ egrep 'ERROR|Exception|Error' $LOG
+
+else
+ [ "uname" != 'Linux' ] && alias tac='tail -r'
+ tac $LOG | tr -d '\000' | awk -v ignoreStoreExceptions=${ise:-0} '
+ BEGIN { off = 0; fail = 0; exclusion = 0; expected = 0; trace = "";}
+ / org.apache.karaf.main.lock.SimpleFileLock lock/ {
+ exit fail;
+ }
+
+ # note: we are parsing log in reverse from the end
+ / EXPECTING_EXCEPTION_BEGIN/ {
+ print $0;
+ expected = 0;
+ }
+
+ / EXPECTING_EXCEPTION_END/ {
+ print $0;
+ expected = 1;
+ }
+
+ / ERROR / {
+ if (exception && !exclusion) {
+ print $0;
+ exception = 0;
+
+ if (!expected) {
+ fail = 1;
+ }
+ }
+ exclusion = 0;
+ }
+ / WARN / {
+ if (exception && !exclusion) {
+ print $0;
+ exception = 0;
+ }
+ exclusion = 0;
+ }
+ / INFO / {
+ exception = 0;
+ exclusion = 0;
+ }
+
+ # Sanctioned exclusions for exceptions in the distributed stores; one pattern per exclusion
+ /org\.onosproject\.store\.service\..*Exception/ { exclusion = ignoreStoreExceptions; }
+
+ /^[a-zA-Z0-9.]*(Exception|Error)/ {
+ if (!exclusion) {
+ print trace;
+ print $0;
+ exception = 1;
+ if (!expected) {
+ fail = 1;
+ }
+ trace = "";
+ }
+ }
+
+ /( at|Caused by:) / {
+ trace = trace "\n" $0;
+ }
+
+ # Sanctioned exclusions for exceptions in third-party code; one pattern per exclusion
+ /at org\.apache\.felix\.scr\.impl\.ComponentRegistry\.getComponents\(ComponentRegistry\.java:199\)/ { exclusion = 1; }
+ /at org\.apache\.karaf\.service\.guard\.impl\.GuardProxyCatalog.1.run\(GuardProxyCatalog\.java:253\)/ { exclusion = 1; }
+
+ END { exit fail; }
+ ' > $aux
+ status=$?
+ tac $aux && rm $aux
+ exit $status
+fi