Created
February 27, 2020 17:02
-
-
Save mithereal/bef11a30aa95efaff3df39f7e4d807d9 to your computer and use it in GitHub Desktop.
liveview that is failing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule ApiWeb.Metrics.AudioConversionsLive do | |
use Phoenix.LiveView | |
use ApiWeb.Live.AuthHelper, otp_app: :api | |
alias Api.Audio.File.Conversions | |
alias Phoenix.LiveView.Socket | |
def mount(%{"id" => id}, session, socket) do | |
socket = maybe_mount_user(socket, session) | |
{:ok, socket} | |
end | |
def mount(_, session, socket) do | |
id = "test_user" | |
mount(%{"id" => id}, session, socket) | |
end | |
defp maybe_mount_user(socket, _session) do | |
metrics = Api.Metrics.Server.show | |
metrics = metrics.audio_conversion | |
date_started = metrics.date_started | |
current_file = metrics.current_file | |
converted_files = metrics.converted_files | |
queued_files = metrics.queued_files | |
total_files = metrics.total_files | |
socket | |
|> assign(:date_started, date_started) | |
|> assign(:current_file, current_file) | |
|> assign(:converted_files, converted_files) | |
|> assign(:queued_files, queued_files) | |
|> assign(:total_files, total_files) | |
end | |
def handle_params(_, _url, socket) do | |
if connected?(socket), do: Api.Audio.File.Conversions.subscribe() | |
{:noreply, socket} | |
end | |
def render(assigns) do | |
success_render(assigns) | |
end | |
def handle_info({_requesting_module, [:metrics, :updated], data}, socket) do | |
IO.puts "metric update detected" | |
socket = socket | |
|> assign(:date_started, data.date_started) | |
|> assign(:current_file, data.current_file) | |
|> assign(:converted_files, data.converted_files) | |
|> assign(:queued_files, data.queued_files) | |
|> assign(:total_files, data.total_files) | |
{:noreply,socket} | |
end | |
def fail_auth_render(assigns) do | |
~L""" | |
<div> | |
<section class="phx-hero"> | |
<h1>You Must be Logged-In To Perform that Action</h1> | |
</section> | |
</div> | |
""" | |
end | |
def success_render(assigns) do | |
IO.inspect assigns, label: "success_render" | |
~L""" | |
<div> | |
<%= live_render(@socket, ApiWeb.Metrics.AudioFileConversionLive, id: "audio_file_conversion_view", session: %{"date_started" => @date_started, "current_file" => @current_file, "converted_files" => @converted_files, "queued_files" => @queued_files, "total_files" => @total_files} ) %> | |
</div> | |
""" | |
end | |
end | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Api.Audio.File.Conversions do | |
defstruct converted_files: nil, | |
current_file: nil, | |
date_started: nil, | |
queued_files: nil, | |
total_files: nil | |
@topic inspect(__MODULE__) | |
def subscribe(topic \\ @topic) do | |
IO.puts "subscribing to:" <> @topic | |
Phoenix.PubSub.subscribe(Api.PubSub, topic, link: true) | |
end | |
def metrics(params \\ {:error, "metrics are empty"}) do | |
params | |
|> notify_subscribers([:metrics, :updated]) | |
end | |
defp notify_subscribers({:ok, result}, event) do | |
IO.puts "notifying subscribers:" <> @topic | |
Phoenix.PubSub.broadcast(Api.PubSub, @topic, {__MODULE__, event, result}) | |
{:ok, result} | |
end | |
defp notify_subscribers({:error, reason}, _event), do: {:error, reason} | |
end | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ApiWeb.Metrics.AudioFileConversionLivedefmodule do | |
use Phoenix.LiveView | |
def render(assigns) do | |
~L""" | |
<div id='audio_conversions_element' class="d-none"> | |
<div id="conversion_date_started"> | |
Start Time: <%= @date_started %> | |
</div> | |
<div id="conversion_current_file"> | |
Current File: <%= @current_file %> | |
</div> | |
<div id="conversion_converted_files"> | |
Files Converted: <%= @converted_files %> | |
</div> | |
<div id="conversion_queued_files"> | |
Files Queued: <%= @queued_files %> | |
</div> | |
<div id="conversion_total_files"> | |
Total Files: <%= @total_files %> | |
</div> | |
""" | |
end | |
def mount(_params, session, socket) do | |
{:ok, | |
socket | |
|> assign(:date_started, session["date_started"]) | |
|> assign(:current_file, session["current_file"]) | |
|> assign(:converted_files, session["converted_files"]) | |
|> assign(:queued_files, session["queued_files"]) | |
|> assign(:total_files, session["total_files"]) | |
} | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Api.Test do | |
def run do | |
metrics = %{converted_files: 22,current_file: nil,date_started: nil, queued_files: 0,total_files: 0} | |
result = {:ok, metrics} | |
Api.Audio.File.Conversions.metrics(result) | |
end | |
end | |
schrockwell
commented
Feb 27, 2020
defmodule ApiWeb.Metrics.AudioConversionsLive do
use Phoenix.LiveView
use ApiWeb.Live.AuthHelper, otp_app: :api
alias Api.Audio.File.Conversions
alias Phoenix.LiveView.Socket
def mount(%{"id" => id}, session, socket) do
socket = maybe_mount_user(socket, session)
{:ok, socket}
end
def mount(_, session, socket) do
id = "test_user"
mount(%{"id" => id}, session, socket)
end
defp maybe_mount_user(socket, _session) do
assign(socket, :metrics, Api.Metrics.Server.show().audio_conversion)
end
def handle_params(_, _url, socket) do
if connected?(socket), do: Api.Audio.File.Conversions.subscribe()
{:noreply, socket}
end
def render(assigns) do
success_render(assigns)
end
def handle_info({_requesting_module, [:metrics, :updated], data}, socket) do
IO.puts("metric update detected")
socket = assign(socket, :metrics, data)
{:noreply, socket}
end
def fail_auth_render(assigns) do
~L"""
<div>
<section class="phx-hero">
<h1>You Must be Logged-In To Perform that Action</h1>
</section>
</div>
"""
end
def success_render(assigns) do
IO.inspect(assigns, label: "success_render")
~L"""
<div id='audio_conversions_element' class="d-none">
<div id="conversion_date_started">
Start Time: <%= @metrics.date_started %>
</div>
<div id="conversion_current_file">
Current File: <%= @metrics.current_file %>
</div>
<div id="conversion_converted_files">
Files Converted: <%= @metrics.converted_files %>
</div>
<div id="conversion_queued_files">
Files Queued: <%= @metrics.queued_files %>
</div>
<div id="conversion_total_files">
Total Files: <%= @metrics.total_files %>
</div>
"""
end
end
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment