Avoid code duplication and log total count

This commit is contained in:
Benoit Marty 2020-11-03 09:30:26 +01:00
parent 5eb2f14375
commit a216f82b35
3 changed files with 31 additions and 69 deletions

View File

@ -87,6 +87,7 @@ import org.matrix.android.sdk.internal.crypto.store.db.query.get
import org.matrix.android.sdk.internal.crypto.store.db.query.getById import org.matrix.android.sdk.internal.crypto.store.db.query.getById
import org.matrix.android.sdk.internal.crypto.store.db.query.getOrCreate import org.matrix.android.sdk.internal.crypto.store.db.query.getOrCreate
import org.matrix.android.sdk.internal.database.mapper.ContentMapper import org.matrix.android.sdk.internal.database.mapper.ContentMapper
import org.matrix.android.sdk.internal.database.tools.RealmDebugTools
import org.matrix.android.sdk.internal.di.CryptoDatabase import org.matrix.android.sdk.internal.di.CryptoDatabase
import org.matrix.android.sdk.internal.di.DeviceId import org.matrix.android.sdk.internal.di.DeviceId
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.MoshiProvider
@ -95,7 +96,6 @@ import org.matrix.android.sdk.internal.session.SessionScope
import org.matrix.olm.OlmAccount import org.matrix.olm.OlmAccount
import org.matrix.olm.OlmException import org.matrix.olm.OlmException
import timber.log.Timber import timber.log.Timber
import java.lang.StringBuilder
import javax.inject.Inject import javax.inject.Inject
import kotlin.collections.set import kotlin.collections.set
@ -1709,19 +1709,6 @@ internal class RealmCryptoStore @Inject constructor(
* Prints out database info * Prints out database info
*/ */
override fun logDbUsageInfo() { override fun logDbUsageInfo() {
Realm.getInstance(realmConfiguration).use { realm -> RealmDebugTools(realmConfiguration).logInfo("Crypto")
val info = StringBuilder()
// Check if we have data
info.append("\n==============================================")
info.append("\n==============================================")
info.append("\nCrypto Realm is empty: ${realm.isEmpty}")
realmConfiguration.realmObjectClasses.forEach { modelClazz ->
val count = realm.where(modelClazz).count()
info.append("\nCrypto Realm - count ${modelClazz.simpleName}: $count")
}
info.append("\n==============================================")
info.append("\n==============================================")
Timber.i(info.toString())
}
} }
} }

View File

