From 638b32e296db090cf8cb6f1884e53372d48aee6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Filmont?= Date: Mon, 4 May 2026 17:05:35 +0200 Subject: [PATCH 1/5] wip --- app/controllers/frames_controller.rb | 3 +++ app/views/frames/index.html.erb | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/frames_controller.rb b/app/controllers/frames_controller.rb index c93856fb8..f6a9d3798 100644 --- a/app/controllers/frames_controller.rb +++ b/app/controllers/frames_controller.rb @@ -13,6 +13,9 @@ def index authorize! @frames = scoped_frames.includes(bay: { islet: :room }).references(bay: { islet: :room }) @filter = ProcessorFilter.new(@frames, params) @frames = @filter.results + @authorized_serveur_per_frame = authorized_scope( + Server.where(frame_id: @frames.map(&:id)), + ).group_by(&:frame_id) end def show diff --git a/app/views/frames/index.html.erb b/app/views/frames/index.html.erb index 87e245540..6e45e1472 100644 --- a/app/views/frames/index.html.erb +++ b/app/views/frames/index.html.erb @@ -79,7 +79,8 @@ <% end %> <% table.with_column(Frame.human_attribute_name(:servers)) do |frame| %> - <%= safe_join(authorized_scope(frame.servers).map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> + <% authorized_servers = @authorized_serveur_per_frame[frame.id] || []%> + <%= safe_join(authorized_servers.map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> <% end %> <% table.with_column(Frame.human_attribute_name(:u), sort_by: :u) do |frame| %> From 9c4a2c0df7fcc6b31d6b3c532f525b26ab3433a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Filmont?= Date: Mon, 4 May 2026 17:08:18 +0200 Subject: [PATCH 2/5] typo --- app/controllers/frames_controller.rb | 2 +- app/views/frames/index.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/frames_controller.rb b/app/controllers/frames_controller.rb index f6a9d3798..a8a474619 100644 --- a/app/controllers/frames_controller.rb +++ b/app/controllers/frames_controller.rb @@ -13,7 +13,7 @@ def index authorize! @frames = scoped_frames.includes(bay: { islet: :room }).references(bay: { islet: :room }) @filter = ProcessorFilter.new(@frames, params) @frames = @filter.results - @authorized_serveur_per_frame = authorized_scope( + @authorized_servers_per_frame = authorized_scope( Server.where(frame_id: @frames.map(&:id)), ).group_by(&:frame_id) end diff --git a/app/views/frames/index.html.erb b/app/views/frames/index.html.erb index 6e45e1472..1e7bf2fc3 100644 --- a/app/views/frames/index.html.erb +++ b/app/views/frames/index.html.erb @@ -79,7 +79,7 @@ <% end %> <% table.with_column(Frame.human_attribute_name(:servers)) do |frame| %> - <% authorized_servers = @authorized_serveur_per_frame[frame.id] || []%> + <% authorized_servers = @authorized_servers_per_frame[frame.id] || []%> <%= safe_join(authorized_servers.map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> <% end %> From fd40334039d2e669476a392f758cc7d71b483694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Filmont?= Date: Mon, 4 May 2026 17:52:17 +0200 Subject: [PATCH 3/5] fixing style and implementing for ilset index --- app/controllers/frames_controller.rb | 4 +--- app/controllers/islets_controller.rb | 4 ++++ app/views/frames/index.html.erb | 4 ++-- app/views/islets/index.html.erb | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/controllers/frames_controller.rb b/app/controllers/frames_controller.rb index a8a474619..78c86807b 100644 --- a/app/controllers/frames_controller.rb +++ b/app/controllers/frames_controller.rb @@ -13,9 +13,7 @@ def index authorize! @frames = scoped_frames.includes(bay: { islet: :room }).references(bay: { islet: :room }) @filter = ProcessorFilter.new(@frames, params) @frames = @filter.results - @authorized_servers_per_frame = authorized_scope( - Server.where(frame_id: @frames.map(&:id)), - ).group_by(&:frame_id) + @servers_per_frame = authorized_scope(Server.where(frame: @frames)).group_by(&:frame_id) end def show diff --git a/app/controllers/islets_controller.rb b/app/controllers/islets_controller.rb index b2c4f4f06..09748438a 100644 --- a/app/controllers/islets_controller.rb +++ b/app/controllers/islets_controller.rb @@ -14,6 +14,10 @@ def index authorize! @islets = scoped_islets.joins(room: :site).order("rooms.site_id asc, rooms.position asc, islets.name asc") @filter = ProcessorFilter.new(@islets, params) @islets = @filter.results + + @frames_per_islet = authorized_scope( + Frame.includes(:bay).where(bay: { islet_id: @islets.ids }), + ).group_by { |f| f.bay.islet_id } end def show diff --git a/app/views/frames/index.html.erb b/app/views/frames/index.html.erb index 1e7bf2fc3..6fd6f60cb 100644 --- a/app/views/frames/index.html.erb +++ b/app/views/frames/index.html.erb @@ -79,8 +79,8 @@ <% end %> <% table.with_column(Frame.human_attribute_name(:servers)) do |frame| %> - <% authorized_servers = @authorized_servers_per_frame[frame.id] || []%> - <%= safe_join(authorized_servers.map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> + <% servers = @servers_per_frame.fetch(frame.id, []) %> + <%= safe_join(servers.map { |s| link_to(s.name, s, data: { turbo_frame: :_top }) }, ", ") %> <% end %> <% table.with_column(Frame.human_attribute_name(:u), sort_by: :u) do |frame| %> diff --git a/app/views/islets/index.html.erb b/app/views/islets/index.html.erb index 014dfb270..cd490340c 100644 --- a/app/views/islets/index.html.erb +++ b/app/views/islets/index.html.erb @@ -75,7 +75,8 @@ <% table.with_column(Frame.model_name.human.pluralize) do |islet| %> <%= link_to frames_path(islet_ids: islet.id), data: { turbo_frame: :_top } do %> - <%= Islet.human_attribute_name(:frames_count, count: authorized_scope(islet.frames).count) %> + <% frames = @frames_per_islet.fetch(islet.id, []) %> + <%= Islet.human_attribute_name(:frames_count, count: frames.count) %> <% end %> <% end %> From 7ffa2c0186ea4142dd66e603027deaa7ac5e0583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Filmont?= Date: Tue, 5 May 2026 14:37:31 +0200 Subject: [PATCH 4/5] fixing n+1 for visualization dropdown item in menu --- .../layouts/navigation/_visualization_dropdown.html.erb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/navigation/_visualization_dropdown.html.erb b/app/views/layouts/navigation/_visualization_dropdown.html.erb index da3109792..12b512283 100644 --- a/app/views/layouts/navigation/_visualization_dropdown.html.erb +++ b/app/views/layouts/navigation/_visualization_dropdown.html.erb @@ -17,16 +17,21 @@ <%= link_to t(".infrastructure"), visualization_infrastructure_path, class: "dropdown-item" %> <% end %> + <% sites = authorized_scope(Site.all).joins(:rooms).order(:position).distinct %> + <% all_rooms = authorized_scope(Room.where(site: sites.map(&:id)).sorted.distinct) %> + <% rooms_per_site = all_rooms.group_by(&:site_id) %> + <% islets_per_room = authorized_scope(Islet.where(room: all_rooms.map(&:id)).has_name.sorted.distinct).group_by(&:room_id) %> + <% sites.each do |site| %>
  • - <% rooms = authorized_scope(site.rooms).sorted.distinct %> + <% rooms = rooms_per_site[site.id] || [] %> <% rooms.each do |room| %> - <% islets = authorized_scope(room.islets).sorted.has_name.distinct %> + <% islets = islets_per_room[room.id] || [] %> <% if islets.size > 1 %> <% islets.each do |islet| %>
  • - <% rooms = rooms_per_site[site.id] || [] %> + <% rooms = rooms_per_site.fetch(site.id, []) %> <% rooms.each do |room| %> - <% islets = islets_per_room[room.id] || [] %> + <% islets = islets_per_room.fetch(room.id, []) %> <% if islets.size > 1 %> <% islets.each do |islet| %>