### log levels
silent_lvl=0
crt_lvl=1
err_lvl=2
wrn_lvl=3
ntf_lvl=4
inf_lvl=5
dbg_lvl=6

## esilent prints output even in silent mode
function log_silent () { verb_lvl=$silent_lvl log "$@" ;}
function log_notify () { verb_lvl=$ntf_lvl log "$@" ;}
function log_ok ()    { verb_lvl=$ntf_lvl log "SUCCESS - $@" ;}
function log_warn ()  { verb_lvl=$wrn_lvl log "WARNING - $@" ;}
function log_info ()  { verb_lvl=$inf_lvl log "INFO ---- $@" ;}
function log_debug () { verb_lvl=$dbg_lvl log "DEBUG --- $@" ;}
function log_error () { verb_lvl=$err_lvl log "ERROR --- $@" ;}
function log_crit ()  { verb_lvl=$crt_lvl log "FATAL --- $@" ;}
function log_dumpvar () { for var in $@ ; do edebug "$var=${!var}" ; done }
function log() {
    if [ "$log_level" -ge "$verb_lvl" ]; then
         datestring=$(date +"%Y-%m-%d %H:%M:%S")
        echo -e "$datestring - $@" >> "$logfile"
    fi
}

function run() {
	log_info "Calling $@"
	eval $@ >> "$logfile" 2>&1
	ret=$?
        if [[ $ret -eq 0 ]]; then
		log_ok "returned: " $ret
	else
		log_error "returned: " $ret
		exit 1
	fi
}

if [ -z "$log_level" ]; then
   log_level=6
fi
if [ -z "$logfile" ]; then
   while getopts ":d:o:" arg
   do
       case $arg in
       	d)
	    device="$OPTARG"
	    ;;
	o)
	    logfile="$OPTARG"
	    ;;
        esac
    done
    # fallback
    if [ -z "$logfile" ]; then
       logfile="/var/log/tiu/tiu.log"
    fi
fi

log_info "-------------------------------------------------------------"
log_info "Script called with arguments:" $@
