logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

worker_helper.ex (1291B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Workers.WorkerHelper do
  5. alias Pleroma.Config
  6. alias Pleroma.Workers.WorkerHelper
  7. def worker_args(queue) do
  8. case Config.get([:workers, :retries, queue]) do
  9. nil -> []
  10. max_attempts -> [max_attempts: max_attempts]
  11. end
  12. end
  13. def sidekiq_backoff(attempt, pow \\ 4, base_backoff \\ 15) do
  14. backoff =
  15. :math.pow(attempt, pow) +
  16. base_backoff +
  17. :rand.uniform(2 * base_backoff) * attempt
  18. trunc(backoff)
  19. end
  20. defmacro __using__(opts) do
  21. caller_module = __CALLER__.module
  22. queue = Keyword.fetch!(opts, :queue)
  23. quote do
  24. # Note: `max_attempts` is intended to be overridden in `new/2` call
  25. use Oban.Worker,
  26. queue: unquote(queue),
  27. max_attempts: 1
  28. alias Oban.Job
  29. def enqueue(op, params, worker_args \\ []) do
  30. params = Map.merge(%{"op" => op}, params)
  31. queue_atom = String.to_atom(unquote(queue))
  32. worker_args = worker_args ++ WorkerHelper.worker_args(queue_atom)
  33. unquote(caller_module)
  34. |> apply(:new, [params, worker_args])
  35. |> Oban.insert()
  36. end
  37. end
  38. end
  39. end