• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.onboarding.bedsteadonboarding.graph
2 
3 import com.android.bedstead.nene.utils.Poll
4 import com.android.onboarding.bedsteadonboarding.utils.EventLogUtils.ONBOARDING_EVENT_LOG_TAG
5 import com.android.onboarding.bedsteadonboarding.logcat.LogcatReader
6 import com.android.onboarding.nodes.OnboardingGraph
7 import com.android.onboarding.nodes.OnboardingEvent
8 import java.time.Duration
9 
10 /**
11  * Entry point to onboarding graph. Used to query onboarding events.
12  */
13 class OnboardingGraphProvider(logcatReader: LogcatReader) {
14 
15   internal val graph: OnboardingGraph = OnboardingGraph(getOnboardingEvents(logcatReader))
16 
17   /**
18    * Get a [OnboardingGraphQueryBuilder] to iteratively build a query to search for events in the
19    * onboarding graph.
20    */
querynull21   fun query(): OnboardingGraphQueryBuilder {
22     return OnboardingGraphQueryBuilder(this)
23   }
24 
25   /** Returns the immutable set of OnboardingEvents read from logs */
getOnboardingEventsnull26   private fun getOnboardingEvents(logcatReader: LogcatReader) =
27     Poll.forValue("Onboarding events") { fetchOnboardingEventsFromLogs(logcatReader) }
<lambda>null28       .toMeet { it.isNotEmpty() }
29       .timeout(Duration.ofMinutes(LOG_READ_TIMEOUT_MINUTE))
30       .errorOnFail("No onboarding event logged after $LOG_READ_TIMEOUT_MINUTE minute(s).")
31       .await()
32 
fetchOnboardingEventsFromLogsnull33   private fun fetchOnboardingEventsFromLogs(logcatReader: LogcatReader) : Set<OnboardingEvent> {
34     val onboardingEvents = mutableSetOf<OnboardingEvent>()
35     for (logLines in logcatReader.getFilteredLogs()) {
36       // Is an onboarding graph line containing OnboardingEvent.
37       val encoded = logLines.split("$ONBOARDING_EVENT_LOG_TAG: ")[1]
38 
39       // Deserialize and store the OnboardingEvent in-memory.
40       val event = OnboardingEvent.deserialize(encoded)
41       onboardingEvents.add(event)
42     }
43     return onboardingEvents.toSet()
44   }
45 
46   companion object {
47     const val LOG_READ_TIMEOUT_MINUTE = 1L
48   }
49 }
50