[rt-users] Query in script not working
Roy El-Hames
rfh at pipex.net
Tue Feb 26 07:00:52 EST 2008
Hi Mathew;
Not sure if you are aware of it, but in case you did not RT gives you a
very powerful Date functions in Date.pm,
from a perl script you can do the below:
use RT::Date;
my $date = new RT::Date($RT::SystemUser);
$date->SetToNow();
my $now = $date->ISO;
$date->GoBackDays(1);
my $yesterday = $date->ISO;
You can also set to midnight, change zone etc ..look up lib/RT/Date.pm
Roy
Mathew Snyder wrote:
> FWIW, this is the script I came up with:
>
> #!/usr/bin/perl
>
> ###########################################
> # Name: daily_transactions.pl
> # Version: 0.1
> # Author: Mathew Snyder
> # Date: February 24, 2008
> # Comments: This is a script which lists
> # how many transactions are
> # performed per hour.
> ##########################################
>
> use warnings;
> use strict;
> use lib '/usr/local/rt3/lib';
> use lib '/usr/local/rt3/local/lib';
> use lib '/usr/local/lib';
> use RT;
> use RT::Tickets;
> use RT::Users;
> use Date::Parse;
> use Reports::Emails;
> use MIME::Lite;
>
> RT::LoadConfig();
> RT::Init();
>
> my (%userID,%transCount);
> my @date = (localtime(time - 86400))[3 .. 5];
> my $yesterday = join "-", ($date[2] + 1900, (sprintf '%02d',$date[1] + 1),
> (sprintf '%02d', $date[0]));
>
> my $tix = new RT::Tickets(RT::SystemUser);
> $tix->FromSQL("(Queue = 'CustomerCare' OR Queue = 'TechOps') AND LastUpdated =
> '" . $yesterday . "'");
>
> my $users = new RT::Users(RT::SystemUser);
> $users->LimitToPrivileged;
>
> while (my $user = $users->Next) {
> next if $user->Name eq 'root' || $user->Name eq 'RT_System';
> $userID{$user->Name} = undef;
> }
>
> while (my $ticket = $tix->Next) {
> my $transactions = $ticket->Transactions;
> while (my $transaction = $transactions->Next) {
> my $creator = $transaction->CreatorObj;
> my $user = $creator->Name;
> next unless exists($userID{$user});
> next if $transaction->Creator == '1';
> (my $tranDate = $transaction->Created) =~ s/\s.*$//;
> next unless $tranDate eq $yesterday;
> my $tranTime = (str2time($transaction->Created) - 18000);
> my $tranHour = (localtime($tranTime))[2];
> my $hour = sprintf("%02d", $tranHour);
> $hour .= "00";
> $transCount{$hour} += 1;
> }
> }
>
> open TRANSLOG, ">/work_reports/daily/transaction_report_$yesterday.txt";
> print TRANSLOG "Report of the hourly ticket transactions committed on
> $yesterday\n\n";
> printf TRANSLOG "%15s\n", "Trans";
> printf TRANSLOG "%6s%9s\n", "Hour", "Count";
>
> foreach my $time (sort keys %transCount) {
> printf TRANSLOG "%6s%7s\n", $time, $transCount{$time};
> }
>
> close TRANSLOG;
>
> my $emailSubj = "Ticket Transaction Count for $yesterday";
> my $emailMsg = "Attached is a log of the transactions committed per hour
> yesterday. If an hour does not appear it is safe to assume no transactions were
> created during that time.";
>
> # Prepare and send the email which with the report to all necessary parties.
> my $fullEmail = new MIME::Lite(From => $emailFrom,
> To
> => 'user at company.com',
> Bcc
> => 'user2 at company.com',
> Subject
> => $emailSubj,
> Type
> => "multipart/mixed");
>
> $fullEmail->attach(Type => "TEXT",
> Data => $emailMsg);
>
> $fullEmail->attach(Type => "text/plain",
> Path =>
> "/work_reports/daily/transaction_report_$yesterday.txt",
> Disposition => "attachment");
>
> $fullEmail->send("sendmail", "/usr/sbin/sendmail -t");
>
> Stephen Turner wrote:
>
>> Quoting Mathew Snyder <mathew.snyder at gmail.com>:
>>
>>
>>> I've got the dates working. However, the tickets retrieved are still
>>> based on
>>> the day starting at 05:00:00 and ending the following morning at the
>>> same time.
>>> How can I tell it to only return tickets from between 00:00:00 and
>>> 23:59:00?
>>>
>>> Mathew
>>>
>>>
>>>
>> You are actually getting the tickets you want - the dates are stored in the
>> database as GMT and so appear different by 5 hours from what you see on the
>> screen. It looks a bit strange, but it works fine.
>>
>> BTW - what was the problem that you fixed with the dates?
>>
>> Steve
>>
>
>
More information about the rt-users
mailing list