Skip to content

Commit 75b5766

Browse files
committed
fix on job time out
* AttendeeService::resynchAttendeesStatusBySummit refactor Change-Id: Ifbbb8243ebcf2617085e1902a0af8c656a40b934
1 parent 43667ec commit 75b5766

4 files changed

Lines changed: 73 additions & 46 deletions

File tree

app/Console/Commands/RecalculateAttendeesStatusCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public function handle()
7777
$summit_id = $this->argument('summit_id');
7878
if(empty($summit_id))
7979
throw new \InvalidArgumentException("summit_id is required");
80-
$this->service->recalculateAttendeeStatus(intval($summit_id));
80+
$this->service->resynchAttendeesStatusBySummit(intval($summit_id));
8181
$end = time();
8282
$delta = $end - $start;
8383
$this->info(sprintf("execution call %s seconds", $delta));

app/Jobs/SynchAllAttendeesStatus.php

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,26 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
**/
14+
15+
use App\Services\Model\IAttendeeService;
1416
use Illuminate\Bus\Queueable;
1517
use Illuminate\Contracts\Queue\ShouldQueue;
1618
use Illuminate\Foundation\Bus\Dispatchable;
1719
use Illuminate\Queue\InteractsWithQueue;
1820
use Illuminate\Queue\SerializesModels;
1921
use Illuminate\Support\Facades\Log;
2022
use libs\utils\ITransactionService;
21-
use models\exceptions\EntityNotFoundException;
2223
use models\summit\ISummitAttendeeRepository;
2324
use models\summit\ISummitRepository;
24-
use models\summit\Summit;
25-
use models\summit\SummitAttendee;
2625

2726
/**
2827
* Class SynchAllAttendeesStatus
2928
* @package App\Jobs
3029
*/
31-
class SynchAllAttendeesStatus implements ShouldQueue
30+
final class SynchAllAttendeesStatus implements ShouldQueue
3231
{
3332
public $tries = 1;
3433

35-
public $timeout = 0;
36-
3734
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
3835

3936
/**
@@ -51,36 +48,22 @@ public function __construct(int $summit_id)
5148
}
5249

5350
/**
51+
* @param IAttendeeService $service
5452
* @param ISummitRepository $repository
53+
* @param ISummitAttendeeRepository $attendeeRepository
5554
* @param ITransactionService $tx_service
55+
* @return void
5656
* @throws \Exception
5757
*/
58-
public function handle(
59-
ISummitRepository $repository,
60-
ISummitAttendeeRepository $attendeeRepository,
61-
ITransactionService $tx_service
62-
)
58+
public function handle(IAttendeeService $service)
6359
{
6460
Log::debug(sprintf("SynchAllAttendeesStatus::handle summit %s", $this->summit_id));
65-
$attendees_ids = $tx_service->transaction(function() use($repository){
66-
$attendees_ids = [];
67-
$summit = $repository->getById($this->summit_id);
68-
if(!$summit instanceof Summit)
69-
throw new EntityNotFoundException(sprintf("Summit %s not found", $this->summit_id));
70-
71-
foreach($summit->getAttendees() as $a)
72-
$attendees_ids[] = $a->getId();
73-
74-
return $attendees_ids;
75-
});
61+
$service->resynchAttendeesStatusBySummit($this->summit_id);
62+
}
7663

77-
foreach ($attendees_ids as $attendee_id){
78-
$tx_service->transaction(function() use($attendeeRepository, $attendee_id){
79-
$attendee = $attendeeRepository->getById($attendee_id);
80-
if(!$attendee instanceof SummitAttendee) return;
81-
$attendee->updateStatus();
82-
});
83-
}
64+
public function failed(\Throwable $exception)
65+
{
66+
Log::error($exception);
8467
}
8568
}
8669

