From b892ef1ce69ec4aaa1c3e961c08d00a75877575c Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Mon, 6 Apr 2020 17:50:01 +0100 Subject: Ignore sending failures within the database query. This means the code can assume it should be trying to send a report. --- perllib/FixMyStreet/Script/Reports.pm | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'perllib/FixMyStreet/Script') 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; } -- cgit v1.2.3