From e9ad14ae45d7a8ddef768cc5a8fb3a807e15927f Mon Sep 17 00:00:00 2001 From: Jean-Louis Huynen Date: Fri, 13 Sep 2024 07:31:01 +0200 Subject: [PATCH] chg: [connections] supervisor update --- config/config.exs | 2 + lib/cocktailparty/broker.ex | 5 +- lib/cocktailparty/dynamic_supervisor_boot.ex | 6 +-- lib/cocktailparty/input.ex | 51 +++++++++++-------- lib/cocktailparty/input/connection.ex | 6 +-- mix.exs | 4 +- .../connection_controller_test.exs | 1 + 7 files changed, 43 insertions(+), 32 deletions(-) diff --git a/config/config.exs b/config/config.exs index 5dee3c5..ec9436a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -114,3 +114,5 @@ config :remote_ip, debug: false # TimeZone data config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase + +config :tzdata, :autoupdate, :disabled diff --git a/lib/cocktailparty/broker.ex b/lib/cocktailparty/broker.ex index 45cac3e..8841357 100644 --- a/lib/cocktailparty/broker.ex +++ b/lib/cocktailparty/broker.ex @@ -19,11 +19,12 @@ defmodule Cocktailparty.Broker do def init(opts) do connection = opts[:connection] + dbg(connection) {:ok, pubsub} = PubSub.start_link( - host: connection.hostname, - port: connection.port, + host: connection.config["hostname"], + port: connection.config["port"], name: {:global, "pubsub_" <> Integer.to_string(connection.id)} ) diff --git a/lib/cocktailparty/dynamic_supervisor_boot.ex b/lib/cocktailparty/dynamic_supervisor_boot.ex index a7b65fc..6f4ba64 100644 --- a/lib/cocktailparty/dynamic_supervisor_boot.ex +++ b/lib/cocktailparty/dynamic_supervisor_boot.ex @@ -1,5 +1,5 @@ defmodule Cocktailparty.DynamicSupervisorBoot do - # alias Cocktailparty.Input.Connection + alias Cocktailparty.Input.Connection use Supervisor require Logger @@ -20,8 +20,8 @@ defmodule Cocktailparty.DynamicSupervisorBoot do Logger.info("Connection Dynamic Supervisor Task started") # When starting we check what inputs are available # for each instance, we start a redix connection along with a broker gen_server - # list_connections() - # |> Enum.each(fn x -> Connection.start(x) end) + Cocktailparty.Input.list_connections() + |> Enum.each(fn x -> Connection.start(x) end) end} ] diff --git a/lib/cocktailparty/input.ex b/lib/cocktailparty/input.ex index b649659..aac1850 100644 --- a/lib/cocktailparty/input.ex +++ b/lib/cocktailparty/input.ex @@ -205,27 +205,34 @@ defmodule Cocktailparty.Input do Get the status of a redis connection """ - # def connected?(%Connection{} = connection) do - def connected?(%Connection{} = _) do - # TODO refacto for connections - # case GenServer.whereis({:global, "redix_" <> Integer.to_string(connection.id)}) do - # nil -> - # false - - # # name, node - # {_, _} -> - # true - - # # pid - # pid -> - # case :sys.get_state(pid) do - # {:connected, _} -> - # true - - # _ -> - # false - # end - # end - false + def connected?(%Connection{} = connection) do + case connection.type do + "redis" -> + case GenServer.whereis({:global, "redix_" <> Integer.to_string(connection.id)}) do + nil -> + false + + # name, node + {_, _} -> + true + + # pid + pid -> + case :sys.get_state(pid) do + {:connected, _} -> + true + + _ -> + false + end + end + + # TODO + "stomp" -> + false + + _ -> + false + end end end diff --git a/lib/cocktailparty/input/connection.ex b/lib/cocktailparty/input/connection.ex index e94f197..b291133 100644 --- a/lib/cocktailparty/input/connection.ex +++ b/lib/cocktailparty/input/connection.ex @@ -68,14 +68,14 @@ defmodule Cocktailparty.Input.Connection do supervisor_node = node(sup) case :rpc.call(supervisor_node, DynamicSupervisor, :start_child, [ - {:global, Cocktailparty.RedisInstancesDynamicSupervisor}, + {:global, Cocktailparty.ConnectionsDynamicSupervisor}, spec_redix ]) do {:ok, pid} -> Logger.info("Redix driver alive for #{rc.name} with pid #{pid_to_string(pid)}") case :rpc.call(supervisor_node, DynamicSupervisor, :start_child, [ - {:global, Cocktailparty.RedisInstancesDynamicSupervisor}, + {:global, Cocktailparty.ConnectionsDynamicSupervisor}, spec_broker ]) do {:ok, pid_broker} -> @@ -159,7 +159,7 @@ defmodule Cocktailparty.Input.Connection do defp get_supervisor() do # locate the reponsible broker process - case GenServer.whereis({:global, Cocktailparty.RedisInstancesDynamicSupervisor}) do + case GenServer.whereis({:global, Cocktailparty.ConnectionsDynamicSupervisor}) do {name, node} -> Logger.info("Supervisor is located at: #{node}/#{name}") {name, node} diff --git a/mix.exs b/mix.exs index e7f00b1..36562df 100644 --- a/mix.exs +++ b/mix.exs @@ -31,7 +31,7 @@ defmodule Cocktailparty.MixProject do ] end - defp extra_applications(:dev), do: [:observer, :wx] + defp extra_applications(:dev), do: [:observer, :wx, :debugger] defp extra_applications(_), do: [] # Specifies which paths to compile per environment. @@ -74,7 +74,7 @@ defmodule Cocktailparty.MixProject do {:fun_with_flags_ui, "~> 0.8.1", runtime: false}, # Libcluster {:libcluster, "~> 3.3"}, - {:tzdata, "~> 1.1.1"}, + {:tzdata, "~> 1.1.2"}, # STOMP support {:barytherium, "~> 0.7.0"}, # YAML parsing diff --git a/test/cocktailparty_web/controllers/connection_controller_test.exs b/test/cocktailparty_web/controllers/connection_controller_test.exs index 740dd8a..8bfaa83 100644 --- a/test/cocktailparty_web/controllers/connection_controller_test.exs +++ b/test/cocktailparty_web/controllers/connection_controller_test.exs @@ -1,5 +1,6 @@ defmodule CocktailpartyWeb.ConnectionControllerTest do use CocktailpartyWeb.ConnCase + # use CocktailpartyWeb.DataCase import Cocktailparty.InputFixtures