blob: da739d630d05fc443cea96c0861268a53bee0f14 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
METRON_VERSION=0.6.0
METRON_HOME=${METRON_HOME:-"/usr/metron/$METRON_VERSION"}
DATE_FORMAT=${DATE_FORMAT:-"yyyyMMdd"}
USER=$(whoami)
USER_HOMEDIR=${USER_HOMEDIR:-`hdfs getconf -confKey dfs.user.home.dir.prefix`/$USER}
QUERY_HOME=${QUERY_HOME:-"$USER_HOMEDIR/queries"}
WEBHDFS_HOSTNAME=${WEBHDFS_HOSTNAME:-`hdfs getconf -confKey dfs.namenode.http-address`}
QUERY=${QUERY:-$1}
START_TIME=${START_TIME:-$2}
END_TIME=${END_TIME:-$3}
RECORDS_PER_FILE=${RECORDS_PER_FILE:-10000}
NUMBER_OF_REDUCERS=${NUMBER_OF_REDUCERS:-10}
PCAP_DATA_PATH=${PCAP_DATA_PATH:-/apps/metron/pcap}
if [ -z "$QUERY" ]; then
echo "You must specify a query."
exit 1
fi
if [ -z "$START_TIME" ]; then
echo "You must specify a start time."
exit 2
fi
TIMESTAMP_EPOCH=$(date +%s%N | cut -b1-13)
if [ -f /proc/sys/kernel/random/uuid ];then
UUID=$(cat /proc/sys/kernel/random/uuid | sed 's/-//g')
PREFIX="$TIMESTAMP_EPOCH-$UUID"
else
QUERY_HASH=$(echo $QUERY | md5sum | awk '{print $1}')
PREFIX="$TIMESTAMP_EPOCH-$QUERY_HASH"
fi
if [ -z "$END_TIME" ]; then
CMD=$($METRON_HOME/bin/pcap_query.sh query --prefix "$PREFIX" --query "$QUERY" -st "$START_TIME" -df "$DATE_FORMAT" -rpf "$RECORDS_PER_FILE" -nr "$NUMBER_OF_REDUCERS" -bp "$PCAP_DATA_PATH" \"2>&1)
SUMMARY="Packets conforming to $QUERY starting at $START_TIME ending now"
else
CMD=$($METRON_HOME/bin/pcap_query.sh query --prefix "$PREFIX" --query "$QUERY" -st "$START_TIME" -et "$END_TIME" -df "$DATE_FORMAT" -rpf "$RECORDS_PER_FILE" -nr "$NUMBER_OF_REDUCERS" -bp "$PCAP_DATA_PATH" 2>&1)
SUMMARY="Packets conforming to $QUERY starting at $START_TIME ending at $END_TIME"
fi
FAILED=$(echo $CMD | grep "Unable to complete query due to errors")
if [ -z "$FAILED" ];then
PATTERN="pcap-data-$PREFIX"
hadoop fs -mkdir -p $QUERY_HOME/$PATTERN && hadoop fs -put $PATTERN* $QUERY_HOME/$PATTERN
FAILED=$?
if [ $FAILED -eq 0 ];then
echo "%html"
echo "<h4>$SUMMARY</h4>"
echo "<ul>"
for i in $(ls $PATTERN*.pcap | sort -n);do
FILENAME=$(echo $i | sed 's/+/%2B/g')
SIZE=$(du -h $i | awk '{print $1}')
echo "<li><a href=\"http://$WEBHDFS_HOSTNAME/webhdfs/v1$QUERY_HOME/$PATTERN/$FILENAME?op=OPEN\">$i</a> ($SIZE)</li>"
rm $i
done
echo "</ul>"
echo "<small>NOTE: There are $RECORDS_PER_FILE records per file</small>"
else
echo "Unable to create $QUERY_HOME/$PATTERN"
exit 3
fi
else
echo "%html <pre>FAILED JOB:"
echo "QUERY: $QUERY"
echo "START_TIME: $START_TIME"
echo "DATE_FORMAT: $DATE_FORMAT"
echo "METRON_HOME: $METRON_HOME"
echo "DATE_FORMAT: $DATE_FORMAT"
echo "Output:"
echo "$CMD"
echo "</pre>"
fi