#!/usr/local/bin/cbsd
#v11.1.0
MYARG=""
MYOPTARG="mode jname human full prometheus"
MYDESC="Show traffic statistics for the virtual environment"
ADDHELP="human= show output to: b - bytes, m - megabytes, g - gigabytes\n\
mode=sum,average,min,max\n\
full=0,1 - print all records. Default - 0 when no jail specified\n\
prometheus=0,1 - output in prometheus format\n"

. ${subr}
. ${system}
. ${strings}
. ${tools}
init $*

#
jaillist=$( cbsdsql local SELECT jname FROM jails )
[ -n "${prometheus}" ] && prometheus=0

# return 1 if no traffic stats
init_jail_dbpath()
{
	local _res
	TRAFDIR="${jailsysdir}/${jname}/traffic"
	CURDATE=$( date "+%Y-%m" )
	TRAFFILE="${TRAFDIR}/${CURDATE}.sqlite"

	[ ! -f "${TRAFFILE}" ] && return 1

	_res=$( /usr/local/bin/sqlite3 ${TRAFFILE} 'SELECT incoming FROM traffic LIMIT 1' )
	[ -z "${_res}" ] && return 1

	return 0
}

jail_in_month()
{
	header="${BOLD}Time|Incoming bytes|Outgoing bytes${NORMAL}"
	trafdata=$( /usr/local/bin/sqlite3 ${TRAFFILE} "SELECT * FROM traffic" )

	${ECHO} "${header}\n${trafdata}"| /usr/bin/column -s "|" -t
}

jail_in_month_full()
{
	sum_in=$( /usr/local/bin/sqlite3 ${TRAFFILE} 'SELECT sum(incoming) FROM traffic' )
	sum_out=$( /usr/local/bin/sqlite3 ${TRAFFILE} 'SELECT sum(outgoing) from traffic' )

	if conv2human "${sum_in}"; then
		sum_in=${convval}
	fi

	if conv2human "${sum_out}"; then
		sum_out=${convval}
	fi

	${ECHO} "${MAGENTA}Incoming: ${GREEN}${sum_in}${NORMAL}"
	${ECHO} "${MAGENTA}Outgoing: ${GREEN}${sum_out}${NORMAL}"
}

jail_in_month_full_header()
{
	CURDATE=$( date "+%Y-%m" )
	${ECHO} "${BOLD}Summary traffic stats for ${jname} in ${CURDATE} ${NORMAL}"
	${ECHO} "${BOLD}=================================================${NORMAL}"
}

[ -z "${jname}" -a -z "${full}" ] && full=0

if [ -n "${jname}" ]; then
	jaillist="${jname}"
	[ -z "${full}" ] && full=1
fi

[ -n "${jname}" -a -z "${full}" ] && full=0

for jname in ${jaillist}; do
	init_jail_dbpath || continue
	[ ${full} -eq 1 ] && jail_in_month
	jail_in_month_full_header
	jail_in_month_full
done
