#!/bin/bash
#kstrax user space filter script
#COPYRIGHT (C) HITACHI,LTD. 2006
#Created by S.Moriya<satoru.moriya.br@hitachi.com>

function usage() {
    echo ""
    echo "This controls filter operation of kstrax"
    echo "Usage:"
    echo "      kstrax-filter [opton] filename"
    echo ""
    echo "<OPTION>"
    echo "-e [syscall name]    get only entries named \"syscall name\""
    echo "-f                   get only filename opened/created"
    echo "-p [pid]             get only entries having \"pid\""
    echo "-r (error)           get only error/success entries"
    echo "-t [time] [-A|-B]    get entries after/before \"time\""
    echo ""
}

function spec_syscall() {
    if [ $# -le 1 ];then
	usage
    else
	if [ $1 = "open" ];then
	    grep -A 1 "  $1(" $2
	else
	    grep "  $1(" $2
	fi
    fi
}

function spec_filename() {
    if [ $# -le 0 ];then
	usage
    else
	grep "^file descriptor" $1
    fi
}

function spec_pid() {
    if [ $# -le 1 ];then
	usage
    else

	if [ $1 -gt 9999 ];then
	    grep "^$1  " $2
	else
	    grep " $1  " $2
	fi
    fi
}

function spec_retval() {
    if [ $# -le 0 ];then
	usage
    else
	if [ $1 = "error" ];then
	    if [ $# -le 1 ];then
		usage
	    else
		grep "= -1" $2
	    fi
	else
	    grep -v "= -1" $1
	fi
    fi
}

function spec_time() {
    if [ $# -le 1 ];then
	usage
    else
	if [ $2 = "-A" -o $2 = "-B" ];then
	    local NR_LINE=`wc -l $3 | cut -f 1 -d \ `
	    grep $2 $NR_LINE $1 $3
	else
	    grep $1 $2
	fi
    fi
}

if [ $# = "0" ];then
    usage
else
    if [ $1 = "-e" ];then
	spec_syscall $2 $3
    elif [ $1 = "-f" ];then
	spec_filename $2
    elif [ $1 = "-p" ];then
	spec_pid $2 $3
    elif [ $1 = "-r" ];then
	spec_retval $2 $3
    elif [ $1 = "-t" ];then
	spec_time $2 $3 $4
    else
	usage
    fi
fi
