#!/bin/bash
# This file is meant to be SOURCED
#
#   Copyright 2016 RIFT.IO Inc
#
#   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.
#
# container_funcs
# 24 June 2016 -- Jeremy Mordkoff -- Genesis

print_stack() {
   local i
   local stack_size=${#FUNCNAME[1]}
   echo  "BACKTRACE:" >&2
   for (( i=1; i<$stack_size ; i++ )); do
      local func="${FUNCNAME[$i]}"
      [ x$func = x ] && func=MAIN
      local linen="${BASH_LINENO[(( i - 1 ))]}"
      local src="${BASH_SOURCE[$i]}"
      [ x"$src" = x ] && src=non_file_source
      echo "### $func $src $linen" >&2
   done
   echo "-------" >&2
}


FATAL() { 
	echo -e "\n### $(date) ${FUNCNAME[1]}: FATAL error: $*" >&2
	print_stack
	exit 1
}
	
WARNING() { 
	echo -e "\n### $(date) ${FUNCNAME[1]}: WARNING error: $*" >&2
}

INFO() { 
	echo "##  $(date) ${FUNCNAME[1]}: $*" >&2
}

DEBUG() { 
	echo "#   $(date) ${FUNCNAME[1]}: $*" >&2
}

CMD() {
	echo "# executing '$*' ..."
	"$@"
	rc=$?
	echo "# .... '$*' done RC was $rc"
	return $rc
}
