diff --git a/config/dev.exs b/config/dev.exs index 632bcca..378e635 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -15,6 +15,8 @@ config :aprsme, Aprsme.Repo, stacktrace: true, show_sensitive_data_on_connection_error: true, pool_size: 10, + pool_timeout: 5000, + timeout: 15_000, log: false, types: Aprsme.PostgresTypes diff --git a/config/runtime.exs b/config/runtime.exs index 61b9f9d..fdcfd53 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -50,6 +50,8 @@ if config_env() == :prod do # ssl: true, url: database_url, pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"), + pool_timeout: String.to_integer(System.get_env("POOL_TIMEOUT") || "5000"), + timeout: String.to_integer(System.get_env("DB_TIMEOUT") || "15000"), socket_options: maybe_ipv6, types: Aprsme.PostgresTypes diff --git a/lib/aprsme/packets.ex b/lib/aprsme/packets.ex index dac536c..72f300a 100644 --- a/lib/aprsme/packets.ex +++ b/lib/aprsme/packets.ex @@ -463,7 +463,19 @@ defmodule Aprsme.Packets do """ @spec get_total_packet_count() :: non_neg_integer() def get_total_packet_count do - Repo.one(from p in Packet, select: count(p.id)) + Repo.one(from p in Packet, select: count(p.id)) || 0 + rescue + DBConnection.ConnectionError -> + require Logger + + Logger.warning("Database connection error in get_total_packet_count, returning 0") + 0 + + error -> + require Logger + + Logger.error("Error getting total packet count: #{inspect(error)}") + 0 end @doc """ diff --git a/lib/aprsme_web/live/status_live/index.ex b/lib/aprsme_web/live/status_live/index.ex index 6458ae8..335c5ca 100644 --- a/lib/aprsme_web/live/status_live/index.ex +++ b/lib/aprsme_web/live/status_live/index.ex @@ -328,6 +328,27 @@ defmodule AprsmeWeb.StatusLive.Index do defp get_aprs_status do Aprsme.Is.get_status() + rescue + error -> + require Logger + + Logger.error("Error getting APRS status: #{inspect(error)}") + # Return a default status when database is unavailable + %{ + connected: false, + server: "unknown", + port: 0, + connected_at: nil, + uptime_seconds: 0, + login_id: "unknown", + filter: "unknown", + packet_stats: %{ + total_packets: 0, + packets_per_second: 0, + last_packet_at: nil + }, + stored_packet_count: 0 + } end defp get_app_version do