#!/usr/bin/env bash

#et -x

set -u

function compute_last_month
{
	# get current month, stripping off 0 padding so it won't look like
	# octal
	this_month="$(date +%m | sed 's/^0//')"
	this_year="$(date +%Y)"
	this_month_m1="$[$this_month-1]"
	if [ "$this_month" = 0 ]
	then
		last_month=12
		year="$[$this_year-1]"
	else
		year="$this_year"
		last_month="$this_month_m1"
	fi
	# zero pad
	echo "${year}$(echo ${last_month} | sed 's/^\(.\)$/0\1/')"
}

last_month="$(compute_last_month)"

for host in esmf0{1,2,3,4,5,6,7,8}m
do
	#ssh "$host" "ls -l /var/adm/acct/fiscal/fiscrpt*"
	ssh "$host" "/usr/local/bin/acctdump /var/adm/acct/nite/daytacct$last_month*" | sed "s/^/$host /"
done > /var/tmp/accounting-raw-data

#esmf01m 0 0 root system 0.000000
#esmf01m 209 1066 strombrg nacs 0.000000
#esmf01m 211 211 sshd @ 0.000000
#esmf01m 1026 1012 mflanner zender 614.665100

# reports to generate:
# 	across all nodes:
# 		by PI/PI2 across all nodes
# 		by user across all nodes
# 		by PI/PI2 by user across all nodes
# 	by nodes:
# 		by host by user
# 		by host by PI/PI2
# 		by each node

host=0
uid=1
gid=2
username=3
group=4
cpuminutes=5

echo Units are CPU minutes
echo '@ is a gid without a corresponding group name'
echo '? is a uid without a corresponding username'
echo

echo "Report for the month $(echo $last_month | sed 's#^\(....\)\(..\)#\1/\2#')"
echo

# Hi Dan,
# > 
# > This works for me though it is too detailed.
# > I don't think anyone will use the by-host-by-PI and by-host-by-User info,
# > so please remove them.
# > 
# > We also want by-PI, by-PI-by-User, and by-User disk space summaries.

echo By PI across all hosts:
sum-by -t -p -b $group -s $cpuminutes < /var/tmp/accounting-raw-data | expand -30

echo
echo By host:
sum-by -t -p -b $host -s $cpuminutes < /var/tmp/accounting-raw-data | expand -30

echo
echo By PI by user across all hosts:
sum-by -t -p -b $group -b $username -s $cpuminutes < /var/tmp/accounting-raw-data | expand -30

echo
echo By user across all hosts:
sum-by -t -p -b $username -s $cpuminutes < /var/tmp/accounting-raw-data | expand -30

#echo
#echo By host by PI:
#sum-by -b $host -b $group -s $cpuminutes < /var/tmp/accounting-raw-data

#echo
#echo By host by user:
#sum-by -b $host -b $username -s $cpuminutes < /var/tmp/accounting-raw-data

 

#  %%   a literal %
#  %a   locale's abbreviated weekday name (Sun..Sat)
#  %A   locale's full weekday name, variable length (Sunday..Saturday)
#  %b   locale's abbreviated month name (Jan..Dec)
#  %B   locale's full month name, variable length (January..December)
#  %c   locale's date and time (Sat Nov 04 12:02:33 EST 1989)
#  %C   century (year divided by 100 and truncated to an integer) [00-99]
#  %d   day of month (01..31)
#  %D   date (mm/dd/yy)
#  %e   day of month, blank padded ( 1..31)
#  %F   same as %Y-%m-%d
#  %g   the 2-digit year corresponding to the %V week number
#  %G   the 4-digit year corresponding to the %V week number
#  %h   same as %b
#  %H   hour (00..23)
#  %I   hour (01..12)
#  %j   day of year (001..366)
#  %k   hour ( 0..23)
#  %l   hour ( 1..12)
#  %m   month (01..12)
#  %M   minute (00..59)
#  %n   a newline
#  %N   nanoseconds (000000000..999999999)
#  %p   locale's upper case AM or PM indicator (blank in many locales)
#  %P   locale's lower case am or pm indicator (blank in many locales)
#  %r   time, 12-hour (hh:mm:ss [AP]M)
#  %R   time, 24-hour (hh:mm)
#  %s   seconds since `00:00:00 1970-01-01 UTC' (a GNU extension)
#  %S   second (00..60); the 60 is necessary to accommodate a leap second
#  %t   a horizontal tab
#  %T   time, 24-hour (hh:mm:ss)
#  %u   day of week (1..7);  1 represents Monday
#  %U   week number of year with Sunday as first day of week (00..53)
#  %V   week number of year with Monday as first day of week (01..53)
#  %w   day of week (0..6);  0 represents Sunday
#  %W   week number of year with Monday as first day of week (00..53)
#  %x   locale's date representation (mm/dd/yy)
#  %X   locale's time representation (%H:%M:%S)
#  %y   last two digits of year (00..99)
#  %Y   year (1970...)
#  %z   RFC-822 style numeric timezone (-0500) (a nonstandard extension)
#  %Z   time zone (e.g., EDT), or nothing if no time zone is determinable
