Added new view for getting diagnostic data
This commit is contained in:
parent
515b6395c0
commit
d10f189f13
7 changed files with 89 additions and 2 deletions
|
|
@ -64,7 +64,8 @@ if config_env() == :prod do
|
||||||
tmpfile_directory: Path.join([System.tmp_dir!(), "pinchflat", "data"]),
|
tmpfile_directory: Path.join([System.tmp_dir!(), "pinchflat", "data"]),
|
||||||
dns_cluster_query: System.get_env("DNS_CLUSTER_QUERY"),
|
dns_cluster_query: System.get_env("DNS_CLUSTER_QUERY"),
|
||||||
expose_feed_endpoints: expose_feed_endpoints,
|
expose_feed_endpoints: expose_feed_endpoints,
|
||||||
timezone: System.get_env("TIMEZONE") || System.get_env("TZ") || "UTC"
|
timezone: System.get_env("TIMEZONE") || System.get_env("TZ") || "UTC",
|
||||||
|
log_path: log_path
|
||||||
|
|
||||||
config :tzdata, :data_dir, System.get_env("TZ_DATA_DIR", "/etc/elixir_tzdata_data")
|
config :tzdata, :data_dir, System.get_env("TZ_DATA_DIR", "/etc/elixir_tzdata_data")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
current_path={Phoenix.Controller.current_path(@conn)}
|
current_path={Phoenix.Controller.current_path(@conn)}
|
||||||
>
|
>
|
||||||
<:submenu text="Settings" href={~p"/settings"} />
|
<:submenu text="Settings" href={~p"/settings"} />
|
||||||
<:submenu text="App Info" href={~p"/settings"} />
|
<:submenu text="App Info" href={~p"/app_info"} />
|
||||||
</.sidebar_submenu>
|
</.sidebar_submenu>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,20 @@ defmodule PinchflatWeb.Settings.SettingController do
|
||||||
render(conn, "show.html", changeset: changeset)
|
render(conn, "show.html", changeset: changeset)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def app_info(conn, _params) do
|
||||||
|
render(conn, "app_info.html")
|
||||||
|
end
|
||||||
|
|
||||||
|
def download_logs(conn, _params) do
|
||||||
|
log_path = Application.get_env(:pinchflat, :log_path)
|
||||||
|
|
||||||
|
if log_path && File.exists?(log_path) do
|
||||||
|
send_download(conn, {:file, log_path}, filename: "pinchflat-logs-#{Date.utc_today()}.txt")
|
||||||
|
else
|
||||||
|
conn
|
||||||
|
|> put_flash(:error, "Log file couldn't be found")
|
||||||
|
|> redirect(to: ~p"/app_info")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,14 @@ defmodule PinchflatWeb.Settings.SettingHTML do
|
||||||
|
|
||||||
~s(Server endpoint for Apprise notifications when new media is found. See <a href="#{url}" class="#{classes}" target="_blank">Apprise docs</a> for more information)
|
~s(Server endpoint for Apprise notifications when new media is found. See <a href="#{url}" class="#{classes}" target="_blank">Apprise docs</a> for more information)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def diagnostic_info_string do
|
||||||
|
"""
|
||||||
|
App Version: #{Application.spec(:pinchflat)[:vsn]}
|
||||||
|
yt-dlp Version: #{Settings.get!(:yt_dlp_version)}
|
||||||
|
Apprise Version: #{Settings.get!(:apprise_version)}
|
||||||
|
System Architecture: #{to_string(:erlang.system_info(:system_architecture))}
|
||||||
|
Timezone: #{Application.get_env(:pinchflat, :timezone)}
|
||||||
|
"""
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
<div class="mb-6 flex gap-3 flex-row items-center justify-between">
|
||||||
|
<div class="flex gap-3 items-center">
|
||||||
|
<h2 class="text-title-md2 font-bold text-white ml-4">
|
||||||
|
App Info
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rounded-sm border border-stroke bg-white px-5 py-5 shadow-default dark:border-strokedark dark:bg-boxdark sm:px-7.5">
|
||||||
|
<div class="max-w-full">
|
||||||
|
<.button color="bg-primary" rounding="rounded-lg" x-data="{ copied: false }" x-on:click={~s"
|
||||||
|
copyWithCallbacks(
|
||||||
|
`#{diagnostic_info_string()}`,
|
||||||
|
() => copied = true,
|
||||||
|
() => copied = false
|
||||||
|
)
|
||||||
|
"}>
|
||||||
|
Copy Diagnotic Info
|
||||||
|
<span x-show="copied" x-transition.duration.150ms><.icon name="hero-check" class="ml-2 h-4 w-4" /></span>
|
||||||
|
</.button>
|
||||||
|
<.link href={~p"/download_logs"}>
|
||||||
|
<.button color="bg-primary" rounding="rounded-lg" class="ml-4">
|
||||||
|
Download Logs
|
||||||
|
</.button>
|
||||||
|
</.link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
@ -30,7 +30,10 @@ defmodule PinchflatWeb.Router do
|
||||||
|
|
||||||
resources "/media_profiles", MediaProfiles.MediaProfileController
|
resources "/media_profiles", MediaProfiles.MediaProfileController
|
||||||
resources "/search", Searches.SearchController, only: [:show], singleton: true
|
resources "/search", Searches.SearchController, only: [:show], singleton: true
|
||||||
|
|
||||||
resources "/settings", Settings.SettingController, only: [:show, :update], singleton: true
|
resources "/settings", Settings.SettingController, only: [:show, :update], singleton: true
|
||||||
|
get "/app_info", Settings.SettingController, :app_info
|
||||||
|
get "/download_logs", Settings.SettingController, :download_logs
|
||||||
|
|
||||||
resources "/sources", Sources.SourceController do
|
resources "/sources", Sources.SourceController do
|
||||||
post "/force_download_pending", Sources.SourceController, :force_download_pending
|
post "/force_download_pending", Sources.SourceController, :force_download_pending
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
defmodule PinchflatWeb.SettingControllerTest do
|
defmodule PinchflatWeb.SettingControllerTest do
|
||||||
use PinchflatWeb.ConnCase
|
use PinchflatWeb.ConnCase
|
||||||
|
|
||||||
|
alias Pinchflat.Utils.FilesystemUtils
|
||||||
|
|
||||||
describe "show settings" do
|
describe "show settings" do
|
||||||
test "renders the page", %{conn: conn} do
|
test "renders the page", %{conn: conn} do
|
||||||
conn = get(conn, ~p"/settings")
|
conn = get(conn, ~p"/settings")
|
||||||
|
|
@ -20,4 +22,33 @@ defmodule PinchflatWeb.SettingControllerTest do
|
||||||
assert html_response(conn, 200) =~ update_attrs[:apprise_server]
|
assert html_response(conn, 200) =~ update_attrs[:apprise_server]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "app_info" do
|
||||||
|
test "renders the page", %{conn: conn} do
|
||||||
|
conn = get(conn, ~p"/app_info")
|
||||||
|
|
||||||
|
assert html_response(conn, 200) =~ "App Info"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "download_logs" do
|
||||||
|
test "downloads logs", %{conn: conn} do
|
||||||
|
log_path = Path.join([System.tmp_dir!(), "pinchflat", "data", "pinchflat.log"])
|
||||||
|
FilesystemUtils.write_p(log_path, "test log data")
|
||||||
|
Application.put_env(:pinchflat, :log_path, log_path)
|
||||||
|
|
||||||
|
conn = get(conn, ~p"/download_logs")
|
||||||
|
|
||||||
|
assert response(conn, 200) =~ "test log data"
|
||||||
|
|
||||||
|
Application.put_env(:pinchflat, :log_path, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "redirects when log file is not found", %{conn: conn} do
|
||||||
|
conn = get(conn, ~p"/download_logs")
|
||||||
|
|
||||||
|
assert redirected_to(conn) == ~p"/app_info"
|
||||||
|
assert conn.assigns[:flash]["error"] == "Log file couldn't be found"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue