<.header> {@page_title} <:subtitle>Monitor and manage all your network devices <:actions> <%= if @device != [] do %> <.button type="button" phx-click="force_rediscover_all" data-confirm="This will trigger SNMP discovery for all SNMP-enabled devices. Continue?" > <.icon name="hero-magnifying-glass" class="h-4 w-4" /> Force Rediscover All <% end %> <.button :if={@has_sites} navigate={~p"/devices/new"} variant="primary" > <.icon name="hero-plus" class="h-5 w-5" /> New Device
<%= case @active_tab do %> <% "existing" -> %> <%= if !@has_sites do %>
<.icon name="hero-building-office" class="mx-auto h-12 w-12 text-gray-400 dark:text-gray-500" />

Create a site first

Before adding device, you need to create at least one site location.

Sites help you organize your devices by physical location.

<.button navigate={~p"/sites/new"} variant="primary"> <.icon name="hero-plus" class="h-5 w-5" /> Create Your First Site
<% else %> <%= if @device == [] do %>
<.icon name="hero-server" class="mx-auto h-12 w-12 text-gray-400 dark:text-gray-500" />

No devices

Get started by adding your first device.

<.button navigate={~p"/devices/new"} variant="primary" > <.icon name="hero-plus" class="h-5 w-5" /> New Device
<% else %> <.table id="devices" rows={@device} row_click={ fn eq -> JS.navigate(~p"/devices/#{eq.id}") end } > <:col :let={eq} label="Name"> {eq.name} <:col :let={eq} label="IP Address"> {eq.ip_address} <:col :let={eq} label="Site"> <.link navigate={~p"/sites/#{eq.site.id}"} class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300" > {eq.site.name} <:col :let={eq} label="Status"> {eq.status |> to_string() |> String.upcase()} <:col :let={eq} label="Last Checked"> <.timestamp datetime={eq.last_checked_at} timezone={@timezone} class="text-sm text-gray-600 dark:text-gray-400" /> <% end %> <% end %> <% "discovered" -> %> <%= if @discovered_devices == [] do %>
<.icon name="hero-magnifying-glass" class="mx-auto h-12 w-12 text-gray-400" />

No undiscovered devices

All discovered devices have been added, or no devices have been discovered yet via LLDP, CDP, or ARP.

<% else %> <.table id="discovered-devices" rows={@discovered_devices}> <:col :let={discovered} label="Identifier"> <%= case discovered.identifier.type do %> <% :mac -> %>
MAC {discovered.identifier.value}
<% :ip -> %>
IP {discovered.identifier.value}
<% :hostname -> %>
HOST {discovered.identifier.value}
<% _ -> %> Unknown <% end %> <:col :let={discovered} label="Hostname"> <%= if discovered.hostname do %> {discovered.hostname} <% else %> - <% end %> <:col :let={discovered} label="Type">
<.icon name={device_type_icon(discovered.device_type)} class="h-4 w-4 text-gray-500" /> {device_type_label(discovered.device_type)}
<:col :let={discovered} label="Manufacturer"> <%= if discovered.manufacturer do %> {discovered.manufacturer} <% else %> - <% end %> <:col :let={discovered} label="Discovered By">
<%= if length(discovered.discovered_by) == 1 do %> <% [first] = discovered.discovered_by %> <.link navigate={~p"/devices/#{first.device_id}"} class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300" > {first.device_name} ({first.interface}) <% else %> {length(discovered.discovered_by)} devices <% end %>
<:col :let={discovered} label="Last Seen"> <.timestamp datetime={discovered.last_seen} timezone={@timezone} class="text-sm text-gray-600 dark:text-gray-400" /> <:col :let={discovered} label="Actions"> <.button phx-click="add_discovered_device" phx-value-identifier={Jason.encode!(discovered.identifier)} variant="primary" > <.icon name="hero-plus" class="h-3 w-3" /> Add Device <% end %> <% end %>