51 lines
1.2 KiB
Elixir
51 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
|