Paperelectron

Paperelectron

Wiring up a Dashboard for Dynamic Supervised GenServers

Hey all, I’m looking to get some general advice on how to wire up a bunch of Dynamic Supervised GenServers, named via the registry, to a LiveView frontend. I’d like them to be able to broadcast updates about what they are doing, and have the individual list members update.

I’m currently using Registry.select to get the list of servers, but I’m unsure about how to go about handling adding and removing new named Servers as they come up. I’d rather not put any of the data about these servers in the DB, as they are meant to be pretty ephemeral.

My gut feeling is I should have a separate GenServer that handles Subscriptions and the overarching state of the list that I can then use LiveView to call into/receive messages from. Would I use this GenServer to handle the creation/deletion of the child Servers? Use Monitors? This feels like I’m stepping on the toes of the Registry a bit? What happens when I want to cluster this?

Basically, this is the type of problem I want to solve generally using Elixir, and I don’t yet have enough experience to know the correct way to approach it.

Not looking for any detailed code just a bit of a discussion on how those with more experience would architect something like this.

Marked As Solved

schneebyte

schneebyte

Erlang -- pg might be able to handle that out of the box.

You can monitor scopes/groups and get notifications when they join/leave (spawn/die).
Group names can be any Erlang term, so with the right scope/group structure it can be very flexible.

Maybe the GenServers could push state updates instead of polling them for an update.
Have the liveview process register to one or multiple groups {:i_want_notifications, :topic1} and the individual GenServers can send state updates to all members of that group.

Also Liked

al2o3cr

al2o3cr

A fairly common pattern would combine an initial call to Registry with PubSub:

  • the LiveView fetches the “current list” from the registry
  • it also subscribes to a “new server started” pubsub topic (and probably a “server ended”?)
  • when a server starts, it sends a pubsub notification of that

Adding things like clustering to the mix makes handling cases like “the whole NODE these servers were on went away”; you may need to include some kind of liveness-checking in your LiveView.

Where Next?

Popular in Questions Top

Tee
can someone please explain to me how Enum.reduce works with maps
New
_russellb
I want to try my hand at web scraping. What tools/libraries do I need to use. I’m hoping to turn this into something professional so don’...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
quazar
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
Kagamiiiii
Student & New to elixir. Nice language. I want to convert a english character, e.g. “a”, which is stored in a variable, to it’s asci...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
gonzofish
I’m currently trying to understand how to join three tables using Ecto. All the examples I’ve seen use 2, so maybe I’m just missing somet...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Other popular topics Top

lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
polypush135
As many of you may have realized by now (sorry for all the posts here) I’ve been working on a db problem where I’m trying to aggregate a ...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 27727 240
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
magnetic
Hey :wave:t3: Elixir community, I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New

We're in Beta

About us Mission Statement