From 3dda8c228cd536aa76a2a7b6d58e3d6da164b405 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Fri, 27 Sep 2024 14:52:05 +0200 Subject: [PATCH] (live-capture) Handle failed screenshot fetch in BrowserlessClient Return an empty byte array when screenshot fetch fails, ensuring downstream processes are not impacted by null responses. Additionally, only attempt to upload the screenshot if the byte array is non-empty, preventing invalid data from being stored. --- .../java/nu/marginalia/livecapture/BrowserlessClient.java | 1 + .../nu/marginalia/livecapture/LiveCaptureGrpcService.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/functions/live-capture/java/nu/marginalia/livecapture/BrowserlessClient.java b/code/functions/live-capture/java/nu/marginalia/livecapture/BrowserlessClient.java index 1d54867a..0e48f0bf 100644 --- a/code/functions/live-capture/java/nu/marginalia/livecapture/BrowserlessClient.java +++ b/code/functions/live-capture/java/nu/marginalia/livecapture/BrowserlessClient.java @@ -74,6 +74,7 @@ public class BrowserlessClient implements AutoCloseable { if (rsp.statusCode() >= 300) { logger.info("Failed to fetch screenshot for {}, status {}", url, rsp.statusCode()); + return new byte[0]; } return rsp.body(); diff --git a/code/functions/live-capture/java/nu/marginalia/livecapture/LiveCaptureGrpcService.java b/code/functions/live-capture/java/nu/marginalia/livecapture/LiveCaptureGrpcService.java index 0b4ee756..66b2dc9c 100644 --- a/code/functions/live-capture/java/nu/marginalia/livecapture/LiveCaptureGrpcService.java +++ b/code/functions/live-capture/java/nu/marginalia/livecapture/LiveCaptureGrpcService.java @@ -170,7 +170,9 @@ public class LiveCaptureGrpcService byte[] pngBytes = client.screenshot(domain.toRootUrlHttps().toString(), BrowserlessClient.GotoOptions.defaultValues(), BrowserlessClient.ScreenshotOptions.defaultValues()); - ScreenshotDbOperations.uploadScreenshot(conn, domain, pngBytes); + if (pngBytes.length > 0) { + ScreenshotDbOperations.uploadScreenshot(conn, domain, pngBytes); + } } catch (Exception e) { ScreenshotDbOperations.flagDomainAsFetched(conn, domain); }