Skip to content

Commit d449999

Browse files
committed
Integrate new pixels for Opt-out submission success rate
1 parent 2205f6b commit d449999

File tree

2 files changed

+92
-16
lines changed

2 files changed

+92
-16
lines changed

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/common/PirRunStateHandler.kt

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,22 @@ import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerOptOu
2727
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationCompleted
2828
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationNeeded
2929
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationStarted
30-
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutCompleted
30+
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutFailed
3131
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutStarted
32+
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutSubmitted
3233
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScanActionFailed
3334
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScanActionSucceeded
3435
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScheduledScanCompleted
3536
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScheduledScanStarted
3637
import com.duckduckgo.pir.impl.models.AddressCityState
3738
import com.duckduckgo.pir.impl.models.ExtractedProfile
3839
import com.duckduckgo.pir.impl.pixels.PirPixelSender
40+
import com.duckduckgo.pir.impl.pixels.PirStage
3941
import com.duckduckgo.pir.impl.scheduling.JobRecordUpdater
42+
import com.duckduckgo.pir.impl.scripts.models.BrokerAction
4043
import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse
4144
import com.duckduckgo.pir.impl.scripts.models.PirSuccessResponse.ExtractedResponse
45+
import com.duckduckgo.pir.impl.scripts.models.asActionType
4246
import com.duckduckgo.pir.impl.store.PirEventsRepository
4347
import com.duckduckgo.pir.impl.store.PirRepository
4448
import com.duckduckgo.pir.impl.store.PirSchedulingRepository
@@ -127,12 +131,26 @@ interface PirRunStateHandler {
127131
val extractedProfile: ExtractedProfile,
128132
) : PirRunState(brokerName)
129133

