# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.
use Croma
defmodule AntikytheraCore.ExecutorPool.RegisteredName do
alias Antikythera.ExecutorPool.Id, as: EPoolId
@prefix "AntikytheraCore.ExecutorPool"
defun supervisor(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(supervisor_parts(epool_id))
end
defun supervisor_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(supervisor_parts(epool_id))
end
defunp supervisor_parts(epool_id :: v[EPoolId.t()]) :: [String.t()] do
common_parts(epool_id, "Sup")
end
defun action_runner_pool_multi(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(action_runner_pool_multi_parts(epool_id))
end
defun action_runner_pool_multi_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(action_runner_pool_multi_parts(epool_id))
end
defunp action_runner_pool_multi_parts(epool_id :: v[EPoolId.t()]) :: [String.t()] do
common_parts(epool_id, "ActionRunnerPoolMulti")
end
defun async_job_runner_pool(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(async_job_runner_pool_parts(epool_id))
end
defun async_job_runner_pool_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(async_job_runner_pool_parts(epool_id))
end
defunp async_job_runner_pool_parts(epool_id :: v[EPoolId.t()]) :: [String.t()] do
common_parts(epool_id, "AsyncJobRunnerPool")
end
defun async_job_broker(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(async_job_broker_parts(epool_id))
end
defun async_job_broker_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(async_job_broker_parts(epool_id))
end
defunp async_job_broker_parts(epool_id :: v[EPoolId.t()]) :: [String.t()] do
common_parts(epool_id, "AsyncJobBroker")
end
defun websocket_connections_counter(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(websocket_connections_counter_parts(epool_id))
end
defun websocket_connections_counter_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(websocket_connections_counter_parts(epool_id))
end
defunp websocket_connections_counter_parts(epool_id :: v[EPoolId.t()]) :: [String.t()] do
common_parts(epool_id, "WebsocketConnectionsCounter")
end
defun memcache_writer(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(memcache_writer_parts(epool_id))
end
defun memcache_writer_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(memcache_writer_parts(epool_id))
end
defunp memcache_writer_parts(epool_id :: v[EPoolId.t()]) :: [String.t()] do
common_parts(epool_id, "MemcacheWriter")
end
defunp common_parts(epool_id :: EPoolId.t(), suffix :: String.t()) :: [String.t()] do
{:gear, gear_name}, suffix -> ["#{@prefix}.Gear", Atom.to_string(gear_name), suffix]
{:tenant, tenant_id}, suffix -> ["#{@prefix}.Tenant", tenant_id, suffix]
end
# Async job queues are treated a bit differently, as they are cluster-wide.
# `:async_job_queue_name_prefix` is introduced here so that some existing deployments can preserve the historic name of job queues.
# New deployments should be OK with the default value.
@job_queue_prefix Application.compile_env(:antikythera, :async_job_queue_name_prefix, @prefix)
defun async_job_queue(epool_id :: v[EPoolId.t()]) :: atom do
Module.safe_concat(async_job_queue_parts(epool_id))
end
defun async_job_queue_unsafe(epool_id :: v[EPoolId.t()]) :: atom do
# credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom
Module.concat(async_job_queue_parts(epool_id))
end
defunp async_job_queue_parts(epool_id :: EPoolId.t()) :: [String.t()] do
{:gear, gear_name} ->
["#{@job_queue_prefix}.Gear", Atom.to_string(gear_name), "AsyncJobQueue"]
{:tenant, tenant_id} ->
["#{@job_queue_prefix}.Tenant", tenant_id, "AsyncJobQueue"]
end
end