From 7feb550540a75ac8abceecc6c9f015dcd4a5579e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro?= Date: Sun, 5 May 2024 02:38:06 +0200 Subject: [PATCH] Only queue player if it was not updated in 12 hours --- .../lib/scrapper/queue/player_queue.ex | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/apps/scrapper/lib/scrapper/queue/player_queue.ex b/apps/scrapper/lib/scrapper/queue/player_queue.ex index bbc998d..1259bd2 100644 --- a/apps/scrapper/lib/scrapper/queue/player_queue.ex +++ b/apps/scrapper/lib/scrapper/queue/player_queue.ex @@ -1,6 +1,9 @@ defmodule Scrapper.Queue.PlayerQueue do + require Logger use GenServer + @hours_to_update_player 12 + def start_link(_opts) do GenServer.start_link(__MODULE__, {}, name: __MODULE__) end @@ -13,15 +16,37 @@ defmodule Scrapper.Queue.PlayerQueue do {:ok, {channel, connection}} end - @spec queue_player(String.t()) :: nil - def queue_player(puuid) do + @spec queue_puuid(String.t()) :: nil + def queue_puuid(puuid) do case LolAnalytics.Player.PlayerRepo.get_player(puuid) do nil -> GenServer.call(__MODULE__, {:queue_player, puuid}) - _ -> :already_processed + player_entry -> queue_if_not_updated?(player_entry) + end + end + + @spec queue_if_not_updated?(%LolAnalytics.Player.PlayerSchema{}) :: nil + defp queue_if_not_updated?(player = %LolAnalytics.Player.PlayerSchema{}) do + now = DateTime.utc_now() |> DateTime.truncate(:second) + + case player.last_processed_at do + nil -> + GenServer.call(__MODULE__, {:queue_player, player.puuid}) + + processed_at -> + diff_in_hours = DateTime.diff(now, processed_at, :hour) + + if diff_in_hours > @hours_to_update_player do + GenServer.call(__MODULE__, {:queue_player, player.puuid}) + else + Logger.info( + "Player #{player.puuid} already processed at #{player.last_processed_at}, diff was #{diff_in_hours}" + ) + end end end def handle_call({:queue_player, puuid}, _from, {channel, _} = state) do + LolAnalytics.Player.PlayerRepo.insert_player(puuid) AMQP.Basic.publish(channel, "", "player", puuid) {:reply, nil, state} end