1 package FS::part_event::Condition::every;
5 use FS::Record qw( qsearch );
8 use base qw( FS::part_event::Condition );
10 sub description { "Don't retry failures more often than specified interval"; }
14 'retry_delay' => { label=>'Retry after', type=>'freq', value=>'1d', },
15 'max_tries' => { label=>'Maximum # of attempts', type=>'text', size=>3, },
23 'm' => 2592000, #well, 30 days... presumably people would mostly use d or w
25 'y' => 31536000, #well, 365 days...
29 "SELECT COUNT(*) FROM cust_event WHERE eventpart = ? AND tablenum = ?";
32 my($self, $object, %opt) = @_;
34 my $obj_pkey = $object->primary_key;
35 my $tablenum = $object->$obj_pkey();
37 if ( $self->option('max_tries') =~ /^\s*(\d+)\s*$/ ) {
39 my $sth = dbh->prepare($sql)
40 or die dbh->errstr. " preparing: $sql";
41 $sth->execute($self->eventpart, $tablenum)
42 or die $sth->errstr. " executing: $sql";
43 my $tries = $sth->fetchrow_arrayref->[0];
44 return 0 if $tries >= $max_tries;
47 my $time = $opt{'time'};
48 my $retry_delay = $self->option('retry_delay');
49 $retry_delay =~ /^(\d+)([hdwmy]?)$/
50 or die "unparsable retry_delay: $retry_delay";
51 my $date_after = $time - $1 * $after{$2};
53 my $sth = dbh->prepare("$sql AND _date > ?") # AND status = 'failed' "
54 or die dbh->errstr. " preparing: $sql";
55 $sth->execute($self->eventpart, $tablenum, $date_after)
56 or die $sth->errstr. " executing: $sql";
57 ! $sth->fetchrow_arrayref->[0];
62 # my( $self, $table ) = @_;