馃攳 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