CheckQueueFailedJobs

This commit is contained in:
xiaomlove
2024-07-04 03:21:53 +08:00
parent 36fef3e834
commit 137be0c62a
8 changed files with 99 additions and 9 deletions
+1 -2
View File
@@ -98,8 +98,7 @@ class Test extends Command
*/
public function handle()
{
$diff = get_setting("system.alarm_email_receiver");
dd($diff);
CleanupRepository::checkQueueFailedJobs();
}
}
+3
View File
@@ -3,7 +3,9 @@
namespace App\Console;
use App\Jobs\CheckCleanup;
use App\Jobs\CheckQueueFailedJobs;
use Carbon\Carbon;
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@@ -38,6 +40,7 @@ class Kernel extends ConsoleKernel
})->withoutOverlapping();
$schedule->command('meilisearch:import')->weeklyOn(1, "03:00")->withoutOverlapping();
$schedule->command('torrent:load_pieces_hash')->dailyAt("01:00")->withoutOverlapping();
$schedule->job(new CheckQueueFailedJobs())->everySixHours()->withoutOverlapping();
$this->registerScheduleCleanup($schedule);
}
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace App\Jobs;
use App\Repositories\CleanupRepository;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class CheckQueueFailedJobs implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
CleanupRepository::checkQueueFailedJobs();
do_log("checkQueueFailedJobs run success.");
}
}
+51 -6
View File
@@ -273,16 +273,16 @@ LUA;
do_log("receiverUid: $receiverUid");
if (empty($receiverUid)) {
$locale = Locale::getDefault();
$subject = self::getAlarmEmailSubject($locale);
$msg = self::getAlarmEmailBody($now, $level, $lastTime, $interval, $locale);
$subject = self::getAlarmEmailSubjectForCleanup($locale);
$msg = self::getAlarmEmailBodyForCleanup($now, $level, $lastTime, $interval, $locale);
do_log(sprintf("%s - %s", $subject, $msg), "error");
} else {
$receiverUidArr = preg_split("/\s+/", $receiverUid);
$users = User::query()->whereIn("id", $receiverUidArr)->get(User::$commonFields);
foreach ($users as $user) {
$locale = $user->locale;
$subject = self::getAlarmEmailSubject($locale);
$msg = self::getAlarmEmailBody($now, $level, $lastTime, $interval, $locale);
$subject = self::getAlarmEmailSubjectForCleanup($locale);
$msg = self::getAlarmEmailBodyForCleanup($now, $level, $lastTime, $interval, $locale);
$result = $toolRep->sendMail($user->email, $subject, $msg);
do_log(sprintf("send msg: %s result: %s", $msg, var_export($result, true)), $result ? "info" : "error");
}
@@ -291,12 +291,12 @@ LUA;
}
}
private static function getAlarmEmailSubject(string|null $locale = null)
private static function getAlarmEmailSubjectForCleanup(string|null $locale = null)
{
return nexus_trans("cleanup.alarm_email_subject", ["site_name" => get_setting("basic.SITENAME")], $locale);
}
private static function getAlarmEmailBody(Carbon $now, string $level, int $lastTime, int $interval, string|null $locale = null)
private static function getAlarmEmailBodyForCleanup(Carbon $now, string $level, int $lastTime, int $interval, string|null $locale = null)
{
return nexus_trans("cleanup.alarm_email_body", [
"now_time" => $now->toDateTimeString(),
@@ -308,4 +308,49 @@ LUA;
"interval_human" => mkprettytime($interval),
], $locale);
}
public static function checkQueueFailedJobs(): void
{
$now = Carbon::now();
$since = $now->subHours(6)->toDateTimeString();
$failedJobsTable = nexus_config("queue.failed.table");
$failedJobsCount = NexusDB::table($failedJobsTable)->where("failed_at", ">=", $since)->count();
if ($failedJobsCount == 0) {
do_log(sprintf("no failed jobs since: %s", $since));
return;
}
$receiverUid = get_setting("system.alarm_email_receiver");
do_log("receiverUid: $receiverUid");
$toolRep = new ToolRepository();
if (empty($receiverUid)) {
$locale = Locale::getDefault();
$subject = self::getAlarmEmailSubjectForQueueFailedJobs($locale);
$msg = self::getAlarmEmailBodyForQueueFailedJobs($since, $failedJobsCount, $failedJobsTable, $locale);
do_log(sprintf("%s - %s", $subject, $msg), "error");
} else {
$receiverUidArr = preg_split("/\s+/", $receiverUid);
$users = User::query()->whereIn("id", $receiverUidArr)->get(User::$commonFields);
foreach ($users as $user) {
$locale = $user->locale;
$subject = self::getAlarmEmailSubjectForQueueFailedJobs($locale);
$msg = self::getAlarmEmailBodyForQueueFailedJobs($since, $failedJobsCount, $failedJobsTable, $locale);
$result = $toolRep->sendMail($user->email, $subject, $msg);
do_log(sprintf("send msg: %s result: %s", $msg, var_export($result, true)), $result ? "info" : "error");
}
}
}
private static function getAlarmEmailSubjectForQueueFailedJobs(string|null $locale = null)
{
return nexus_trans("cleanup.alarm_email_subject_for_queue_failed_jobs", ["site_name" => get_setting("basic.SITENAME")], $locale);
}
private static function getAlarmEmailBodyForQueueFailedJobs(string $since, int $count, string $failedJobTable, string|null $locale = null)
{
return nexus_trans("cleanup.alarm_email_body_for_queue_failed_jobs", [
"since" => $since,
"count" => $count,
"failed_job_table" => $failedJobTable,
], $locale);
}
}