Coverage Summary for Class: LogResponseDataManagerImpl (cloud.mindbox.mobile_sdk.monitoring.domain.managers)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| LogResponseDataManagerImpl |
100%
(3/3)
|
100%
(18/18)
|
100%
(23/23)
|
100%
(108/108)
|
| LogResponseDataManagerImpl$Companion |
|
| Total |
100%
(3/3)
|
100%
(18/18)
|
100%
(23/23)
|
100%
(108/108)
|
package cloud.mindbox.mobile_sdk.monitoring.domain.managers
import cloud.mindbox.mobile_sdk.monitoring.domain.interfaces.LogResponseDataManager
import cloud.mindbox.mobile_sdk.monitoring.domain.models.LogResponse
import org.threeten.bp.ZonedDateTime
internal class LogResponseDataManagerImpl : LogResponseDataManager {
override fun getStatus(
filteredLogs: List<LogResponse>,
firstLog: LogResponse,
lastLog: LogResponse,
from: ZonedDateTime,
to: ZonedDateTime,
): String {
return when {
(lastLog.zonedDateTime.isBefore(from)) -> {
STATUS_NO_NEW_LOGS + lastLog.zonedDateTime
}
(firstLog.zonedDateTime.isAfter(to)) -> {
STATUS_NO_OLD_LOGS + firstLog.zonedDateTime
}
(filteredLogs.isEmpty()) -> {
STATUS_NO_LOGS
}
filteredLogs.joinToString().length * 2 > OPERATION_LIMIT -> {
STATUS_REQUESTED_LOG_IS_TOO_LARGE
}
else -> {
STATUS_OK
}
}
}
/**
* Each symbol takes 2 bytes so a string will approximately take 2 * length bytes in memory
**/
override fun getFilteredLogs(
filteredLogs: List<LogResponse>,
firstLog: LogResponse,
lastLog: LogResponse,
from: ZonedDateTime,
to: ZonedDateTime,
): List<LogResponse> {
if (firstLog.zonedDateTime.isAfter(to)) return emptyList()
if (lastLog.zonedDateTime.isBefore(from)) return emptyList()
if (filteredLogs.isEmpty()) return emptyList()
return if (filteredLogs.joinToString().length * 2 < OPERATION_LIMIT) {
filteredLogs
} else {
var droppingLogsCount = 1
while (filteredLogs
.dropLast(droppingLogsCount)
.joinToString()
.length * 2 > OPERATION_LIMIT
) {
droppingLogsCount++
}
filteredLogs.dropLast(droppingLogsCount)
}
}
companion object {
const val STATUS_OK = "Ok"
const val STATUS_NO_OLD_LOGS = "No data found. The elder log has date: "
const val STATUS_NO_NEW_LOGS = "No data found. The latest log has date: "
const val STATUS_NO_LOGS = "No data found."
const val STATUS_REQUESTED_LOG_IS_TOO_LARGE = "The requested log size is too large."
private const val OPERATION_LIMIT = 1024 * 800
}
}