Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

Converted risk level transaction to task (EXPOSUREAPP-2842) #1412

Merged
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
5f34a98
converted risk level transaction to task
chris-cwa Oct 15, 2020
c5d5403
simplified
chris-cwa Oct 15, 2020
863d43f
fixed config: timeout is now duration
chris-cwa Oct 15, 2020
054d300
less is more
chris-cwa Oct 15, 2020
b1419c3
arrangement + empty lines
chris-cwa Oct 16, 2020
daa31bf
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 16, 2020
b29d9a5
Added additional checks to notification of exposure/test-result to ch…
kolyaopahle Oct 16, 2020
4008698
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 19, 2020
9a18b89
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 20, 2020
7f915c8
submit risk level task requests
chris-cwa Oct 20, 2020
e83c17a
- unreachable catch blocks
chris-cwa Oct 20, 2020
2794b20
housekeeping
chris-cwa Oct 20, 2020
b4417c3
Merge branch 'fix/release1.6.x_housekeeping' into feature/2909_refact…
chris-cwa Oct 20, 2020
01aa0c6
satisfied ktlint + detekt
chris-cwa Oct 20, 2020
bd46e26
fixed flow: isRefreshing
chris-cwa Oct 20, 2020
c79f7cf
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 20, 2020
81e872c
fixed flavour for testers
chris-cwa Oct 20, 2020
8581cb3
refactored benchmark
chris-cwa Oct 21, 2020
2c67ef0
fixed package declaration
chris-cwa Oct 21, 2020
9ad5874
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 21, 2020
f85b995
unit tests
chris-cwa Oct 21, 2020
d32c7b5
Merge branch 'feature/2909_refactor_risk_level_transaction' of https:…
chris-cwa Oct 21, 2020
1f6590e
fixed injection
chris-cwa Oct 21, 2020
61fa73f
fixed tests
chris-cwa Oct 21, 2020
b56798f
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 23, 2020
31d9215
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
harambasicluka Oct 23, 2020
79d38ec
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 26, 2020
eaf9aab
comments from PR
chris-cwa Oct 26, 2020
edaddd4
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 26, 2020
21ff6ec
Merge branch 'release/1.6.x' into fix/3182-3181-notifications-in-inva…
kolyaopahle Oct 26, 2020
beaf21a
Merge remote-tracking branch 'origin/release/1.6.x' into feature/2909…
chris-cwa Oct 27, 2020
634b89c
Merge branch 'feature/2909_refactor_risk_level_transaction' of https:…
chris-cwa Oct 27, 2020
447a411
Merge remote-tracking branch 'origin/fix/3182-3181-notifications-in-i…
chris-cwa Oct 27, 2020
e87caef
fixed injection
chris-cwa Oct 27, 2020
29eaec1
Merge remote-tracking branch 'origin/release/1.6.x' into feature/2909…
chris-cwa Oct 28, 2020
e60c4a5
fixed lint issues
chris-cwa Oct 28, 2020
8b13dd6
fixed another merge conflict
chris-cwa Oct 28, 2020
593b678
- unused class
chris-cwa Oct 28, 2020
994d697
map task factory
chris-cwa Oct 28, 2020
856a7c4
Merge branch 'release/1.6.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 28, 2020
da4c360
fulfilled comment style wishes
chris-cwa Oct 28, 2020
db9c305
Merge branch 'feature/2909_refactor_risk_level_transaction' of https:…
chris-cwa Oct 28, 2020
83a6942
fixed tests suspended by changes from develop branch
chris-cwa Oct 28, 2020
cfbb12f
Merge remote-tracking branch 'origin/release/1.6.x' into feature/2909…
chris-cwa Oct 28, 2020
9bed8c9
Merge branch 'release/1.7.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 29, 2020
6ca3f35
Merge branch 'release/1.7.x' into feature/2909_refactor_risk_level_tr…
harambasicluka Oct 29, 2020
21b376c
Update Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/Defaul…
chris-cwa Oct 30, 2020
270d081
changes from PR
chris-cwa Oct 30, 2020
2b87f03
fixed a test
chris-cwa Oct 30, 2020
971f4fa
show logs, ktlint issues
chris-cwa Oct 30, 2020
3c5de43
made log tag non-nullable
chris-cwa Oct 30, 2020
965e966
improvements from reviewers
chris-cwa Oct 30, 2020
1a16472
reduced static access
chris-cwa Oct 30, 2020
5e42700
Merge remote-tracking branch 'origin/release/1.7.x' into feature/2909…
chris-cwa Oct 30, 2020
fc1977a
Saint Pipeline, please give me the green light
chris-cwa Oct 30, 2020
1bf9119
Merge remote-tracking branch 'origin/release/1.7.x' into feature/2909…
chris-cwa Oct 30, 2020
cf2dbe0
Merge branch 'release/1.7.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Oct 30, 2020
0104284
toString()
chris-cwa Nov 2, 2020
53d809e
ktlint + di
chris-cwa Nov 2, 2020
180d613
fixed test
chris-cwa Nov 2, 2020
7eb2318
Merge branch 'release/1.7.x' into feature/2909_refactor_risk_level_tr…
chris-cwa Nov 2, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package de.rki.coronawarnapp
package de.rki.coronawarnapp.test

