[rt-devel] RT::Action custom scrip - can't locate object method
"new"
Bill Shinn
packet791 at yahoo.com
Mon Dec 22 11:08:39 EST 2003
I am taking my first crack at writing a custom scrip.
Please be forgiving. Naturally, it's harder if you
don't know much perl...I
I need to be able to:
- parse the text of an incoming ticket for a hostname
- based on a query of custom field, return the ticket
number of any open tickets for that hostname
- if so, merge this new ticket with the one that's
already open.
I am calling this from a Scrip called
AutoMergeTripwire ("On Create AutoMerge Tripwire
Global Template: Blank). This invokes
RT::Action::AutoMergeTripwire.pm (below). I think I
need to invoke MergeInto, but I know I am doing this
wrong. Also, the RT::Logger doesn't seems to log
(unless I am not even getting that far?) The following
error is entered in syslog.
Dec 22 15:38:01 myhost RT: Scrip 16 died. - Can't
locate object method "new" via package
"RT::Action::AutoMergeTripwire" at
/usr/local/rt/lib/RT/ScripAction_Overlay.pm line 146.
Stack:
[/usr/local/rt/lib/RT/ScripAction_Overlay.pm:146]
[/usr/local/rt/lib/RT/Scrip_Overlay.pm:332]
[/usr/local/rt/lib/RT/Transaction_Overlay.pm:169]
[/usr/local/rt/lib/RT/Ticket_Overlay.pm:3743]
[/usr/local/rt/lib/RT/Ticket_Overlay.pm:597]
[/usr/local/rt/lib/RT/Interface/Email.pm:571]
[/usr/local/rt/share/html/REST/1.0/NoAuth/mail-gateway:31]
(/usr/local/rt/lib/RT/Scrip_Overlay.pm:363)
Any direction is helpful. My attempt is below.....
#
# Sat Dec 20 22:08:50 UTC 2003
#
#
#
# When a new ticket is created from a Tripwire
integrity report,
# automatically search in same queue, for open
tickets, where RT
# custom field is equal to regex pattern match for
$hostname specified
# in Tripwire report.
package RT::Action::AutoMergeTripwire;
require RT::Action::Generic;
use DBI;
use strict;
use vars qw/@ISA/;
@ISA=qw(RT::Action::Generic);
sub Describe {
my $self = shift;
return (ref $self );
}
sub Prepare {
return (1);
}
sub Commit {
my $self = shift;
my $Ticket = $self->TicketObj;
my $ScripObj = $self->ScripObj;
my $Transaction = $self->TransactionObj;
my $Queue = $Ticket->QueueObj->Id;
my $hostname =
($Transaction->Attachments->First->Content =~
/host\s*name:\s*(.[^\s]*).*$/i);
$RT::Logger->debug("hostname from ticket match as
$hostname");
my $query;
my $dbh;
my $sth;
my $openticket;
my $ARGSRef;
if ($hostname) {
my $dbh = DBI->connect('DBI:mysql:rt3:localhost',
'rt_user', # user name
'***********', # password
{ RaiseError => 0});
$RT::Logger->debug("database connection string:
$dbh");
if (!$dbh) {
# die "Cannot connect to database" }
$RT::Logger->debug("database connection failed")
}
my $query = "SELECT Tickets.id
FROM Tickets, Queues, TicketCustomFieldValues,
CustomFields
WHERE Queues.id = '$Queue' AND
CustomFields.Queue = '$Queue' AND
CustomFields.Name = 'Hostname' AND
Tickets.Status = 'open' AND
TicketCustomFieldValues.Content =
'$hostname' AND
TicketCustomFieldValues.Ticket =
Tickets.id;";
$RT::Logger->debug("Query was built as: $query");
my $sth = $dbh->prepare($query);
if (!$sth) {
#die "Illegal query: $query" };
$RT::Logger->debug("Illegal query: $query") }
$sth ->execute();
while (my @row = $sth->fetchrow_array) {
if ($row[0]) {
$openticket = $row[0]);
$RT::Logger->debug("ticket number is:
$openticket");
$Ticket->MergeInto( $ARGSRef->{ $openticket .
"-MergeInto" } );
}
}
return(1);
}
1;
Any direction is appreciated. I have searched the
archives and tried to use others' examples, but no one
is trying to merge tickets from scrips.
Thanks,
Bill
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree
More information about the Rt-devel
mailing list