aboutsummaryrefslogtreecommitdiffstats
path: root/perllib
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2020-04-06 17:50:01 +0100
committerMatthew Somerville <matthew@mysociety.org>2020-04-06 17:50:01 +0100
commitb892ef1ce69ec4aaa1c3e961c08d00a75877575c (patch)
tree403d1fd9a8bb860db8dd5f4ce769a36fb2a866e1 /perllib
parent99043455d12b3d7952d21bff0538539a9601ebf0 (diff)
Ignore sending failures within the database query.
This means the code can assume it should be trying to send a report.
Diffstat (limited to 'perllib')
-rw-r--r--perllib/FixMyStreet/Queue/Item/Report.pm15
-rw-r--r--perllib/FixMyStreet/Script/Reports.pm32
-rw-r--r--perllib/FixMyStreet/SendReport.pm15
-rw-r--r--perllib/FixMyStreet/SendReport/Noop.pm5
4 files changed, 32 insertions, 35 deletions
diff --git a/perllib/FixMyStreet/Queue/Item/Report.pm b/perllib/FixMyStreet/Queue/Item/Report.pm
index afa672c7f..4d0d62752 100644
--- a/perllib/FixMyStreet/Queue/Item/Report.pm
+++ b/perllib/FixMyStreet/Queue/Item/Report.pm
@@ -43,7 +43,6 @@ has reporters => ( is => 'rwp' );
# Run parameters
has verbose => ( is => 'ro');
has nomail => ( is => 'ro' );
-has debug => ( is => 'ro' );
sub process {
my $self = shift;
@@ -172,7 +171,6 @@ sub _create_reporters {
my @dear;
my %reporters = ();
- my $skip = 0;
while (my $body = $bodies->next) {
my $sender_info = $self->cobrand->get_body_sender( $body, $row->category );
my $sender = "FixMyStreet::SendReport::" . $sender_info->{method};
@@ -183,22 +181,15 @@ sub _create_reporters {
}
$reporters{ $sender } ||= $sender->new();
- if ( $reporters{ $sender }->should_skip($row, $self->debug) ) {
- $skip = 1;
- $self->log("skipped by sender " . $sender_info->{method} . " (might be due to previous failed attempts?)");
- } else {
- $self->log("OK, adding recipient body " . $body->id . ":" . $body->name . ", " . $sender_info->{method});
- push @dear, $body->name;
- $reporters{ $sender }->add_body( $body, $sender_info->{config} );
- }
+ $self->log("OK, adding recipient body " . $body->id . ":" . $body->name . ", " . $sender_info->{method});
+ push @dear, $body->name;
+ $reporters{ $sender }->add_body( $body, $sender_info->{config} );
}
unless ( keys %reporters ) {
die 'Report not going anywhere for ID ' . $row->id . '!';
}
- return if $skip;
-
my $h = $self->h;
$h->{bodies_name} = join(_(' and '), @dear);
if ($h->{category} eq _('Other')) {
diff --git a/perllib/FixMyStreet/Script/Reports.pm b/perllib/FixMyStreet/Script/Reports.pm
index 6e3d9072d..3e9b2d693 100644
--- a/perllib/FixMyStreet/Script/Reports.pm
+++ b/perllib/FixMyStreet/Script/Reports.pm
@@ -24,11 +24,38 @@ sub send {
my $states = [ FixMyStreet::DB::Result::Problem::open_states() ];
$states = [ 'submitted', 'confirmed', 'in progress', 'feedback pending', 'external', 'wish' ] if $site eq 'zurich';
- my $unsent = FixMyStreet::DB->resultset('Problem')->search( {
+ # Devolved Noop categories (unlikely to be any, but still)
+ my @noop_params;
+ my $noop_cats = FixMyStreet::DB->resultset('Contact')->search({
+ 'body.can_be_devolved' => 1,
+ 'me.send_method' => 'Noop'
+ }, { join => 'body' });
+ while (my $cat = $noop_cats->next) {
+ push @noop_params, [
+ \[ "NOT regexp_split_to_array(bodies_str, ',') && ?", [ {} => [ $cat->body_id ] ] ],
+ category => { '!=' => $cat->category } ];
+ }
+
+ # Noop bodies
+ my @noop_bodies = FixMyStreet::DB->resultset('Body')->search({ send_method => 'Noop' })->all;
+ @noop_bodies = map { $_->id } @noop_bodies;
+ push @noop_params, \[ "NOT regexp_split_to_array(bodies_str, ',') && ?", [ {} => \@noop_bodies ] ];
+
+ my $params = {
state => $states,
whensent => undef,
bodies_str => { '!=', undef },
- } );
+ -and => \@noop_params,
+ };
+ if (!$debug) {
+ $params->{'-or'} = [
+ send_fail_count => 0,
+ { send_fail_count => 1, send_fail_timestamp => { '<', \"current_timestamp - '5 minutes'::interval" } },
+ { send_fail_timestamp => { '<', \"current_timestamp - '30 minutes'::interval" } },
+ ];
+ }
+
+ my $unsent = FixMyStreet::DB->resultset('Problem')->search($params);
$manager->log("starting to loop through unsent problem reports...");
my $unsent_count = 0;
@@ -39,7 +66,6 @@ sub send {
manager => $manager,
verbose => $verbose,
nomail => $nomail,
- debug => $debug,
);
$item->process;
}
diff --git a/perllib/FixMyStreet/SendReport.pm b/perllib/FixMyStreet/SendReport.pm
index 0d8bea304..c08a7ddbe 100644
--- a/perllib/FixMyStreet/SendReport.pm
+++ b/perllib/FixMyStreet/SendReport.pm
@@ -18,21 +18,6 @@ has 'error' => ( is => 'rw', isa => Str, default => '' );
has 'unconfirmed_data' => ( 'is' => 'rw', isa => HashRef, default => sub { {} } );
-sub should_skip {
- my $self = shift;
- my $row = shift;
- my $debug = shift;
-
- return 0 unless $row->send_fail_count;
- return 0 if $debug;
-
- my $now = DateTime->now( time_zone => FixMyStreet->local_time_zone );
- my $diff = $now - $row->send_fail_timestamp;
-
- my $backoff = $row->send_fail_count > 1 ? 30 : 5;
- return $diff->in_units( 'minutes' ) < $backoff;
-}
-
sub get_senders {
my $self = shift;
diff --git a/perllib/FixMyStreet/SendReport/Noop.pm b/perllib/FixMyStreet/SendReport/Noop.pm
index 60edda373..933291b7c 100644
--- a/perllib/FixMyStreet/SendReport/Noop.pm
+++ b/perllib/FixMyStreet/SendReport/Noop.pm
@@ -4,9 +4,4 @@ use Moo;
BEGIN { extends 'FixMyStreet::SendReport'; }
-# Always skip when using this method
-sub should_skip {
- return 1;
-}
-
1;