import android.content.Context
import android.text.format.Formatter
import de.rki.coronawarnapp.exception.ExceptionCategory
import de.rki.coronawarnapp.exception.TransactionException
import de.rki.coronawarnapp.exception.reporting.report
import de.rki.coronawarnapp.risk.RiskLevelTask
import de.rki.coronawarnapp.task.Task
import de.rki.coronawarnapp.task.common.DefaultTaskRequest
import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction
import de.rki.coronawarnapp.transaction.RiskLevelTransaction
import de.rki.coronawarnapp.util.di.AppInjector
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.map
import timber.log.Timber
import kotlin.system.measureTimeMillis
import java.util.UUID

class RiskLevelAndKeyRetrievalBenchmark(
private val context: Context,
Expand All @@ -29,7 +33,7 @@ class RiskLevelAndKeyRetrievalBenchmark(
*/
suspend fun start(
callCount: Int,
callback: (resultInfo: String) -> Unit
onBenchmarkCompletedListener: OnBenchmarkCompletedListener
) {

var resultInfo = StringBuilder()
Expand All @@ -40,7 +44,7 @@ class RiskLevelAndKeyRetrievalBenchmark(
.append("Result: \n\n")
.append("#\t Combined \t Download \t Sub \t Risk \t File # \t F. size\n")

callback(resultInfo.toString())
onBenchmarkCompletedListener(resultInfo.toString())

repeat(callCount) { index ->

Expand Down Expand Up @@ -70,45 +74,58 @@ class RiskLevelAndKeyRetrievalBenchmark(
var calculationDuration: Long = -1
var calculationError = ""

try {
calculationDuration = measureKeyCalculation("#$index")
} catch (e: TransactionException) {
calculationError = e.message.toString()
}
measureKeyCalculation("#$index") {
if (it != null) calculationDuration = it

// build result entry for current iteration with all gathered data
resultInfo.append(
"${index + 1}. \t ${calculationDuration + keyFileDownloadDuration + apiSubmissionDuration} ms \t " +
// build result entry for current iteration with all gathered data
resultInfo.append(
"${index + 1}. \t ${calculationDuration + keyFileDownloadDuration + apiSubmissionDuration} ms \t " +
"$keyFileDownloadDuration ms " + "\t $apiSubmissionDuration ms" +
"\t $calculationDuration ms \t $keyFileCount \t " +
"${Formatter.formatFileSize(context, keyFilesSize)}\n"
)
)

if (keyRetrievalError.isNotEmpty()) {
resultInfo.append("Key Retrieval Error: $keyRetrievalError\n")
}
if (keyRetrievalError.isNotEmpty()) {
resultInfo.append("Key Retrieval Error: $keyRetrievalError\n")
}

if (calculationError.isNotEmpty()) {
resultInfo.append("Calculation Error: $calculationError\n")
}
if (calculationError.isNotEmpty()) {
resultInfo.append("Calculation Error: $calculationError\n")
}

callback(resultInfo.toString())
onBenchmarkCompletedListener(resultInfo.toString())
}
}
}

private suspend fun measureKeyCalculation(label: String): Long {
try {
Timber.v("MEASURE [Risk Level Calculation] $label started")
// start risk level calculation and get duration
return measureTimeMillis {
RiskLevelTransaction.start()
}.also {
Timber.v("MEASURE [Risk Level Calculation] $label finished")
private suspend fun measureKeyCalculation(label: String, callback: (Long?) -> Unit) {
val uuid = UUID.randomUUID()
val t0 = System.currentTimeMillis()
AppInjector.component.taskController.tasks
.map {
it
.map { taskInfo -> taskInfo.taskState }
.filter { taskState -> taskState.request.id == uuid && taskState.isFinished }
}
} catch (e: TransactionException) {
e.report(ExceptionCategory.INTERNAL)
throw e
}
.collect {
it.firstOrNull()?.also { state ->
Timber.v("MEASURE [Risk Level Calculation] $label finished")
callback.invoke(
if (state.error != null)
null
else
System.currentTimeMillis() - t0
)
}
}
Timber.v("MEASURE [Risk Level Calculation] $label started")
AppInjector.component.taskController.submit(
DefaultTaskRequest(
RiskLevelTask::class,
object : Task.Arguments {},
uuid
)
)
}

private suspend fun measureDiagnosticKeyRetrieval(
Expand Down Expand Up @@ -149,3 +166,5 @@ class RiskLevelAndKeyRetrievalBenchmark(
}
}
}

typealias OnBenchmarkCompletedListener = (resultInfo: String) -> Unit
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import com.google.zxing.integration.android.IntentIntegrator
import com.google.zxing.integration.android.IntentResult
import com.google.zxing.qrcode.QRCodeWriter
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.RiskLevelAndKeyRetrievalBenchmark
import de.rki.coronawarnapp.databinding.FragmentTestForAPIBinding
import de.rki.coronawarnapp.diagnosiskeys.server.LocationCode
import de.rki.coronawarnapp.exception.ExceptionCategory
Expand All @@ -52,6 +51,7 @@ import de.rki.coronawarnapp.storage.AppDatabase
import de.rki.coronawarnapp.storage.ExposureSummaryRepository
import de.rki.coronawarnapp.storage.LocalData
import de.rki.coronawarnapp.storage.tracing.TracingIntervalRepository
import de.rki.coronawarnapp.test.RiskLevelAndKeyRetrievalBenchmark
import de.rki.coronawarnapp.test.menu.ui.TestMenuItem
import de.rki.coronawarnapp.util.KeyFileHelper
import de.rki.coronawarnapp.util.di.AppInjector
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ import com.google.android.gms.common.GoogleApiAvailability
import com.squareup.inject.assisted.AssistedInject
import de.rki.coronawarnapp.environment.EnvironmentSetup
import de.rki.coronawarnapp.environment.EnvironmentSetup.Type.Companion.toEnvironmentType
import de.rki.coronawarnapp.exception.ExceptionCategory
import de.rki.coronawarnapp.exception.TransactionException
import de.rki.coronawarnapp.exception.reporting.report
import de.rki.coronawarnapp.risk.RiskLevelTask
import de.rki.coronawarnapp.storage.LocalData
import de.rki.coronawarnapp.storage.TestSettings
import de.rki.coronawarnapp.task.TaskController
import de.rki.coronawarnapp.task.common.DefaultTaskRequest
import de.rki.coronawarnapp.test.api.ui.EnvironmentState.Companion.toEnvironmentState
import de.rki.coronawarnapp.test.api.ui.LoggerState.Companion.toLoggerState
import de.rki.coronawarnapp.transaction.RiskLevelTransaction
import de.rki.coronawarnapp.util.CWADebug
import de.rki.coronawarnapp.util.di.AppContext
import de.rki.coronawarnapp.util.ui.SingleLiveEvent
Expand All @@ -28,7 +27,8 @@ import java.io.File
class TestForApiFragmentViewModel @AssistedInject constructor(
@AppContext private val context: Context,
private val envSetup: EnvironmentSetup,
private val testSettings: TestSettings
private val testSettings: TestSettings,
private val taskController: TaskController
) : CWAViewModel() {

val debugOptionsState by smartLiveData {
Expand Down Expand Up @@ -80,13 +80,7 @@ class TestForApiFragmentViewModel @AssistedInject constructor(
}

fun calculateRiskLevelClicked() {
viewModelScope.launch {
try {
RiskLevelTransaction.start()
} catch (e: TransactionException) {
e.report(ExceptionCategory.INTERNAL)
}
}
taskController.submit(DefaultTaskRequest(RiskLevelTask::class))
}

val logShareEvent = SingleLiveEvent<File?>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,18 @@ import de.rki.coronawarnapp.exception.ExceptionCategory
import de.rki.coronawarnapp.exception.reporting.report
import de.rki.coronawarnapp.nearby.ENFClient
import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
import de.rki.coronawarnapp.risk.DefaultRiskLevelCalculation
import de.rki.coronawarnapp.risk.RiskLevel
import de.rki.coronawarnapp.risk.RiskLevelTask
import de.rki.coronawarnapp.risk.RiskLevels
import de.rki.coronawarnapp.risk.TimeVariables
import de.rki.coronawarnapp.server.protocols.AppleLegacyKeyExchange
import de.rki.coronawarnapp.service.applicationconfiguration.ApplicationConfigurationService
import de.rki.coronawarnapp.storage.AppDatabase
import de.rki.coronawarnapp.storage.LocalData
import de.rki.coronawarnapp.storage.RiskLevelRepository
import de.rki.coronawarnapp.task.TaskController
import de.rki.coronawarnapp.task.common.DefaultTaskRequest
import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction
import de.rki.coronawarnapp.transaction.RiskLevelTransaction
import de.rki.coronawarnapp.ui.tracing.card.TracingCardStateProvider
import de.rki.coronawarnapp.util.KeyFileHelper
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
Expand All @@ -49,6 +51,8 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
@AppContext private val context: Context, // App context
dispatcherProvider: DispatcherProvider,
private val enfClient: ENFClient,
private val riskLevels: RiskLevels,
private val taskController: TaskController,
private val keyCacheRepository: KeyCacheRepository,
tracingCardStateProvider: TracingCardStateProvider
) : CWAViewModel(
Expand Down Expand Up @@ -82,13 +86,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
}

fun calculateRiskLevel() {
viewModelScope.launch {
try {
RiskLevelTransaction.start()
} catch (e: Exception) {
e.report(ExceptionCategory.INTERNAL)
}
}
taskController.submit(DefaultTaskRequest(RiskLevelTask::class))
}

fun resetRiskLevel() {
Expand All @@ -110,7 +108,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
e.report(ExceptionCategory.INTERNAL)
}
}
RiskLevelTransaction.start()
taskController.submit(DefaultTaskRequest(RiskLevelTask::class))
riskLevelResetEvent.postValue(Unit)
}
}
Expand All @@ -136,7 +134,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
val appConfig =
ApplicationConfigurationService.asyncRetrieveApplicationConfiguration()

val riskLevelScore = DefaultRiskLevelCalculation().calculateRiskScore(
val riskLevelScore = riskLevels.calculateRiskScore(
appConfig.attenuationDuration,
exposureSummary
)
Expand Down Expand Up @@ -176,9 +174,9 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
"Matched Key Count: ${exposureSummary.matchedKeyCount}\n" +
"Maximum Risk Score: ${exposureSummary.maximumRiskScore}\n" +
"Attenuation Durations: [${
exposureSummary.attenuationDurationsInMinutes?.get(
0
)
exposureSummary.attenuationDurationsInMinutes?.get(
0
)
}," +
"${exposureSummary.attenuationDurationsInMinutes?.get(1)}," +
"${exposureSummary.attenuationDurationsInMinutes?.get(2)}]\n" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,39 +7,33 @@ import com.google.android.gms.common.api.ApiException
import com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient
import de.rki.coronawarnapp.exception.ExceptionCategory
import de.rki.coronawarnapp.exception.NoTokenException
import de.rki.coronawarnapp.exception.TransactionException
import de.rki.coronawarnapp.exception.reporting.report
import de.rki.coronawarnapp.risk.RiskLevelTask
import de.rki.coronawarnapp.storage.ExposureSummaryRepository
import de.rki.coronawarnapp.transaction.RiskLevelTransaction
import de.rki.coronawarnapp.task.common.DefaultTaskRequest
import de.rki.coronawarnapp.util.di.AppInjector
import timber.log.Timber

class ExposureStateUpdateWorker(val context: Context, workerParams: WorkerParameters) :
CoroutineWorker(context, workerParams) {
companion object {
private val TAG = ExposureStateUpdateWorker::class.simpleName
}

override suspend fun doWork(): Result {
try {
Timber.v("worker to persist exposure summary started")
val token = inputData.getString(ExposureNotificationClient.EXTRA_TOKEN)
?: throw NoTokenException(IllegalArgumentException("no token was found in the intent"))

Timber.v("valid token $token retrieved")

val exposureSummary = InternalExposureNotificationClient
.asyncGetExposureSummary(token)

ExposureSummaryRepository.getExposureSummaryRepository()
.insertExposureSummaryEntity(exposureSummary)
Timber.v("exposure summary state updated: $exposureSummary")

RiskLevelTransaction.start()
InternalExposureNotificationClient
.asyncGetExposureSummary(token).also {
ExposureSummaryRepository.getExposureSummaryRepository()
.insertExposureSummaryEntity(it)
Timber.v("exposure summary state updated: $it")
}

AppInjector.component.taskController.submit(DefaultTaskRequest(RiskLevelTask::class))
chris-cwa marked this conversation as resolved.
Show resolved Hide resolved
chris-cwa marked this conversation as resolved.
Show resolved Hide resolved
Timber.v("risk level calculation triggered")
} catch (e: ApiException) {
e.report(ExceptionCategory.EXPOSURENOTIFICATION)
} catch (e: TransactionException) {
e.report(ExceptionCategory.INTERNAL)
}

return Result.success()
Expand Down

This file was deleted.