From 08ca982834eff988930cc73ca6936baa48be9165 Mon Sep 17 00:00:00 2001 From: MiniDigger | Martin Date: Sat, 14 Jan 2023 20:30:46 +0100 Subject: [PATCH] fix(backend): maybe fix stats? two bugs, views where set to version/project id, not the actual new and old views, plus old views where deleted instantly --- .../db/dao/internal/HangarStatsDAO.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/backend/src/main/java/io/papermc/hangar/db/dao/internal/HangarStatsDAO.java b/backend/src/main/java/io/papermc/hangar/db/dao/internal/HangarStatsDAO.java index 069089f51..c3cd7bab4 100644 --- a/backend/src/main/java/io/papermc/hangar/db/dao/internal/HangarStatsDAO.java +++ b/backend/src/main/java/io/papermc/hangar/db/dao/internal/HangarStatsDAO.java @@ -23,28 +23,30 @@ public interface HangarStatsDAO { void fillStatsUserIdsFromOthers(@Define String table); @UseStringTemplateEngine - @SqlUpdate("WITH d AS (" + - " UPDATE SET processed = processed + 1 " + - " WHERE user_id IS NOT NULL" + - " RETURNING created_at, project_id, version_id, user_idaddress, processed" + - " )" + - " INSERT " + - " INTO AS pvd (day, project_id, version_id, )" + - " SELECT sq.day," + - " sq.project_id," + - " sq.version_id," + - " count(DISTINCT sq.user_idaddress) FILTER (WHERE sq.processed \\<@ ARRAY[1])" + - " FROM (SELECT date_trunc('DAY', d.created_at)::date AS day," + - " d.project_id," + - " d.version_id," + - " user_idaddress," + - " array_agg(d.processed) AS processed" + - " FROM d" + - " GROUP BY date_trunc('DAY', d.created_at), d.project_id, d.version_id, user_idaddress) sq" + - " GROUP BY sq.day, sq.version_id, sq.project_id" + - " ON CONFLICT(day, version_idproject_id) DO UPDATE SET = pvd.version_idproject_id + excluded.version_idproject_id") + @SqlUpdate(""" + WITH d AS ( + UPDATE SET processed = processed + 1 + WHERE user_id IS NOT NULL + RETURNING created_at, project_id, version_id, user_idaddress, processed + ) + INSERT + INTO AS pvd (day, project_id, version_id, ) + SELECT sq.day, + sq.project_id, + sq.version_id, + count(DISTINCT sq.user_idaddress) FILTER (WHERE sq.processed \\<@ ARRAY[1]) + FROM (SELECT date_trunc('DAY', d.created_at)::date AS day, + d.project_id, + d.version_id, + user_idaddress, + array_agg(d.processed) AS processed + FROM d + GROUP BY date_trunc('DAY', d.created_at), d.project_id, d.version_id, user_idaddress) sq + GROUP BY sq.day, sq.version_id, sq.project_id + ON CONFLICT(day, version_idproject_id) DO UPDATE SET = pvd. + excluded. + """) void processStatsMain(@Define String individualTable, @Define String dayTable, @Define String statColumn, @Define boolean withUserId, @Define boolean includeVersionId); - @SqlUpdate("DELETE FROM WHERE processed != 0 AND created_at < now() + '30 days'::INTERVAL") + @SqlUpdate("DELETE FROM
WHERE processed != 0 AND created_at < now() - '10 days'::INTERVAL") void deleteOldIndividual(@Define String table); }