OpisDescription

Moduł Diagnostics sprawdza zdrowie wszystkich komponentów biblioteki ADict. Wykrywa problemy z inicjalizacją, konfiguracją i connectivity, generującDetects initialization, configuration, and connectivity issues, generating szczegółowe raporty z sugestiami naprawy.The Diagnostics module checks the health of all ADict library components. Detects initialization, configuration, and connectivity issues, generating detailed reports with fix suggestions.

Pełna diagnostykaFull Diagnostics

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łuChecking a Specific Module

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 zdrowiaHealth Levels

PoziomLevel OpisDescription
HEALTHY Wszystko OKEverything OK
WARNING Działa, ale z problemamiWorks but with issues
ERROR Nie działa poprawnieNot working properly
CRITICAL Wymaga natychmiastowej uwagiRequires immediate attention
UNKNOWN Nie można sprawdzićCannot check

Automatyczne sprawdzanieAutomatic Checks

// 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 checkiCustom Checks

// 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()
}

HistoriaHistory 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ówError Categories

KategoriaCategory OpisDescription
INITIALIZATION Błąd inicjalizacji modułuModule initialization error
CONFIGURATION Błąd konfiguracjiConfiguration error
CONNECTIVITY Problem z połączeniemConnection problem
PERMISSION Brak uprawnieńMissing permissions
DEPENDENCY Brakująca zależnośćMissing dependency
RUNTIME Błąd w trakcie działaniaRuntime error