#!/usr/local/bin/perl
#
# From: jerry@tcs.com (Jerry Carlin)
# Subject: Re: feedback
#
# Here is the management report program. I did not get a chance to make
# it generic (locations etc) but it made my boss happy!
#
# Note that it still needs cleaning up a bit (such as closing afile
# then reopening) but I wanted to get it to you quickly.
#
# Jerry

###############################################################################
# basic managment report showing amount of work during the past period
# optionally write log file
# written: 10.94 Jerry Carlin, Teknekron Communications Systems, jerry@tcs.com
###############################################################################

require "ctime.pl";
require "getopts.pl";

##$request_dir	= "@{CODE_REQUEST_DIR}";
##$resolved_dir	= "@{CODE_RESOLVED_DIR}";
##$active_dir	= "@{CODE_ACTIVE_DIR}";
##$error_dir	= "@{CODE_ERROR_DIR}";

$request_dir	= "/ccs/adm/request";
$resolved_dir	= "/ccs/adm/request/resolved";
$active_dir	= "/ccs/adm/request/active";
$error_dir	= "/ccs/adm/request/errors";
$nextnum	= "/ccs/adm/request/etc/currentnumber";
$oldnextnum	= "/ccs/adm/request/etc/oldnextnumber";
$logfile	= "/ccs/adm/request/etc/logfile";

do Getopts('l');	# l - log the results

####################
# get today's date #
####################

chop($TDate = &ctime(time));
@Date = split(/ +/,$TDate);
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
$rundate = sprintf("%d%02d%02d",$year,$mon+1,$mday);

###########################
# get current high number #
###########################

##open(NEXTNUM, "@{CODE_NEXTNUM}" || die;
open(NEXTNUM, $nextnum) || die "Can't open nextnum file";
$currentct = 0;
while (<NEXTNUM>) {
	next if /#/;
	chop ($currentct = $_);
}
close(NEXTNUM);

###################################
# get previous week's high number #
###################################

open(OLDNEXTNUM, $oldnextnum) || die "Can't open oldnextnum file";
$_ = <OLDNEXTNUM>;
chop ($oldct = $_);
close(OLDNEXTNUM);

##############################
# get previous week's output #
##############################

open (LOGFILE, "$logfile") || die "Can't open log file";
while (<LOGFILE>) {
	$last = $_;
}
($logrundate, $logactivect, $logresolvedct, $logcurrentct, $logoldct) =
	split(/:/,$last);

######################
# Get current counts #
######################

$activect = &read_files($active_dir);
$resolvedct = &read_files($resolved_dir);

##########
# payoff #
##########

$newreq = $currentct - $oldct;
$newopen = $activect - $logactivect;
$newresolved = $resolvedct - $logresolvedct;

printf ("Run Date:\t%s/%s/%s\n", substr($rundate,2,2), substr($rundate,4,2), substr($rundate,0,2));
printf ("Last Run Date:\t%s/%s/%s\n\n", substr($logrundate,2,2), substr($logrundate,4,2), substr($logrundate,0,2));
printf ("Prior Active Requests:\t\t%4d\n", $logactivect);
printf ("New Requests Received:\t\t%4d\n", $newreq);
printf ("Requests Resolved:\t\t%4d\n", $newresolved);
printf ("Merged or Killed Requests:\t%4d\n", $newreq - $newopen - $newresolved);
printf ("New Active Requests:\t\t%4d\n", $activect);

###################
# update log file #
###################

if (!$opt_l) {
	exit;
}
open (LOGFILE, ">>$logfile") || die "Can't open/append log file";
printf(LOGFILE  "%s:%d:%d:%d:%d\n",
	$rundate,$activect,$resolvedct,$currentct,$oldct);
close (LOGFILE);
open(OLDNEXTNUM, ">$oldnextnum") || die "Can't update oldnextnum file";
printf(OLDNEXTNUM  "%d\n", $currentct);
close (OLDNEXTNUM);

##############
# read_files #
##############

sub read_files {
  local($dir) = @_;
  local(@allfiles, $f);

  opendir(DIR, $dir);
  @allfiles = grep(/^\d+$/, readdir(DIR));
  closedir(DIR);

  @allfiles;
}
