first commit
This commit is contained in:
64
backend/ride/rides/cron_ride_timeout.php
Executable file
64
backend/ride/rides/cron_ride_timeout.php
Executable file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
// cron_cleanup_waiting.php
|
||||
// مسار الاتصال بقاعدة البيانات
|
||||
require_once __DIR__ . '/../../get_connect.php';
|
||||
|
||||
// تسجيل في اللوج لبداية العملية
|
||||
error_log("⏰ [Cleanup Cron] Started cleaning old waiting rides...");
|
||||
|
||||
try {
|
||||
// المدة المسموحة بالدقائق
|
||||
$minutesLimit = 15;
|
||||
|
||||
// =========================================================
|
||||
// الخطوة 1: تحديث الحالة في الجدول الرئيسي (الأرشيف)
|
||||
// =========================================================
|
||||
// نقوم بتحديث حالة الرحلات التي ستُحذف ليعلم الراكب أنها انتهت (Time Out)
|
||||
// بدلاً من أن تبقى 'waiting' للأبد في سجلات الراكب
|
||||
|
||||
$sqlUpdate = "UPDATE ride
|
||||
SET status = 'timeout'
|
||||
WHERE id IN (
|
||||
SELECT id FROM waitingRides
|
||||
WHERE created_at < DATE_SUB(NOW(), INTERVAL $minutesLimit MINUTE)
|
||||
) AND status = 'waiting'"; // نتأكد أننا نحدث ما هو معلق فقط
|
||||
|
||||
$stmtUpdate = $con->prepare($sqlUpdate);
|
||||
$stmtUpdate->execute();
|
||||
$updatedCount = $stmtUpdate->rowCount();
|
||||
|
||||
// =========================================================
|
||||
// الخطوة 2: الحذف من جدول الانتظار (تنظيف Hot Data)
|
||||
// =========================================================
|
||||
|
||||
$sqlDelete = "DELETE FROM waitingRides
|
||||
WHERE created_at < DATE_SUB(NOW(), INTERVAL $minutesLimit MINUTE)";
|
||||
|
||||
$stmtDelete = $con->prepare($sqlDelete);
|
||||
$stmtDelete->execute();
|
||||
$deletedCount = $stmtDelete->rowCount();
|
||||
|
||||
// =========================================================
|
||||
// الخطوة 3: (اختياري) تنظيف الريدز
|
||||
// =========================================================
|
||||
// بما أنك تستخدم Redis، المفترض أن تحذفها منه أيضاً.
|
||||
// لكن بما أن الريدز يعتمد على TTL (Expire) أو سيتم تحديثه عند الطلب القادم،
|
||||
// فالحذف من الـ MySQL يكفي لأن getRideWaiting سيفحص MySQL ولن يجدها.
|
||||
|
||||
// تقرير العملية
|
||||
if ($deletedCount > 0) {
|
||||
$msg = "✅ [Cleanup Cron] Success: Timed out $updatedCount rides in Main DB, and Deleted $deletedCount rides from Waiting DB.";
|
||||
error_log($msg);
|
||||
echo json_encode(["status" => "success", "message" => $msg]);
|
||||
} else {
|
||||
$msg = "💤 [Cleanup Cron] No expired rides found.";
|
||||
error_log($msg);
|
||||
echo json_encode(["status" => "success", "message" => "Nothing to clean."]);
|
||||
}
|
||||
|
||||
} catch (PDOException $e) {
|
||||
$errorMsg = "❌ [Cleanup Cron] Error: " . $e->getMessage();
|
||||
error_log($errorMsg);
|
||||
echo json_encode(["status" => "failure", "message" => $e->getMessage()]);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user