This repository has been archived on 2024-06-24. You can view files and clone it, but cannot push or open issues or pull requests.
augie/webapp/lib/augie_web/live/logger_live.ex

50 lines
1.2 KiB
Elixir

defmodule AugieWeb.LoggerLive do
use Phoenix.LiveView
alias Augie.DataFlow
alias Augie.Sensor
import Calendar.Strftime
require Logger
@moduledoc """
A Liveview which displays logs from the co-processor.
"""
def render(assigns) do
~L"""
<div class="card">
<div class="card-divider">
<h4>Logs</h4>
</div>
<div class="card-section">
<%= if Enum.any?(@logs) do %>
<table>
<%= for log <- @logs do %>
<tr>
<td>
<%= strftime!(log.at, "%Y-%m-%d %H:%M:%S") %>
</td>
<td>
<%= log.message %>
</td>
</tr>
<% end %>
</table>
<% else %>
No logs to show.
<% end %>
</div>
</div>
"""
end
def mount(_params, _context, socket) do
if connected?(socket), do: DataFlow.subscribe(Logger)
{:ok, assign(socket, logs: [])}
end
def handle_info({DataFlow, Sensor.Logger, sample}, %{assigns: logs} = socket) do
Logger.info("Received log: #{inspect(sample)}")
{:noreply, assign(socket, logs: [sample | logs])}
end
end