defmodule Plausible.Workers.LocalImportAnalyticsCleaner do @moduledoc """ Worker for cleaning local files left after analytics import jobs. """ use Oban.Worker, queue: :analytics_imports, unique: [period: 3600] @impl Oban.Worker def perform(%Oban.Job{args: args}) do %{"import_id" => import_id, "paths" => paths} = args if import_in_progress?(import_id) do {:snooze, _one_hour = 3600} else Enum.each(paths, fn path -> # credo:disable-for-next-line Credo.Check.Refactor.Nesting if File.exists?(path), do: File.rm!(path) end) end end defp import_in_progress?(import_id) do import Ecto.Query require Plausible.Imported.SiteImport alias Plausible.Imported.SiteImport SiteImport |> where(id: ^import_id) |> where([i], i.status in ^[SiteImport.pending(), SiteImport.importing()]) |> Plausible.Repo.exists?() end end