130-
data class BrokerRecordOptOutCompleted(
134+
data class BrokerRecordOptOutSubmitted(
131135
override val brokerName: String,
132136
val extractedProfile: ExtractedProfile,
137+
val attemptId: String,
138+
val startTimeInMillis: Long,
139+
val endTimeInMillis: Long,
140+
val tries: Int,
141+
val emailPattern: String?,
142+
) : PirRunState(brokerName)
143+
144+
data class BrokerRecordOptOutFailed(
145+
override val brokerName: String,
146+
val extractedProfile: ExtractedProfile,
147+
val attemptId: String,
133148
val startTimeInMillis: Long,
134149
val endTimeInMillis: Long,
135-
val isSubmitSuccess: Boolean,
150+
val failedAction: BrokerAction,
151+
val tries: Int,
152+
val stage: PirStage,
153+
val emailPattern: String?,
136154
) : PirRunState(brokerName)
137155

138156
data class BrokerOptOutActionSucceeded(
@@ -177,7 +195,8 @@ class RealPirRunStateHandler @Inject constructor(
177195
is BrokerScanActionSucceeded -> handleBrokerScanActionSucceeded(pirRunState)
178196
is BrokerScanActionFailed -> handleBrokerScanActionFailed(pirRunState)
179197
is BrokerRecordOptOutStarted -> handleRecordOptOutStarted(pirRunState)
180-
is BrokerRecordOptOutCompleted -> handleRecordOptOutCompleted(pirRunState)
198+
is BrokerRecordOptOutSubmitted -> handleBrokerRecordOptOutSubmitted(pirRunState)
199+
is BrokerRecordOptOutFailed -> handleBrokerRecordOptOutFailed(pirRunState)
181200
is BrokerOptOutActionSucceeded -> handleBrokerOptOutActionSucceeded(pirRunState)
182201
is BrokerOptOutActionFailed -> handleBrokerOptOutActionFailed(pirRunState)
183202
is BrokerRecordEmailConfirmationNeeded -> handleBrokerRecordEmailConfirmationNeeded(pirRunState)
@@ -406,19 +425,55 @@ class RealPirRunStateHandler @Inject constructor(
406425
)
407426
}
408427

409-
private suspend fun handleRecordOptOutCompleted(state: BrokerRecordOptOutCompleted) {
410-
updateOptOutRecord(state.isSubmitSuccess, state.extractedProfile.dbId)
411-
pixelSender.reportOptOutCompleted(
428+
private suspend fun handleBrokerRecordOptOutSubmitted(state: BrokerRecordOptOutSubmitted) {
429+
val broker = repository.getBrokerForName(state.brokerName)
430+
updateOptOutRecord(true, state.extractedProfile.dbId)
431+
432+
if (broker == null) return
433+
434+
pixelSender.reportOptOutSubmitted(
435+
brokerUrl = broker.url,
436+
parent = broker.parent ?: "",
437+
attemptId = state.attemptId,
438+
durationMs = state.endTimeInMillis - state.startTimeInMillis,
439+
tries = state.tries,
440+
emailPattern = state.emailPattern,
441+
)
442+
443+
eventsRepository.saveOptOutCompleted(
412444
brokerName = state.brokerName,
413-
totalTimeInMillis = state.endTimeInMillis - state.startTimeInMillis,
414-
isSuccess = state.isSubmitSuccess,
445+
extractedProfile = state.extractedProfile,
446+
startTimeInMillis = state.startTimeInMillis,
447+
endTimeInMillis = state.endTimeInMillis,
448+
isSubmitSuccess = true,
415449
)
450+
}
451+
452+
private suspend fun handleBrokerRecordOptOutFailed(state: BrokerRecordOptOutFailed) {
453+
val broker = repository.getBrokerForName(state.brokerName)
454+
updateOptOutRecord(false, state.extractedProfile.dbId)
455+
456+
if (broker == null) return
457+
458+
pixelSender.reportOptOutFailed(
459+
brokerUrl = broker.url,
460+
parent = broker.parent ?: "",
461+
brokerJsonVersion = broker.version,
462+
attemptId = state.attemptId,
463+
durationMs = state.endTimeInMillis - state.startTimeInMillis,
464+
tries = state.tries,
465+
emailPattern = state.emailPattern,
466+
stage = state.stage,
467+
actionId = state.failedAction.id,
468+
actionType = state.failedAction.asActionType(),
469+
)
470+
416471
eventsRepository.saveOptOutCompleted(
417472
brokerName = state.brokerName,
418473
extractedProfile = state.extractedProfile,
419474
startTimeInMillis = state.startTimeInMillis,
420475
endTimeInMillis = state.endTimeInMillis,
421-
isSubmitSuccess = state.isSubmitSuccess,
476+
isSubmitSuccess = false,
422477
)
423478
}
424479

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/common/actions/BrokerStepCompletedEventHandler.kt

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ import com.duckduckgo.pir.impl.common.PirJob.RunType.EMAIL_CONFIRMATION
2525
import com.duckduckgo.pir.impl.common.PirRunStateHandler
2626
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerManualScanCompleted
2727
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordEmailConfirmationCompleted
28-
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutCompleted
28+
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutFailed
29+
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerRecordOptOutSubmitted
2930
import com.duckduckgo.pir.impl.common.PirRunStateHandler.PirRunState.BrokerScheduledScanCompleted
3031
import com.duckduckgo.pir.impl.common.actions.EventHandler.Next
3132
import com.duckduckgo.pir.impl.common.actions.PirActionsRunnerStateEngine.Event
3233
import com.duckduckgo.pir.impl.common.actions.PirActionsRunnerStateEngine.Event.BrokerStepCompleted
3334
import com.duckduckgo.pir.impl.common.actions.PirActionsRunnerStateEngine.Event.ExecuteNextBrokerStep
3435
import com.duckduckgo.pir.impl.common.actions.PirActionsRunnerStateEngine.State
36+
import com.duckduckgo.pir.impl.pixels.PirStage
3537
import com.squareup.anvil.annotations.ContributesMultibinding
3638
import javax.inject.Inject
3739
import kotlin.reflect.KClass
@@ -115,15 +117,34 @@ class BrokerStepCompletedEventHandler @Inject constructor(
115117

116118
RunType.OPTOUT -> {
117119
val currentOptOutStep = currentBrokerStep as OptOutStep
118-
pirRunStateHandler.handleState(
119-
BrokerRecordOptOutCompleted(
120+
if (isSuccess) {
121+
BrokerRecordOptOutSubmitted(
120122
brokerName = currentOptOutStep.brokerName,
121123
extractedProfile = currentOptOutStep.profileToOptOut,
124+
attemptId = state.attemptId ?: "no-attempt-id",
122125
startTimeInMillis = state.brokerStepStartTime,
123126
endTimeInMillis = currentTimeProvider.currentTimeMillis(),
124-
isSubmitSuccess = isSuccess,
125-
),
126-
)
127+
tries = 0,
128+
emailPattern = "",
129+
)
130+
} else {
131+
// Whatever last action that was executed is the last action that failed.
132+
val lastAction = currentBrokerStep.actions[state.currentBrokerStepIndex]
133+
134+
BrokerRecordOptOutFailed(
135+
brokerName = currentOptOutStep.brokerName,
136+
extractedProfile = currentOptOutStep.profileToOptOut,
137+
startTimeInMillis = state.brokerStepStartTime,
138+
endTimeInMillis = currentTimeProvider.currentTimeMillis(),
139+
attemptId = state.attemptId ?: "no-attempt-id",
140+
failedAction = lastAction,
141+
tries = 1,
142+
stage = PirStage.OTHER,
143+
emailPattern = "",
144+
)
145+
}.also {
146+
pirRunStateHandler.handleState(it)
147+
}
127148
}
128149

129150
EMAIL_CONFIRMATION -> {

0 commit comments

Comments
 (0)