Use a task for key exchanges

This commit is contained in:
Mike Cifelli 2024-03-27 09:11:42 -04:00
parent 01ab1c1d54
commit 572ccd1ee8
Signed by: mike
GPG Key ID: 6B08C6BE47D08E4C
5 changed files with 43 additions and 5 deletions

2
.gitignore vendored
View File

@ -35,5 +35,5 @@ chronoscope-*.tar
npm-debug.log npm-debug.log
/assets/node_modules/ /assets/node_modules/
# IDE files # Ignore IDE files.
.elixir_ls/ .elixir_ls/

View File

@ -15,9 +15,10 @@ defmodule Chronoscope.Application do
{Finch, name: Chronoscope.Finch}, {Finch, name: Chronoscope.Finch},
# Start a worker by calling: Chronoscope.Worker.start_link(arg) # Start a worker by calling: Chronoscope.Worker.start_link(arg)
# {Chronoscope.Worker, arg}, # {Chronoscope.Worker, arg},
{Task.Supervisor, name: Chronoscope.TaskSupervisor},
Chronoscope.NTS.Client,
# Start to serve requests, typically the last entry # Start to serve requests, typically the last entry
ChronoscopeWeb.Endpoint, ChronoscopeWeb.Endpoint
Chronoscope.NTS.Client
] ]
# See https://hexdocs.pm/elixir/Supervisor.html # See https://hexdocs.pm/elixir/Supervisor.html

View File

@ -18,6 +18,6 @@ defmodule Chronoscope.NTS do
end end
def key_establishment(host, port) do def key_establishment(host, port) do
GenServer.call(Client, {:key_establishment, %{host: host, port: port}}) GenServer.call(Client, {:key_establishment, %{host: host, port: port}}, 10_000)
end end
end end

View File

@ -68,8 +68,13 @@ defmodule Chronoscope.NTS.Client do
end end
defp current_data(server, now) do defp current_data(server, now) do
response =
Chronoscope.TaskSupervisor
|> Task.Supervisor.async(fn -> KeyEstablishmentClient.key_establishment(server) end)
|> Task.await(10_000)
%{ %{
key_establishment_response: KeyEstablishmentClient.key_establishment(server), key_establishment_response: response,
last_key_establishment: now last_key_establishment: now
} }
end end

32
lib/mix/tasks/deploy.ex Normal file
View File

@ -0,0 +1,32 @@
defmodule Mix.Tasks.Deploy do
use Mix.Task
@moduledoc """
Deploy this application to production.
"""
@shortdoc "deploy to production"
@spec run([...]) :: any
def run([host]) do
System.cmd(
"rsync",
[
"--archive",
"--delete",
"--compress",
"--human-readable",
"--progress",
"--stats",
"--verbose",
"--exclude-from=.gitignore",
"--exclude=.git/",
"./",
"#{host}:chronoscope/"
],
into: IO.stream()
)
System.cmd("ssh", [host, "cd chronoscope && buildah build -t chronoscope:latest && podman auto-update"], into: IO.stream())
end
end