mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Add additional local metrics around storage service writes/reads.
This commit is contained in:
committed by
Cody Henthorne
parent
c5e795b176
commit
619d2997f6
@@ -3,6 +3,8 @@ package org.whispersystems.signalservice.api.storage
|
||||
import okio.ByteString
|
||||
import okio.ByteString.Companion.EMPTY
|
||||
import okio.ByteString.Companion.toByteString
|
||||
import org.signal.core.util.ByteSize
|
||||
import org.signal.core.util.bytes
|
||||
import org.signal.core.util.isNotEmpty
|
||||
import org.signal.core.util.toOptional
|
||||
import org.whispersystems.signalservice.internal.storage.protos.ManifestRecord
|
||||
@@ -13,9 +15,18 @@ data class SignalStorageManifest(
|
||||
@JvmField val version: Long,
|
||||
val sourceDeviceId: Int,
|
||||
val recordIkm: RecordIkm?,
|
||||
@JvmField val storageIds: List<StorageId>
|
||||
@JvmField val storageIds: List<StorageId>,
|
||||
val protoByteSize: ByteSize
|
||||
) {
|
||||
|
||||
constructor(version: Long, sourceDeviceId: Int, recordIkm: RecordIkm?, storageIds: List<StorageId>) : this(
|
||||
version = version,
|
||||
sourceDeviceId = sourceDeviceId,
|
||||
recordIkm = recordIkm,
|
||||
storageIds = storageIds,
|
||||
protoByteSize = toProto(version, storageIds, sourceDeviceId, recordIkm).encode().size.bytes
|
||||
)
|
||||
|
||||
companion object {
|
||||
val EMPTY: SignalStorageManifest = SignalStorageManifest(0, 1, null, emptyList())
|
||||
|
||||
@@ -30,7 +41,25 @@ data class SignalStorageManifest(
|
||||
version = manifest.version,
|
||||
sourceDeviceId = manifestRecord.sourceDevice,
|
||||
recordIkm = manifestRecord.recordIkm.takeIf { it.isNotEmpty() }?.toByteArray()?.let { RecordIkm(it) },
|
||||
storageIds = ids
|
||||
storageIds = ids,
|
||||
protoByteSize = serialized.size.bytes
|
||||
)
|
||||
}
|
||||
|
||||
private fun toProto(version: Long, storageIds: List<StorageId>, sourceDeviceId: Int, recordIkm: RecordIkm?): StorageManifest {
|
||||
val ids: List<ManifestRecord.Identifier> = storageIds.map { id ->
|
||||
ManifestRecord.Identifier.fromPossiblyUnknownType(id.type, id.raw)
|
||||
}
|
||||
|
||||
val manifestRecord = ManifestRecord(
|
||||
identifiers = ids,
|
||||
sourceDevice = sourceDeviceId,
|
||||
recordIkm = recordIkm?.value?.toByteString() ?: ByteString.EMPTY
|
||||
)
|
||||
|
||||
return StorageManifest(
|
||||
version = version,
|
||||
value_ = manifestRecord.encodeByteString()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.squareup.wire.FieldEncoding
|
||||
import okio.ByteString
|
||||
import okio.ByteString.Companion.toByteString
|
||||
import okio.IOException
|
||||
import org.signal.core.util.bytes
|
||||
import org.signal.core.util.isNotEmpty
|
||||
import org.signal.libsignal.protocol.InvalidKeyException
|
||||
import org.whispersystems.signalservice.api.NetworkResult
|
||||
@@ -272,7 +273,8 @@ class StorageServiceRepository(private val storageServiceApi: StorageServiceApi)
|
||||
version = manifestRecord.version,
|
||||
sourceDeviceId = manifestRecord.sourceDevice,
|
||||
recordIkm = manifestRecord.recordIkm.takeIf { it.isNotEmpty() }?.toByteArray()?.let { RecordIkm(it) },
|
||||
storageIds = ids
|
||||
storageIds = ids,
|
||||
protoByteSize = this.encode().size.bytes
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user