Current section
Files
Jump to
Current section
Files
lib/worker_tracker.ex
defmodule WorkerTracker do
use Application
alias WorkerTracker.WorkerInstance.Client, as: WorkerInstanceClient
def start(_type, _args) do
IO.puts("Starting the WorkerTracker Application...")
WorkerTrackerSupervisor.start_link()
end
def create_instances(instances) do
instances
|> Enum.map(&create_instance/1)
end
def create_instance(instance) do
case instance_exists?(instance) do
true ->
{:ok, :already_exists}
_ ->
Task.Supervisor.start_child(
WorkerTracker.TaskSupervisor,
DynamicSupervisor,
:start_child,
[InstanceSupervisor, {WorkerTracker.Instance.Server, instance}]
)
end
end
def execute_command(instance, command) do
instance
|> build_name()
|> GenServer.call({:execute_command, command}, :infinity)
end
def get_instance(instance_name) do
%WorkerTracker.WorkerInstance.Client{name: instance_name}
|> WorkerInstanceClient.get_instance()
end
defdelegate refresh_instance(instance), to: WorkerTracker.WorkerInstance.Server
defdelegate terminate_instance_process(instance, process_id, payload \\ %{}),
to: WorkerTracker.WorkerInstance.Server
defdelegate get_instances(), to: WorkerServer
defdelegate build_name(instance), to: WorkerTracker.Instance.Client
defdelegate instance_exists?(instance), to: WorkerTracker.Instance.Client
end