Add more debug diags

This commit is contained in:
Colin Seymour
2026-06-15 15:31:18 +00:00
parent a7bc113eb0
commit 64033b692e
2 changed files with 24 additions and 8 deletions
+17 -8
View File
@@ -507,7 +507,7 @@ configure_and_start_teslamate() {
break break
fi fi
if [ "$state" = "error" ]; then if [ "$state" = "error" ]; then
dump_teslamate_logs 50 dump_diagnostics 50
err "TeslaMate addon failed to start (state: ${state})" err "TeslaMate addon failed to start (state: ${state})"
fi fi
debug "Attempt $((attempt + 1))/${max_attempts}: TeslaMate state=${state}" debug "Attempt $((attempt + 1))/${max_attempts}: TeslaMate state=${state}"
@@ -515,7 +515,7 @@ configure_and_start_teslamate() {
attempt=$((attempt + 1)) attempt=$((attempt + 1))
done done
if [ "$state" != "started" ]; then if [ "$state" != "started" ]; then
dump_teslamate_logs 50 dump_diagnostics 50
err "TeslaMate addon did not start in time (state: ${state})" err "TeslaMate addon did not start in time (state: ${state})"
fi fi
@@ -523,12 +523,21 @@ configure_and_start_teslamate() {
ok "TeslaMate addon started and ready" ok "TeslaMate addon started and ready"
} }
# dump_teslamate_logs() prints the most recent add-on logs (full lines) so a # dump_diagnostics() prints PostgreSQL and TeslaMate add-on logs (full lines) so
# startup failure shows its real cause. It closes any open GitHub Actions log # a startup failure shows its real cause. PostgreSQL is reported first because
# group first so the output is never hidden inside a collapsed fold. # TeslaMate halts if it cannot reach the database, so a stopped/crashed postgres
dump_teslamate_logs() { # addon is the most common root cause. Closes any open GitHub Actions log group
# first so the output is never hidden inside a collapsed fold.
dump_diagnostics() {
local lines="${1:-50}" local lines="${1:-50}"
group_end group_end
local pg_state
pg_state=$(supervisor_api_jq "/addons/${POSTGRES_SLUG}/info" '.data.state' 2>/dev/null || true)
warn "PostgreSQL addon state: ${pg_state:-unknown}"
warn "Last ${lines} lines of PostgreSQL add-on logs:"
supervisor_api GET "/addons/${POSTGRES_SLUG}/logs" 2>/dev/null | tail -n "${lines}" >&2 || true
warn "Last ${lines} lines of TeslaMate add-on logs:" warn "Last ${lines} lines of TeslaMate add-on logs:"
supervisor_api GET "/addons/${TESLAMATE_SLUG}/logs" 2>/dev/null | tail -n "${lines}" >&2 || true supervisor_api GET "/addons/${TESLAMATE_SLUG}/logs" 2>/dev/null | tail -n "${lines}" >&2 || true
} }
@@ -551,7 +560,7 @@ wait_for_teslamate_ready() {
# instead of polling uselessly until the timeout. # instead of polling uselessly until the timeout.
state=$(supervisor_api_jq "/addons/${TESLAMATE_SLUG}/info" '.data.state') state=$(supervisor_api_jq "/addons/${TESLAMATE_SLUG}/info" '.data.state')
if [ "$state" = "error" ] || [ "$state" = "stopped" ]; then if [ "$state" = "error" ] || [ "$state" = "stopped" ]; then
dump_teslamate_logs 50 dump_diagnostics 50
err "TeslaMate crashed during startup (add-on state: ${state})" err "TeslaMate crashed during startup (add-on state: ${state})"
fi fi
@@ -559,7 +568,7 @@ wait_for_teslamate_ready() {
sleep 5 sleep 5
attempt=$((attempt + 1)) attempt=$((attempt + 1))
done done
dump_teslamate_logs 50 dump_diagnostics 50
err "TeslaMate did not become ready in time (never saw 'TeslaMateWeb.Endpoint' in logs)" err "TeslaMate did not become ready in time (never saw 'TeslaMateWeb.Endpoint' in logs)"
} }
@@ -64,6 +64,13 @@ until pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" > /dev/null 2>&1; do
pg_wait_attempt=$((pg_wait_attempt + 1)) pg_wait_attempt=$((pg_wait_attempt + 1))
if [[ "$pg_wait_attempt" -ge "$pg_wait_max" ]]; then if [[ "$pg_wait_attempt" -ge "$pg_wait_max" ]]; then
bashio::log.error "PostgreSQL at '$DATABASE_HOST' is not ready or unreachable after $((pg_wait_max * 2))s" bashio::log.error "PostgreSQL at '$DATABASE_HOST' is not ready or unreachable after $((pg_wait_max * 2))s"
# Distinguish a DNS/networking problem from a database that is simply down,
# so the failure is actionable: resolve the host and report what we find.
if getent hosts "$DATABASE_HOST" > /dev/null 2>&1; then
bashio::log.error "Host '$DATABASE_HOST' resolves to $(getent hosts "$DATABASE_HOST" | awk '{print $1}' | tr '\n' ' ')but is not accepting connections on port $DATABASE_PORT - is the PostgreSQL add-on running and healthy?"
else
bashio::log.error "Host '$DATABASE_HOST' does not resolve - the PostgreSQL add-on may be stopped or on a different network"
fi
exit 1 exit 1
fi fi
bashio::log.info "PostgreSQL not ready yet, retrying in 2s (${pg_wait_attempt}/${pg_wait_max})..." bashio::log.info "PostgreSQL not ready yet, retrying in 2s (${pg_wait_attempt}/${pg_wait_max})..."