From 10114dae508ecd51dfec762c7c50a01c3a0d1188 Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Fri, 8 May 2026 11:34:06 +0000 Subject: [PATCH] errors: report EVERY server/gateway error to GitHub Issues PHP api/index.php: - DB connection failure (500) now calls _phpErrorReport() - Main router catch-all (500) now calls _phpErrorReport() - undoTransaction DB error (500) now calls _phpErrorReport() PHP api/cron_smart_shopping.php: - cron Throwable catch now calls _phpErrorReport() before exit(1) (fires even in CRON_MODE since _phpErrorReport() has its own guard) Scale Gateway GatewayWebSocketServer.kt: - onError() now calls ErrorReporter.report(ex, ...) in addition to Log.e Combined with previous kiosk commit, every error path in the entire EverShelf stack now sends an automatic GitHub Issue. --- api/cron_smart_shopping.php | 5 ++++- api/index.php | 3 +++ .../dadaloop/evershelf/scalegate/GatewayWebSocketServer.kt | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/api/cron_smart_shopping.php b/api/cron_smart_shopping.php index 1b97d1b..debef85 100644 --- a/api/cron_smart_shopping.php +++ b/api/cron_smart_shopping.php @@ -41,6 +41,9 @@ try { echo '[' . date('Y-m-d H:i:s') . '] OK — ' . count($decoded['items'] ?? []) . " items cached\n"; } catch (Throwable $e) { - echo '[' . date('Y-m-d H:i:s') . '] ERROR: ' . $e->getMessage() . "\n"; + $msg = $e->getMessage(); + echo '[' . date('Y-m-d H:i:s') . '] ERROR: ' . $msg . "\n"; + // Report to GitHub Issues (uses the same _phpErrorReport from index.php) + _phpErrorReport($msg, $e->getFile(), $e->getLine(), $e->getTraceAsString(), get_class($e)); exit(1); } diff --git a/api/index.php b/api/index.php index 0f3a660..0f1a98f 100644 --- a/api/index.php +++ b/api/index.php @@ -188,6 +188,7 @@ try { } catch (Exception $e) { http_response_code(500); echo json_encode(['error' => 'Database connection failed: ' . $e->getMessage()]); + _phpErrorReport($e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString(), get_class($e)); exit; } @@ -432,6 +433,7 @@ try { } catch (Exception $e) { http_response_code(500); echo json_encode(['error' => $e->getMessage()]); + _phpErrorReport($e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString(), get_class($e)); } endif; // end !CRON_MODE @@ -1652,6 +1654,7 @@ function undoTransaction(PDO $db): void { $db->rollBack(); http_response_code(500); echo json_encode(['error' => 'DB error: ' . $e->getMessage()]); + _phpErrorReport($e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString(), get_class($e)); } } diff --git a/evershelf-scale-gateway/app/src/main/kotlin/it/dadaloop/evershelf/scalegate/GatewayWebSocketServer.kt b/evershelf-scale-gateway/app/src/main/kotlin/it/dadaloop/evershelf/scalegate/GatewayWebSocketServer.kt index 277c259..6090b71 100644 --- a/evershelf-scale-gateway/app/src/main/kotlin/it/dadaloop/evershelf/scalegate/GatewayWebSocketServer.kt +++ b/evershelf-scale-gateway/app/src/main/kotlin/it/dadaloop/evershelf/scalegate/GatewayWebSocketServer.kt @@ -94,6 +94,8 @@ class GatewayWebSocketServer( override fun onError(conn: WebSocket?, ex: Exception) { Log.e(TAG, "WebSocket error on ${conn?.remoteSocketAddress}", ex) + ErrorReporter.report(ex, "GatewayWebSocketServer.onError", + mapOf("remote_addr" to (conn?.remoteSocketAddress?.toString() ?: "null"))) } // ─── Publishing API ────────────────────────────────────────────────────────