[rt-users] auto-close tickets after X amount of time

Ramon Kagan rkagan at yorku.ca
Mon Feb 14 12:01:44 EST 2005


I have...

In .../lib/Condition

#cat Idle.pm
# Author: Ramon Kagan
#
# Birth September 30, 2004 - 08:30 ESTEDT
#
# This module checks the "idleness" of a ticket"
#

=head1 NAME

RT::Condition::Idle

=head1 DESCRIPTION

Returns true if the ticket we're operating on has been idle
for the number of days specified

=cut

package RT::Condition::Idle;
require RT::Condition::Generic;

use strict;
use Time::ParseDate;
use vars qw/@ISA/;
@ISA = qw(RT::Condition::Generic);


=head2 IsApplicable

If the last modified date plus the number of days specified is before
"now" return true

=cut

sub IsApplicable {
    my $self = shift;
    my $seconds = $self->Argument * 86400;
    $RT::Logger->debug("Idle: Seconds is " . $seconds);
    my $now = parsedate("now");
    $RT::Logger->debug("Idle: Now is " . $now);
    my $lastdate = $self->TicketObj->LastUpdated;
    my $last = parsedate("$lastdate");
    $RT::Logger->debug("Idle: Last is " . $last);
    if ($now - $last > $seconds) {
       return(1);
    }
    else {
       return(undef);
    }
}

eval "require RT::Condition::Idle_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Idle_Vendor.pm});
eval "require RT::Condition::Idle_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Idle_Local.pm});

1;


in .../lib/SetStatus.pm

# Author: Ramon Kagan
#
# Birth September 8, 2004 - 08:30 ESTEDT
#
# This module incorporates much of the SetPriority.pm from
# Best Practical.  It changes the status of the ticket as requested
#

package RT::Action::SetStatus;
require RT::Action::Generic;

use strict;
use vars qw/@ISA/;
@ISA=qw(RT::Action::Generic);

#Do what we need to do and send it out.

#What does this type of Action does

# {{{ sub Describe
sub Describe  {
  my $self = shift;
  return (ref $self . " will set a ticket's status to the argument
provided.");
}
# }}}


# {{{ sub Prepare
sub Prepare  {
    # nothing to prepare
    return 1;
}
# }}}

sub Commit {
    my $self = shift;
    $self->TicketObj->SetStatus($self->Argument);

}

eval "require RT::Action::SetStatus_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SetStatus_Vendor.pm});
eval "require RT::Action::SetStatus_Local";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SetStatus_Local.pm});

1;


Using crontool

rt-crontool --search RT::Search::ActiveTicketsInQueue --search-arg <Queue>
--condition RT::Condition::Idle --condition-arg <number of days idle>
--action RT::Action::SetStatus --action-arg <status>

If you want to make this hours... change the 86400 in Idle.pm to 3600

Hope that helps.

Ramon Kagan
York University, Computing and Network Services
Information Security  -  Senior Information Security Analyst
(416)736-2100 #20263
rkagan at yorku.ca

-----------------------------------   ------------------------------------
I have not failed.  I have just	       I don't know the secret to success,
found 10,000 ways that don't work.     but the secret to failure is
				       trying to please everybody.
	- Thomas Edison				- Bill Cosby
-----------------------------------   ------------------------------------

On Mon, 14 Feb 2005, Jonathan Reeder wrote:

> I have a ton of tickets that get sent in, picked up by a staff member,
> replied to with a suggestion, and then the requestor never takes the time to
> write back and say "Thanks that worked" or "Its fixed" or anything like that
> to let us know that the ticket can be closed.  So what I'd like to do is set
> something up so that if a ticket goes 48 hours without a reply from the
> requestor (if the owner is not nobody and a reply has been made to the
> requestor) then the ticket gets automatically closed.  What would also be
> nice would be if I could set it up such that an email was sent after 12
> hours of no activity saying "If you don't reply to this ticket in 36 hours,
> it will automatically be closed."
>
> Anyone done anything like this?
>



More information about the rt-users mailing list