app/Services/Model/AttendeeService.php

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -551,17 +551,6 @@ public function send(int $summit_id, array $payload, Filter $filter = null): voi
551551
$summit_id, $flow_event, is_null($filter) ? '' : $filter->__toString(), $count));
552552
}
553553

554-
public function recalculateAttendeeStatus(int $summit_id):void{
555-
$this->tx_service->transaction(function() use($summit_id){
556-
$summit = $this->summit_repository->getById($summit_id);
557-
if(is_null($summit) || !$summit instanceof Summit) return;
558-
559-
foreach($summit->getAttendees() as $attendee){
560-
$attendee->updateStatus();
561-
}
562-
});
563-
}
564-
565554
public function doVirtualCheckin(Summit $summit, int $attendee_id): ?SummitAttendee
566555
{
567556
return $this->tx_service->transaction(function() use($summit, $attendee_id){
@@ -739,4 +728,62 @@ public function updateAttendeesByMemberId(int $member_id): void
739728
}
740729
});
741730
}
731+
732+
/**
733+
* @param int $summit_id
734+
* @return void
735+
* @throws EntityNotFoundException
736+
*/
737+
public function resynchAttendeesStatusBySummit(int $summit_id): void
738+
{
739+
740+
Log::debug(sprintf("AttendeeService::resynchAttendeesStatusBySummit summit id %s", $summit_id));
741+
$summit = $this->summit_repository->getById($summit_id);
742+
if(!$summit instanceof Summit)
743+
throw new EntityNotFoundException(sprintf("Summit %s not found", $summit_id));
744+
745+
$count = 0;
746+
$maxPageSize = 100;
747+
$current_page = 1;
748+
$filter = new Filter();
749+
$filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit_id));
750+
751+
do {
752+
$attendees_ids =
753+
$this->tx_service->transaction(function() use($summit, $current_page, $filter, $maxPageSize) {
754+
Log::debug(sprintf("AttendeeService::resynchAttendeesStatusBySummit page %s", $current_page));
755+
$this->attendee_repository->getAllIdsByPage(new PagingInfo($current_page, $maxPageSize), $filter);
756+
});
757+
758+
if (!count($attendees_ids)) {
759+
// if we are processing a page, then break it
760+
Log::debug
761+
(
762+
sprintf
763+
(
764+
"AttendeeService::resynchAttendeesStatusBySummit summit id %s page is empty, ending processing.",
765+
$summit_id
766+
)
767+
);
768+
break;
769+
}
770+
771+
foreach ($attendees_ids as $attendee_id) {
772+
try {
773+
$this->tx_service->transaction(function () use ($attendee_id) {
774+
$attendee = $this->attendee_repository->getById($attendee_id);
775+
if (!$attendee instanceof SummitAttendee) return;
776+
$attendee->updateStatus();
777+
});
778+
$count++;
779+
}
780+
catch (\Exception $ex){
781+
Log::warning($ex);
782+
}
783+
}
784+
++$current_page;
785+
} while(true);
786+
787+
Log::debug(sprintf("AttendeeService::resynchAttendeesStatusBySummit summit id %s processed %s attendees", $summit_id, $count));
788+
}
742789
}

app/Services/Model/IAttendeeService.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,6 @@ public function triggerSend(Summit $summit, array $payload, $filter = null):void
103103
*/
104104
public function send(int $summit_id, array $payload, Filter $filter = null):void;
105105

106-
/**
107-
* @param int $summit_id
108-
*/
109-
public function recalculateAttendeeStatus(int $summit_id):void;
110-
111106
/**
112107
* @param Summit $summit_id
113108
* @param int $attendee_id
@@ -129,4 +124,6 @@ public function doCheckIn(Summit $summit, String $qr_code): void;
129124
* @param int $member_id
130125
*/
131126
public function updateAttendeesByMemberId(int $member_id):void;
127+
128+
public function resynchAttendeesStatusBySummit(int $summit_id):void;
132129
}

0 commit comments

Comments
 (0)