spawn tasks for processing matches
Some checks are pending
ci / docker (push) Waiting to run

This commit is contained in:
Álvaro 2024-06-14 04:58:40 +02:00
parent 3e3017f31a
commit 6d89ed657c
5 changed files with 30 additions and 4 deletions

View File

@ -10,7 +10,8 @@ defmodule LoLAnalytics.Application do
children = [ children = [
LoLAnalytics.Repo, LoLAnalytics.Repo,
{DNSCluster, query: Application.get_env(:lol_analytics, :dns_cluster_query) || :ignore}, {DNSCluster, query: Application.get_env(:lol_analytics, :dns_cluster_query) || :ignore},
{Phoenix.PubSub, name: LoLAnalytics.PubSub} {Phoenix.PubSub, name: LoLAnalytics.PubSub},
{Task.Supervisor, name: LoLAnalytics.TaskSupervisor}
# Start a worker by calling: LoLAnalytics.Worker.start_link(arg) # Start a worker by calling: LoLAnalytics.Worker.start_link(arg)
# {LoLAnalytics.Worker, arg} # {LoLAnalytics.Worker, arg}
] ]

View File

@ -1,6 +1,7 @@
defmodule LolAnalytics.Facts.ChampionPickedItem.Repo do defmodule LolAnalytics.Facts.ChampionPickedItem.Repo do
import Ecto.Query import Ecto.Query
alias LolAnalytics.Dimensions.Patch.PatchRepo
alias LolAnalytics.Dimensions.Item.ItemSchema alias LolAnalytics.Dimensions.Item.ItemSchema
alias LolAnalytics.Dimensions.Champion.ChampionSchema alias LolAnalytics.Dimensions.Champion.ChampionSchema
alias LolAnalytics.Facts.ChampionPickedItem.Schema alias LolAnalytics.Facts.ChampionPickedItem.Schema
@ -33,7 +34,7 @@ defmodule LolAnalytics.Facts.ChampionPickedItem.Repo do
_match = MatchRepo.get_or_create(attrs.match_id) _match = MatchRepo.get_or_create(attrs.match_id)
_champion = ChampionRepo.get_or_create(attrs.champion_id) _champion = ChampionRepo.get_or_create(attrs.champion_id)
_player = PlayerRepo.get_or_create(attrs.puuid) _player = PlayerRepo.get_or_create(attrs.puuid)
_patch = PlayerRepo.get_or_create(attrs.patch_number) _patch = PatchRepo.get_or_create(attrs.patch_number)
_item_id = ItemRepo.get_or_create(attrs.item_id) _item_id = ItemRepo.get_or_create(attrs.item_id)
prev = prev =

View File

@ -1,6 +1,16 @@
defmodule LolAnalytics.Facts.FactsRunner do defmodule LolAnalytics.Facts.FactsRunner do
alias LolAnalytics.Facts alias LolAnalytics.Facts
def analyze_by_patch(patch) do
Storage.MatchStorage.S3MatchStorage.stream_files("ranked", patch: patch)
|> peach(fn %{key: path} ->
get_facts()
|> Enum.each(fn fact_runner ->
apply(fact_runner, ["http://192.168.1.55:9000/ranked/#{path}"])
end)
end)
end
def analyze_all_matches do def analyze_all_matches do
Storage.MatchStorage.S3MatchStorage.stream_files("ranked") Storage.MatchStorage.S3MatchStorage.stream_files("ranked")
|> peach(fn %{key: path} -> |> peach(fn %{key: path} ->

View File

@ -0,0 +1,12 @@
defmodule LolAnalytics.MatchesProcessor do
use GenServer
@doc """
iex> LolAnalytics.MatchesProcessor.process_for_patch "14.12.593.5894"
"""
def process_for_patch(patch) do
Task.Supervisor.async(LoLAnalytics.TaskSupervisor, fn ->
LolAnalytics.Facts.FactsRunner.analyze_by_patch(patch)
end)
end
end

View File

@ -7,8 +7,10 @@ defmodule Storage.MatchStorage.S3MatchStorage do
end end
@impl true @impl true
def stream_files(path) do def stream_files(path, opts \\ []) do
ExAws.S3.list_objects_v2(path) patch = Keyword.get(opts, :patch, "")
ExAws.S3.list_objects_v2(path, prefix: patch)
|> ExAws.stream!() |> ExAws.stream!()
end end