From 3566fe296ac46fc35ef64497d05ee4ba8c923f4a Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Fri, 27 Sep 2024 14:16:28 +0200 Subject: [PATCH] (assistant) Add scheduled update job for screenshot information --- .../domains/SimilarDomainsService.java | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/code/functions/domain-info/java/nu/marginalia/functions/domains/SimilarDomainsService.java b/code/functions/domain-info/java/nu/marginalia/functions/domains/SimilarDomainsService.java index 4f3728cd..fa82541d 100644 --- a/code/functions/domain-info/java/nu/marginalia/functions/domains/SimilarDomainsService.java +++ b/code/functions/domain-info/java/nu/marginalia/functions/domains/SimilarDomainsService.java @@ -21,6 +21,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; public class SimilarDomainsService { @@ -48,7 +51,33 @@ public class SimilarDomainsService { this.dataSource = dataSource; this.linkGraphClient = linkGraphClient; - Thread.ofPlatform().start(this::init); + ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); + + service.scheduleWithFixedDelay(this::init, 0, 1, TimeUnit.SECONDS); + + // Update screenshot info every hour + service.scheduleAtFixedRate(this::updateScreenshotInfo, 1, 1, TimeUnit.HOURS); + } + + private void updateScreenshotInfo() { + try (var connection = dataSource.getConnection()) { + try (var stmt = connection.createStatement()) { + var rs = stmt.executeQuery(""" + SELECT EC_DOMAIN.ID + FROM EC_DOMAIN INNER JOIN DATA_DOMAIN_SCREENSHOT AS SCREENSHOT ON EC_DOMAIN.DOMAIN_NAME = SCREENSHOT.DOMAIN_NAME + """); + + while (rs.next()) { + final int id = rs.getInt(1); + final int idx = domainIdToIdx.get(id); + + screenshotDomains.add(idx); + } + } + } + catch (SQLException throwables) { + logger.warn("Failed to update screenshot info", throwables); + } } private void init() { @@ -137,18 +166,7 @@ public class SimilarDomainsService { activeDomains.add(idx); } - - rs = stmt.executeQuery(""" - SELECT EC_DOMAIN.ID - FROM EC_DOMAIN INNER JOIN DATA_DOMAIN_SCREENSHOT AS SCREENSHOT ON EC_DOMAIN.DOMAIN_NAME = SCREENSHOT.DOMAIN_NAME - """); - - while (rs.next()) { - final int id = rs.getInt(1); - final int idx = domainIdToIdx.get(id); - - screenshotDomains.add(idx); - } + updateScreenshotInfo(); logger.info("Loaded {} domains", domainRanks.size()); isReady = true;