馃攳 Diagnostics
Self-check wszystkich modu艂贸w biblioteki
Opis
Modu艂 Diagnostics sprawdza zdrowie wszystkich komponent贸w biblioteki ADict. Wykrywa problemy z inicjalizacj膮, konfiguracj膮 i connectivity, generuj膮c szczeg贸艂owe raporty z sugestiami naprawy.
Pe艂na diagnostyka
lifecycleScope.launch {
val report = ADict.Diagnostics.runFullCheck()
// Podsumowanie tekstowe
println(report.toSummaryString())
// Szczeg贸艂y
println("Overall: ${report.overallHealth}")
println("Modules: ${report.healthyModulesCount}/${report.totalModulesCount}")
if (report.hasErrors) {
report.errors.forEach { error ->
Log.e("Diagnostics", "[${error.module}] ${error.message}")
Log.e("Diagnostics", "Suggestion: ${error.suggestion}")
}
}
if (report.hasWarnings) {
report.warnings.forEach { warning ->
Log.w("Diagnostics", "[${warning.module}] ${warning.message}")
}
}
}
Sprawdzanie konkretnego modu艂u
val adsHealth = ADict.Diagnostics.checkModule("ads")
if (!adsHealth.isHealthy) {
showAdErrorUI()
Log.e("Ads", "Problem: ${adsHealth.message}")
Log.e("Ads", "Level: ${adsHealth.level}")
}
// Dost臋pne modu艂y do sprawdzenia:
// adict, config, gdpr, inapp, ads, analytics, eventbus,
// network, securestorage, notifications, permissions,
// abtesting, ratelimit, appstate
Poziomy zdrowia
| Poziom | Opis |
|---|---|
HEALTHY |
Wszystko OK |
WARNING |
Dzia艂a, ale z problemami |
ERROR |
Nie dzia艂a poprawnie |
CRITICAL |
Wymaga natychmiastowej uwagi |
UNKNOWN |
Nie mo偶na sprawdzi膰 |
Automatyczne sprawdzanie
// Uruchom sprawdzanie co 5 minut
ADict.Diagnostics.enableAutoCheck(intervalMs = 5 * 60 * 1000L) { report ->
if (report.hasErrors) {
// Wy艣lij do analytics
analytics.log("diagnostic_errors", mapOf(
"count" to report.errors.size,
"modules" to report.errors.map { it.module }.distinct()
))
// Powiadom zesp贸艂 deweloperski
crashlytics.log("Diagnostic errors: ${report.errors.size}")
}
}
// Wy艂膮cz automatyczne sprawdzanie
ADict.Diagnostics.disableAutoCheck()
W艂asne checki
// Dodaj w艂asny check
ADict.Diagnostics.addCustomCheck("my_backend") {
val isConnected = try {
myApi.healthCheck()
} catch (e: Exception) {
false
}
Diagnostics.ModuleHealth(
moduleName = "MyBackend",
isInitialized = true,
level = if (isConnected)
Diagnostics.HealthLevel.HEALTHY
else
Diagnostics.HealthLevel.ERROR,
message = if (isConnected)
"Backend reachable"
else
"Cannot reach backend",
details = mapOf(
"endpoint" to "api.example.com",
"lastCheck" to System.currentTimeMillis()
)
)
}
// Usu艅 w艂asny check
ADict.Diagnostics.removeCustomCheck("my_backend")
Quick checks
// Szybkie sprawdzenie czy wszystko OK
if (ADict.Diagnostics.isHealthy()) {
proceedNormally()
} else {
showDegradedModeUI()
}
// Sprawd藕 czy modu艂 jest zainicjalizowany
if (ADict.Diagnostics.isModuleInitialized("analytics")) {
trackEvent()
}
Historia raport贸w
// Pobierz ostatnie raporty
val history = ADict.Diagnostics.getReportHistory(limit = 10)
history.forEach { report ->
println("${report.timestamp}: ${report.overallHealth}")
println("Errors: ${report.errors.size}, Warnings: ${report.warnings.size}")
}
// Wyczy艣膰 histori臋
ADict.Diagnostics.clearHistory()
// Callback na ka偶dy raport
ADict.Diagnostics.onReport { report ->
saveToLocalLog(report)
}
System Info
val report = ADict.Diagnostics.runFullCheck()
val info = report.systemInfo
println("SDK: ${info.sdkVersion}")
println("Device: ${info.deviceModel}")
println("Debug: ${info.isDebugBuild}")
println("App Version: ${info.appVersion}")
println("Library: ${info.libraryVersion}")
println("Network: ${info.isNetworkAvailable}")
println("Memory: ${info.availableMemoryMb}MB")
Kategorie b艂臋d贸w
| Kategoria | Opis |
|---|---|
INITIALIZATION |
B艂膮d inicjalizacji modu艂u |
CONFIGURATION |
B艂膮d konfiguracji |
CONNECTIVITY |
Problem z po艂膮czeniem |
PERMISSION |
Brak uprawnie艅 |
DEPENDENCY |
Brakuj膮ca zale偶no艣膰 |
RUNTIME |
B艂膮d w trakcie dzia艂ania |