aprs.me/lib/aprsme_web/live/bad_packets_live/index.html.heex

86 lines
3.1 KiB
Text

<div class="container mx-auto px-4 py-8">
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<div class="flex items-center justify-between mb-4">
<span class="text-sm text-base-content/70">
{gettext("Auto-refreshes every 5 seconds")}
</span>
<%= if @loading do %>
<span class="flex items-center gap-2 text-sm text-primary">
<span class="loading loading-spinner loading-xs"></span>
{gettext("Updating...")}
</span>
<% end %>
</div>
<div class="overflow-x-auto">
<table class="table table-zebra">
<thead>
<tr>
<th>{gettext("Attempted At")}</th>
<th>{gettext("Error Type")}</th>
<th>{gettext("Error Message")}</th>
<th>{gettext("Raw Packet")}</th>
</tr>
</thead>
<tbody>
<%= for bad_packet <- @bad_packets do %>
<tr>
<td>
<span class="text-sm">
{Calendar.strftime(
bad_packet.attempted_at || bad_packet.inserted_at,
"%Y-%m-%d %H:%M:%S UTC"
)}
</span>
</td>
<td>
<div class="badge badge-error badge-sm">
{bad_packet.error_type || gettext("Unknown")}
</div>
</td>
<td>
<span class="text-sm text-error font-mono">
{bad_packet.error_message || gettext("No error message")}
</span>
</td>
<td>
<div class="max-w-md">
<div class="text-xs font-mono text-base-content/80 break-all">
<%= if is_binary(bad_packet.raw_packet) do %>
{Aprsme.EncodingUtils.sanitize_string(bad_packet.raw_packet)}
<% else %>
{bad_packet.raw_packet}
<% end %>
</div>
</div>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
</div>
<%= if length(@bad_packets) == 0 do %>
<div class="card bg-base-100 shadow-xl mt-8">
<div class="card-body text-center">
<div class="flex justify-center mb-4">
<div class="w-16 h-16 bg-success/20 rounded-full flex items-center justify-center">
<svg class="w-8 h-8 text-success" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</svg>
</div>
</div>
<h3 class="text-lg font-semibold">{gettext("No bad packets")}</h3>
<p class="text-base-content/70">{gettext("All packets are parsing successfully!")}</p>
</div>
</div>
<% end %>
</div>