5 # This script counts tickets.
7 # T.D.Bishop@kent.ac.uk, May 2004.
9 # (using changes sent by Jamie L. Penman-Smithson <jamie@silverdream.org>)
10 # Updated to display sums, June 2005.
11 # (using changes sent by Petter Reinholdtsen <pere@hungry.com>)
13 # Copied from <URL:http://www.cs.kent.ac.uk/people/staff/tdb/rt3/rt-count> and
14 # modified to fit local needs.
15 # - Petter Reinholdtsen 2005-05-19
16 # Add code to list deleted tickets as well
17 # - Petter Reinholdtsen 2006-08-17
21 my(@queues); # do not delete this
23 # Queues to operate on (default is all)
24 #@queues = qw ( queue1 queue2 );
26 # Where to store state
27 # Remember to change to correct path on current RT instance
28 my($statedir) = "/www/var/run/rt/rt-count";
30 # Where to mail report to (and from)
31 my($recipient) = 'RT driftsgruppe <rt-drift@usit.uio.no>, '.
32 '<rapportering@usit.uio.no>';
33 my($sender) = 'RT queue summary <request-tracker@hjelp.uio.no>';
35 # charset to use in emails
36 my($charset) = "ISO-8859-15";
38 # Location of RT's libs and scripts
39 # Remember to change to correct path on current RT instance
40 use lib '/www/data/rt/rt-perl/current/share/perl5/5.8.8';
41 use lib '/www/data/rt/rt-perl/current/lib/perl5/5.8.8';
42 use lib '/www/data/rt/rt-perl/current/lib/perl5';
43 use lib ("/www/var/hjelp/local/lib", "/www/var/hjelp/lib");
50 # Pull in the RT stuff
52 use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc);
54 # Clean our the environment
57 # Load the RT configuration
63 # Drop any setgid permissions we might have
64 #RT::DropSetGIDPermissions();
69 # Path to sendmail and flags. Need to set this after RT::Init()
70 my($sendmail) = "$RT::SendmailPath $RT::SendmailArguments -t";
73 my $queues = new RT::Queues($RT::SystemUser);
74 $queues->LimitToEnabled();
75 foreach my $queue (@{$queues->ItemsArrayRef()}) {
76 push @queues, $queue->Name;
82 Content-Type: text/plain; charset="$charset"
85 Subject: RT ticket counts for hjelp.uio.no
87 Queue statistics for RT:
92 " %25s |%8s |%8s |%8s |%8s |%8s\n",
93 "queue", "new", "resolved", "stalled", "rejected", "deleted",
95 $msg .= " --------------------------+---------+---------+---------+---------+--------\n";
100 my($rejectedsum) = 0;
103 foreach my $queuename (@queues) {
105 my $queue = new RT::Queue($RT::SystemUser);
106 $queue->Load($queuename);
108 my $now = new RT::Date($RT::SystemUser);
111 # Get hold of new and open tickets only
112 my $tickets = new RT::Tickets($RT::SystemUser);
113 $tickets->{'allow_deleted_search'} = 1;
114 $tickets->LimitQueue(VALUE => $queue->Id);
116 my($ticketcount) = 0;
118 my($resolvedcount) = 0;
119 my($stalledcount) = 0;
120 my($rejectedcount) = 0;
121 my($deletedcount) = 0;
123 # Count number of tickets
124 while (my $ticket = $tickets->Next) {
126 if ($ticket->Status eq "resolved") {
130 if ($ticket->Status eq "stalled") {
134 if ($ticket->Status eq "rejected") {
138 if ($ticket->Status eq "deleted") {
145 my($oldticketcount) = 0;
146 my($oldresolvedcount) = 0;
147 my($oldstalledcount) = 0;
148 my($oldrejectedcount) = 0;
149 my($olddeletedcount) = 0;
151 if (-f "$statedir/rt-count_${queuename}_tickets") {
152 open(TMP, "$statedir/rt-count_${queuename}_tickets") || die "Error opening rt-count_${queuename}_tickets: $!";
153 $oldticketcount = <TMP>;
156 if (-f "$statedir/rt-count_${queuename}_resolved") {
157 open(TMP, "$statedir/rt-count_${queuename}_resolved") || die "Error opening rt-count_${queuename}_resolved: $!";
158 $oldresolvedcount = <TMP>;
161 if (-f "$statedir/rt-count_${queuename}_stalled") {
162 open(TMP, "$statedir/rt-count_${queuename}_stalled") || die "Error opening rt-count_${queuename}_stalled: $!";
163 $oldstalledcount = <TMP>;
166 if (-f "$statedir/rt-count_${queuename}_rejected") {
167 open(TMP, "$statedir/rt-count_${queuename}_rejected") || die "Error opening rt-count_${queuename}_rejected: $!";
168 $oldrejectedcount = <TMP>;
171 if (-f "$statedir/rt-count_${queuename}_deleted") {
172 open(TMP, "$statedir/rt-count_${queuename}_deleted") || die "Error opening rt-count_${queuename}_deleted: $!";
173 $olddeletedcount = <TMP>;
177 my($newtickets) = $ticketcount - $oldticketcount;
178 my($newresolved) = $resolvedcount - $oldresolvedcount;
179 my($newstalled) = $stalledcount - $oldstalledcount;
180 my($newrejected) = $rejectedcount - $oldrejectedcount;
181 my($newdeleted) = $deletedcount - $olddeletedcount;
183 $ticketsum += $newtickets;
184 $resolvedsum += $newresolved;
185 $stalledsum += $newstalled;
186 $rejectedsum += $newrejected;
187 $deletedsum += $newdeleted;
190 " %25s |%8d |%8d |%8d |%8d |%8d\n",
191 $queuename, $newtickets, $newresolved, $newstalled, $newrejected, $newdeleted
194 open(TMP, ">$statedir/rt-count_${queuename}_tickets") || die "Error writing rt-count_${queuename}_tickets: $!";
195 print TMP $ticketcount;
197 open(TMP, ">$statedir/rt-count_${queuename}_resolved") || die "Error writing rt-count_${queuename}_resolved: $!";
198 print TMP $resolvedcount;
200 open(TMP, ">$statedir/rt-count_${queuename}_stalled") || die "Error writing rt-count_${queuename}_stalled: $!";
201 print TMP $stalledcount;
203 open(TMP, ">$statedir/rt-count_${queuename}_rejected") || die "Error writing rt-count_${queuename}_rejected: $!";
204 print TMP $rejectedcount;
206 open(TMP, ">$statedir/rt-count_${queuename}_deleted") || die "Error writing rt-count_${queuename}_deleted: $!";
207 print TMP $deletedcount;
211 $msg .= " --------------------------+---------+---------+---------+---------+--------\n";
213 " %25s |%8d |%8d |%8d |%8d |%8d\n",
214 "sum", $ticketsum, $resolvedsum, $stalledsum, $rejectedsum, $deletedsum
217 my($lastrun) = "FIRST RUN";
219 if (-f "$statedir/rt-count_lastrun") {
220 open(TMP, "$statedir/rt-count_lastrun") || die "Error opening rt-count_lastrun: $!";
223 $lastrun = localtime($lastrun);
227 $now = localtime($now);
231 These statistics are for the period:
238 open(TMP, ">$statedir/rt-count_lastrun") || die "Error writing rt-count_lastrun: $!";
243 open(SENDMAIL, "|$sendmail") || die "Error sending mail: $!";
247 # Disconnect before we finish off
248 $RT::Handle->Disconnect();