diff options
author | Matthew Somerville <matthew@mysociety.org> | 2020-04-06 17:50:01 +0100 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2020-04-06 17:50:01 +0100 |
commit | b892ef1ce69ec4aaa1c3e961c08d00a75877575c (patch) | |
tree | 403d1fd9a8bb860db8dd5f4ce769a36fb2a866e1 /perllib | |
parent | 99043455d12b3d7952d21bff0538539a9601ebf0 (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.pm | 15 | ||||
-rw-r--r-- | perllib/FixMyStreet/Script/Reports.pm | 32 | ||||
-rw-r--r-- | perllib/FixMyStreet/SendReport.pm | 15 | ||||
-rw-r--r-- | perllib/FixMyStreet/SendReport/Noop.pm | 5 |
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; |