Prevent duplicate car status rows
This commit is contained in:
+20
-1
@@ -494,7 +494,9 @@ function tcp_worker_process_job(array $job): void
|
||||
$status = $uiTimedOut ? 'settled_late' : 'settled';
|
||||
$error = $uiTimedOut ? 'late_response_after_ui_timeout' : '';
|
||||
tcp_queue_record_usage_and_status($pdo, $job, $status, $sentBytes, $receivedBytes, true, $error, $trimmed, $connectMs, $readMs);
|
||||
if ($uiTimedOut) {
|
||||
tcp_queue_maybe_store_status($pdo, $job, $trimmed);
|
||||
}
|
||||
}
|
||||
|
||||
function tcp_request_wait_for_queue(
|
||||
@@ -727,6 +729,23 @@ function db_insert_status(
|
||||
return;
|
||||
}
|
||||
|
||||
$ts = date('Y-m-d H:i:s');
|
||||
|
||||
$dupStmt = $pdo->prepare(""
|
||||
. "SELECT seq FROM car_status "
|
||||
. "WHERE id='car' AND ts = :ts AND cmd <=> :cmd AND raw_trim <=> :raw_trim "
|
||||
. "ORDER BY seq ASC LIMIT 1"
|
||||
);
|
||||
$dupStmt->execute([
|
||||
':ts' => $ts,
|
||||
':cmd' => $cmd,
|
||||
':raw_trim' => $rawTrim,
|
||||
]);
|
||||
|
||||
if ($dupStmt->fetchColumn()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = "INSERT INTO car_status (
|
||||
id, ts, cmd,
|
||||
boundary, engine, driving, battery_voltage,
|
||||
@@ -743,7 +762,7 @@ function db_insert_status(
|
||||
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([
|
||||
':ts' => date('Y-m-d H:i:s'),
|
||||
':ts' => $ts,
|
||||
':cmd' => $cmd,
|
||||
|
||||
':boundary' => $data['boundary'],
|
||||
|
||||
Reference in New Issue
Block a user