blob: 56ed544f0ba100579577365b4f238be483094747 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2015-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# -----------------------------------------------------------------------------
# Tool to stitch together ONOS logs collected via onos-diagniostics tool.
# -----------------------------------------------------------------------------
function usage {
echo "usage: onos-log-query [-n query-name] [-f from-time] [-t to-time] [-x] [node]" >&2
exit 1
}
name=query # default name
while getopts n:f:t:x?h o; do
case "$o" in
n) name="$OPTARG";;
f) from="$OPTARG";;
t) to="$OPTARG";;
x) nostt=1;;
*) usage;;
esac
done
let OPC=$OPTIND-1
shift $OPC
[ "$name" = "karaf" ] && echo "Name cannot be karaf" && usage
function stitchLogs {
awk -v from="${from}" -v to="${to}" -v nostt=${nostt:-0} \
-v TS="[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}" '
TS {
on = (from == "" || $1 >= from) && (to == "" || $1 <= to);
if (on) { print $0; next; }
}
{ if (on && !nostt) { print $0; } }
' FS='|' $(ls -r1 karaf.log*) > ${name}.log
}
function stitchNodeLogs {
pushd $1 &>/dev/null
stitchLogs
popd &>/dev/null
}
if [ $# -eq 1 -a -d "$1" ]; then
stitchNodeLogs $1 && cat $1/${name}.log
elif [ $# -ge 1 ]; then
echo "No node directory for $1" >&2
usage
elif ls karaf.log &>/dev/null; then
stitchLogs && cat ${name}.log
elif ls */karaf.log &>/dev/null; then
for node in $(ls */karaf.log | cut -d/ -f1); do
stitchNodeLogs $node &
done
wait
awk '{ print FILENAME " | " $0; }' */${name}.log | \
sed "s:/${name}.log::" | sort -t\| -k2,2 > ${name}.log
cat ${name}.log
fi