diff options
Diffstat (limited to 'rt/lib/RTx/Statistics.pm')
-rwxr-xr-x | rt/lib/RTx/Statistics.pm | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/rt/lib/RTx/Statistics.pm b/rt/lib/RTx/Statistics.pm new file mode 100755 index 000000000..8b9d6e4f0 --- /dev/null +++ b/rt/lib/RTx/Statistics.pm @@ -0,0 +1,239 @@ +package Statistics; + +use vars qw( +$MultiQueueStatus $MultiQueueDateFormat @MultiQueueQueueList $MultiQueueMaxRows $MultiQueueWeekends $MultiQueueLabelDateFormat +$PerDayStatus $PerDayDateFormat $PerDayQueue $PerDayMaxRows $PerDayWeekends $PerDayLabelDateFormat $PerDayPeriod +$DayOfWeekQueue +@OpenStalledQueueList $OpenStalledWeekends +$TimeToResolveDateFormat $TimeToResolveQueue $TimeToResolveMaxRows $TimeToResolveWeekends $TimeToResolveLabelDateFormat +$TimeToResolveGraphQueue +@years @months %monthsMaxDay +$secsPerDay +$RestrictAccess +$GraphWidth $GraphHeight +); + +use Time::Local; + +# I couldn't figure out a way to override these in RT_SiteConfig, which would be +# preferable. + +# Width and Height of all graphics +$GraphWidth=500; +$GraphHeight=400; + +# Initial settings for the CallsMultiQueue stat page +$MultiQueueStatus = "resolved"; +$MultiQueueDateFormat = "%a %b %d %Y"; # format for dates on Multi Queue report, see "man strftime" for options +@MultiQueueQueueList = ("General"); # list of queues to start Multi Queue per day reports +$MultiQueueMaxRows = 10; +$MultiQueueWeekends = 1; +$MultiQueueLabelDateFormat = "%a"; + +# Initial settings for the CallsQueueDay stat page +$PerDayStatus = "resolved"; +$PerDayDateFormat = "%a %b %d %Y"; +$PerDayQueue = "General"; +$PerDayMaxRows = 10; +$PerDayWeekends = 1; +$PerDayLabelDateFormat = "%a"; +$PerDayPeriod = 10; + +# Initial settings for the DayOfWeek stat page +$DayOfWeekQueue = "General"; + +# Initial settings for the OpenStalled stat page +@OpenStalledQueueList = ("General"); +$OpenStalledWeekends = 1; + +# Initial settings for the TimeToResolve stat page +$TimeToResolveDateFormat = "%a %b %d"; +$TimeToResolveQueue = "General"; +$TimeToResolveMaxRows = 10; +$TimeToResolveWeekends = 1; +$TimeToResolveLabelDateFormat = "%a"; + +# Initial settings for the TimeToResolve Graph page +$TimeToResolveGraphQueue = "General"; + +$secsPerDay = 86400; + +# List of years and months to populate drop down lists +@years =('2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003' ,'2003' ,'2002'); +@months=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; +%monthsMaxDay = ( + 0 => 31, # January + 1 => 29, # February, allow for leap year + 2 => 31, # March + 3 => 30, # April + 4 => 31, # May + 5 => 30, # June + 6 => 31, # July + 7 => 31, # August + 8 => 30, # September + 9 => 31, # October + 10=> 30, # November + 11=> 31 # December + ); + +# Set to one to prevent users without the ShowConfigTab right from seeing Statistics +$RestrictAccess = 0; + +# Variables to control debugging +my $debugging=0; # set to 1 to enable debugging +my $debugtext=""; + +=head2 FormatDate + +Returns a string representing the specified date formatted by the specified string + +=cut +sub FormatDate { + my $fmt = shift; + my $self = shift; + return POSIX::strftime($fmt, localtime($self->Unix)); +} + + +=head2 RTDateSetToLocalMidnight + +Sets the date to midnight (at the beginning of the day) local time +Returns the unixtime at midnight. + +=cut +sub RTDateSetToLocalMidnight { + my $self = shift; + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($self->Unix); + $self->Unix(timelocal (0,0,0,$mday,$mon,$year,$wday,$yday)); + + return ($self->Unix); +} + +=head2 RTDateIsWeekend + +Returns 1 if the date is on saturday or sunday + +=cut +sub RTDateIsWeekend { + my $self = shift; + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($self->Unix); + return 1 if (($wday==6) || ($wday==0)); + 0; +} + +=head2 RTDateGetDateWeekday + +Returns the localized name of the day specified by date + +=cut +sub RTDateGetDateWeekday { + my $self = shift; + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($self->Unix); + return $self->GetWeekday($wday); +} + +=head2 RTDateSubDay + +Subtracts 24 hours from the current time + +=cut + +sub RTDateSubDay { + my $self = shift; + $self->AddSeconds(0 - $DAY); +} + +=head2 RTDateSubDays $DAYS + +Subtracts 24 hours * $DAYS from the current time + +=cut + +sub RTDateSubDays { + my $self = shift; + my $days = shift; + $self->AddSeconds(0 - ($days * $DAY)); +} + +=head2 DebugInit + +Creates a text area on the page if debugging is on. + +=cut + +sub DebugInit { + if($debugging) { + my $m = shift; + $m->print("<TEXTAREA NAME=debugarea COLS=120 ROWS=50>$debugtext</TEXTAREA>\n"); + } +} + +=head2 DebugLog $logmsg + +Adds a message to the debug area + +=cut + +sub DebugLog { + if($debugging) { + my $line = shift; + $debugtext .= $line; + $RT::Logger->debug($line); + } +} + +=head2 DebugClear + +Clears the current debug string, otherwise it builds from page to page + +=cut + +sub DebugClear { + if($debugging) { + $debugtext = undef; + } +} + +=head2 DurationAsString + +Returns a string representing the specified duration + +=cut + +sub DurationAsString { + my $Duration = shift; + my $MINUTE = 60; + my $HOUR = $MINUTE*60; + my $DAY = $HOUR * 24; + my $WEEK = $DAY * 7; + my $days = int($Duration / $DAY); + $Duration = $Duration % $DAY; + my $hours = int($Duration / $HOUR); + $hours = sprintf("%02d", $hours); + $Duration = $Duration % $HOUR; + my $minutes = int($Duration/$MINUTE); + $minutes = sprintf("%02d", $minutes); + $Duration = $Duration % $MINUTE; + my $secs = sprintf("%02d", $Duration); + + if(!$days) { + $days = "00"; + } + if(!$hours) { + $hours = "00"; + } + if(!$minutes) { + $minutes = "00"; + } + if(!$secs) { + $secs = "00"; + } + return "$days days $hours:$minutes:$secs"; +} + +1; + + |