@ -16,23 +16,9 @@
package org.matrix.android.sdk.internal.database.tools package org.matrix.android.sdk.internal.database.tools
import org.matrix.android.sdk.internal.crypto.store.db.model.CrossSigningInfoEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.CryptoMetadataEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.CryptoRoomEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.DeviceInfoEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.GossipingEventEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.IncomingGossipingRequestEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.KeyInfoEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.KeysBackupDataEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.MyDeviceLastSeenInfoEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.OlmInboundGroupSessionEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.OlmSessionEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.OutgoingGossipingRequestEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.TrustLevelEntity
import org.matrix.android.sdk.internal.crypto.store.db.model.UserEntity
import io.realm.Realm import io.realm.Realm
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import io.realm.kotlin.where import org.matrix.android.sdk.BuildConfig
import timber.log.Timber import timber.log.Timber
internal class RealmDebugTools( internal class RealmDebugTools(
@ -41,30 +27,34 @@ internal class RealmDebugTools(
/** /**
* Log info about the DB * Log info about the DB
*/ */
fun logInfo() { fun logInfo(baseName: String) {
Timber.d("Realm located at : ${realmConfiguration.realmDirectory}/${realmConfiguration.realmFileName}") buildString {
append("\n$baseName Realm located at : ${realmConfiguration.realmDirectory}/${realmConfiguration.realmFileName}")
val key = realmConfiguration.encryptionKey.joinToString("") { byte -> "%02x".format(byte) } if (BuildConfig.LOG_PRIVATE_DATA) {
Timber.d("Realm encryption key : $key") val key = realmConfiguration.encryptionKey.joinToString("") { byte -> "%02x".format(byte) }
append("\n$baseName Realm encryption key : $key")
}
Realm.getInstance(realmConfiguration).use { Realm.getInstance(realmConfiguration).use { realm ->
// Check if we have data // Check if we have data
Timber.e("Realm is empty: ${it.isEmpty}") separator()
separator()
Timber.d("Realm has CryptoMetadataEntity: ${it.where<CryptoMetadataEntity>().count()}") append("\n$baseName Realm is empty: ${realm.isEmpty}")
Timber.d("Realm has CryptoRoomEntity: ${it.where<CryptoRoomEntity>().count()}") var total = 0L
Timber.d("Realm has DeviceInfoEntity: ${it.where<DeviceInfoEntity>().count()}") realmConfiguration.realmObjectClasses.forEach { modelClazz ->
Timber.d("Realm has KeysBackupDataEntity: ${it.where<KeysBackupDataEntity>().count()}") val count = realm.where(modelClazz).count()
Timber.d("Realm has OlmInboundGroupSessionEntity: ${it.where<OlmInboundGroupSessionEntity>().count()}") total += count
Timber.d("Realm has OlmSessionEntity: ${it.where<OlmSessionEntity>().count()}") append("\n$baseName Realm - count ${modelClazz.simpleName}: $count")
Timber.d("Realm has UserEntity: ${it.where<UserEntity>().count()}") }
Timber.d("Realm has KeyInfoEntity: ${it.where<KeyInfoEntity>().count()}") separator()
Timber.d("Realm has CrossSigningInfoEntity: ${it.where<CrossSigningInfoEntity>().count()}") append("\n$baseName Realm - total count: $total")
Timber.d("Realm has TrustLevelEntity: ${it.where<TrustLevelEntity>().count()}") separator()
Timber.d("Realm has GossipingEventEntity: ${it.where<GossipingEventEntity>().count()}") separator()
Timber.d("Realm has IncomingGossipingRequestEntity: ${it.where<IncomingGossipingRequestEntity>().count()}") }
Timber.d("Realm has OutgoingGossipingRequestEntity: ${it.where<OutgoingGossipingRequestEntity>().count()}")
Timber.d("Realm has MyDeviceLastSeenInfoEntity: ${it.where<MyDeviceLastSeenInfoEntity>().count()}")
} }
.let { Timber.i(it) }
} }
internal fun StringBuilder.separator() = append("\n==============================================")
} }

View File

@ -18,9 +18,7 @@ package org.matrix.android.sdk.internal.session
import androidx.annotation.MainThread import androidx.annotation.MainThread
import dagger.Lazy import dagger.Lazy
import io.realm.Realm
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import io.realm.kotlin.where
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
@ -61,6 +59,7 @@ import org.matrix.android.sdk.api.session.user.UserService
import org.matrix.android.sdk.api.session.widgets.WidgetService import org.matrix.android.sdk.api.session.widgets.WidgetService
import org.matrix.android.sdk.internal.auth.SessionParamsStore import org.matrix.android.sdk.internal.auth.SessionParamsStore
import org.matrix.android.sdk.internal.crypto.DefaultCryptoService import org.matrix.android.sdk.internal.crypto.DefaultCryptoService
import org.matrix.android.sdk.internal.database.tools.RealmDebugTools
import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionDatabase
import org.matrix.android.sdk.internal.di.SessionId import org.matrix.android.sdk.internal.di.SessionId
import org.matrix.android.sdk.internal.di.UnauthenticatedWithCertificate import org.matrix.android.sdk.internal.di.UnauthenticatedWithCertificate
@ -288,20 +287,6 @@ internal class DefaultSession @Inject constructor(
} }
override fun logDbUsageInfo() { override fun logDbUsageInfo() {
Realm.getInstance(realmConfiguration).use { realm -> RealmDebugTools(realmConfiguration).logInfo("Session")
val info = StringBuilder()
// Check if we have data
info.append("\n==============================================")
info.append("\n==============================================")
info.append("\nSession Realm is empty: ${realm.isEmpty}")
realmConfiguration.realmObjectClasses.forEach { modelClazz ->
val count = realm.where(modelClazz).count()
info.append("\nSession Realm - count ${modelClazz.simpleName}: $count")
}
info.append("\n==============================================")
info.append("\n==============================================")
Timber.i(info.toString())
}
} }
} }