Shows ping latency for all devices in the site over the last 24 hours. Each device is displayed as a separate line on the graph with its name as the label. Graph only appears if there is latency data available for at least one device in the site.
147 lines
5.7 KiB
Text
147 lines
5.7 KiB
Text
<Layouts.authenticated
|
|
flash={@flash}
|
|
current_scope={@current_scope}
|
|
current_organization={@current_organization}
|
|
active_page="sites"
|
|
>
|
|
<.header>
|
|
{@page_title}
|
|
<:subtitle>{@site.location}</:subtitle>
|
|
<:actions>
|
|
<.button navigate={~p"/orgs/#{@current_organization.slug}/sites/#{@site.id}/edit"}>
|
|
<.icon name="hero-pencil" class="h-4 w-4" /> Edit
|
|
</.button>
|
|
</:actions>
|
|
</.header>
|
|
|
|
<div class="mt-8 grid gap-6 md:grid-cols-2">
|
|
<div>
|
|
<h3 class="text-lg font-semibold mb-4 text-zinc-900 dark:text-zinc-100">Site Details</h3>
|
|
<dl class="space-y-4">
|
|
<%= if @site.parent_site do %>
|
|
<div>
|
|
<dt class="text-sm font-medium text-zinc-600 dark:text-zinc-400">Parent Site</dt>
|
|
<dd class="mt-1">
|
|
<.link
|
|
navigate={~p"/orgs/#{@current_organization.slug}/sites/#{@site.parent_site.id}"}
|
|
class="text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
|
|
>
|
|
{@site.parent_site.name}
|
|
</.link>
|
|
</dd>
|
|
</div>
|
|
<% end %>
|
|
<%= if @site.location do %>
|
|
<div>
|
|
<dt class="text-sm font-medium text-zinc-600 dark:text-zinc-400">Location</dt>
|
|
<dd class="mt-1 text-zinc-900 dark:text-zinc-100">{@site.location}</dd>
|
|
</div>
|
|
<% end %>
|
|
<%= if @site.description do %>
|
|
<div>
|
|
<dt class="text-sm font-medium text-zinc-600 dark:text-zinc-400">Description</dt>
|
|
<dd class="mt-1 text-zinc-900 dark:text-zinc-100">{@site.description}</dd>
|
|
</div>
|
|
<% end %>
|
|
</dl>
|
|
|
|
<%= if @site.child_sites != [] do %>
|
|
<div class="mt-6">
|
|
<h4 class="text-sm font-semibold mb-3 text-zinc-900 dark:text-zinc-100">Child Sites</h4>
|
|
<ul class="space-y-2">
|
|
<li :for={child <- @site.child_sites}>
|
|
<.link
|
|
navigate={~p"/orgs/#{@current_organization.slug}/sites/#{child.id}"}
|
|
class="text-sm text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
|
|
>
|
|
{child.name}
|
|
</.link>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<% end %>
|
|
</div>
|
|
|
|
<div>
|
|
<div class="flex justify-between items-center mb-4">
|
|
<h3 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100">Device</h3>
|
|
<.button
|
|
navigate={~p"/orgs/#{@current_organization.slug}/devices/new?site_id=#{@site.id}"}
|
|
variant="primary"
|
|
>
|
|
<.icon name="hero-plus" class="h-4 w-4" /> Add Device
|
|
</.button>
|
|
</div>
|
|
|
|
<%= if @device == [] do %>
|
|
<div class="rounded-lg border-2 border-dashed border-zinc-300 bg-zinc-50 p-8 text-center dark:border-zinc-700 dark:bg-zinc-900">
|
|
<.icon name="hero-server" class="mx-auto h-12 w-12 text-zinc-400 dark:text-zinc-600" />
|
|
<h4 class="mt-4 text-base font-semibold text-zinc-900 dark:text-zinc-100">
|
|
Add your first device
|
|
</h4>
|
|
<p class="mt-2 text-sm text-zinc-600 dark:text-zinc-400">
|
|
Start monitoring by adding network devices to this site.
|
|
</p>
|
|
<p class="mt-1 text-sm text-zinc-600 dark:text-zinc-400">
|
|
You can add routers, switches, servers, or any device with an IP address.
|
|
</p>
|
|
<div class="mt-6">
|
|
<.button
|
|
navigate={~p"/orgs/#{@current_organization.slug}/devices/new?site_id=#{@site.id}"}
|
|
variant="primary"
|
|
>
|
|
<.icon name="hero-plus" class="h-5 w-5" /> Add Device
|
|
</.button>
|
|
</div>
|
|
</div>
|
|
<% else %>
|
|
<div class="space-y-3">
|
|
<.link
|
|
:for={eq <- @device}
|
|
navigate={~p"/orgs/#{@current_organization.slug}/devices/#{eq.id}"}
|
|
class="flex items-center justify-between rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-800 dark:bg-zinc-900 hover:border-zinc-300 dark:hover:border-zinc-700 hover:bg-zinc-50 dark:hover:bg-zinc-800 transition-colors cursor-pointer"
|
|
>
|
|
<div>
|
|
<p class="font-medium text-zinc-900 dark:text-zinc-100">{eq.name}</p>
|
|
<p class="text-sm text-zinc-600 dark:text-zinc-400">{eq.ip_address}</p>
|
|
</div>
|
|
<span class={[
|
|
"inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",
|
|
eq.status == :up &&
|
|
"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",
|
|
eq.status == :down && "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200",
|
|
eq.status == :unknown &&
|
|
"bg-zinc-100 text-zinc-800 dark:bg-zinc-800 dark:text-zinc-200"
|
|
]}>
|
|
{eq.status |> to_string() |> String.upcase()}
|
|
</span>
|
|
</.link>
|
|
</div>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
<!-- Latency Chart -->
|
|
<%= if @latency_chart_data do %>
|
|
<div class="mt-8">
|
|
<div class="bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700">
|
|
<div class="px-4 py-3 border-b border-zinc-200 dark:border-zinc-700">
|
|
<h3 class="text-sm font-semibold text-zinc-900 dark:text-zinc-100">
|
|
Site Latency - Last 24 Hours
|
|
</h3>
|
|
</div>
|
|
<div class="p-4">
|
|
<div
|
|
id="site-latency-chart"
|
|
phx-hook="SensorChart"
|
|
data-chart={@latency_chart_data}
|
|
data-unit="ms"
|
|
data-auto-scale="true"
|
|
style="height: 400px;"
|
|
>
|
|
<canvas></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
</Layouts.authenticated>
|