🔍 Diagnose: Ping-Fehler mit vollen Details loggen

Bisher stand im Log nur die nackte Exception-Message ("Connection timeout")
— ohne URL und ohne Fehlertyp war die Ursache nicht eingrenzbar.

Neu im Fehler-Log:
- Fehlerart klassifiziert: TIMEOUT / SOCKET / TLS-HANDSHAKE / HTTP / FORMAT
- SocketException zusätzlich mit osError-Message, errorCode, Adresse und
  Adress-Typ (IPv4 vs IPv6 — zeigt ein IPv6-Problem direkt an)
- Server-URL sowie geparstes scheme/host/port (falsche URL, fehlendes
  https, DNS-Auflösung erkennbar)
- e.runtimeType + Message

Bewusst NICHT geloggt: die volle Ping-URI — sie enthält Auth-Token und
Salt als Query-Parameter, die nicht auf dem Log-Server landen sollen.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJzQjUtnvYUtHdnTs3iCru
This commit is contained in:
Hermes (Server)
2026-08-19 21:55:55 +02:00
co-authored by Claude Haiku 4.5
parent 91fbe3dd6e
commit db0152e3fa
+27 -2
View File
@@ -1,4 +1,6 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:crypto/crypto.dart';
@@ -148,8 +150,31 @@ class NavidromeService {
return false;
}
} catch (e) {
logger.error('Navidrome Ping Fehler', e, StackTrace.current);
debugPrint('Navidrome Ping Fehler: $e');
// Details für die Diagnose: ohne URL/Exception-Typ ist im Log nicht
// erkennbar, ob DNS, IPv6, TLS oder eine falsche URL die Ursache ist.
// Bewusst NICHT die volle Ping-URI loggen — die enthält Token + Salt.
final ziel = Uri.tryParse(_serverUrl);
final art = switch (e) {
TimeoutException() => 'TIMEOUT (10s überschritten)',
SocketException(:final osError, :final address) =>
'SOCKET (os=${osError?.message ?? '-'} code=${osError?.errorCode ?? '-'} '
'addr=${address?.address ?? '-'} typ=${address?.type.name ?? '-'})',
HandshakeException() => 'TLS-HANDSHAKE',
HttpException() => 'HTTP',
FormatException() => 'FORMAT (URL unparsbar?)',
_ => 'SONSTIGE',
};
logger.error(
'Navidrome Ping Fehler [$art] '
'url=$_serverUrl '
'scheme=${ziel?.scheme ?? '-'} host=${ziel?.host ?? '-'} '
'port=${ziel?.hasPort == true ? ziel?.port : '(default)'} '
'typ=${e.runtimeType} '
'msg=$e',
e,
StackTrace.current,
);
debugPrint('Navidrome Ping Fehler [$art] $_serverUrl: $e');
return false;
}
}