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"]),
|
||||
dns_cluster_query: System.get_env("DNS_CLUSTER_QUERY"),
|
||||
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")
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
current_path={Phoenix.Controller.current_path(@conn)}
|
||||
>
|
||||
<:submenu text="Settings" href={~p"/settings"} />
|
||||
<:submenu text="App Info" href={~p"/settings"} />
|
||||
<:submenu text="App Info" href={~p"/app_info"} />
|
||||
</.sidebar_submenu>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -23,4 +23,20 @@ defmodule PinchflatWeb.Settings.SettingController do
|
|||
render(conn, "show.html", changeset: changeset)
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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 "/search", Searches.SearchController, only: [:show], 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
|
||||
post "/force_download_pending", Sources.SourceController, :force_download_pending
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
defmodule PinchflatWeb.SettingControllerTest do
|
||||
use PinchflatWeb.ConnCase
|
||||
|
||||
alias Pinchflat.Utils.FilesystemUtils
|
||||
|
||||
describe "show settings" do
|
||||
test "renders the page", %{conn: conn} do
|
||||
conn = get(conn, ~p"/settings")
|
||||
|
|
@ -20,4 +22,33 @@ defmodule PinchflatWeb.SettingControllerTest do
|
|||
assert html_response(conn, 200) =~ update_attrs[:apprise_server]
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue