86 lines
3.4 KiB
Scala
86 lines
3.4 KiB
Scala
package com.twitter.frigate.pushservice.model
|
|
|
|
import com.twitter.finagle.stats.StatsReceiver
|
|
import com.twitter.frigate.common.base.ScheduledSpaceSpeakerCandidate
|
|
import com.twitter.frigate.common.base.SpaceCandidateFanoutDetails
|
|
import com.twitter.frigate.common.util.FeatureSwitchParams
|
|
import com.twitter.frigate.magic_events.thriftscala.SpaceMetadata
|
|
import com.twitter.frigate.pushservice.model.PushTypes.PushCandidate
|
|
import com.twitter.frigate.pushservice.model.PushTypes.RawCandidate
|
|
import com.twitter.frigate.pushservice.model.PushTypes.Target
|
|
import com.twitter.frigate.pushservice.config.Config
|
|
import com.twitter.frigate.pushservice.ml.PushMLModelScorer
|
|
import com.twitter.frigate.pushservice.model.candidate.CopyIds
|
|
import com.twitter.frigate.pushservice.model.ibis.ScheduledSpaceSpeakerIbis2Hydrator
|
|
import com.twitter.frigate.pushservice.model.ntab.ScheduledSpaceSpeakerNTabRequestHydrator
|
|
import com.twitter.frigate.pushservice.predicate.PredicatesForCandidate
|
|
import com.twitter.frigate.pushservice.predicate.SpacePredicate
|
|
import com.twitter.frigate.pushservice.take.predicates.BasicSendHandlerPredicates
|
|
import com.twitter.frigate.thriftscala.FrigateNotification
|
|
import com.twitter.gizmoduck.thriftscala.User
|
|
import com.twitter.hermit.predicate.NamedPredicate
|
|
import com.twitter.storehaus.ReadableStore
|
|
import com.twitter.ubs.thriftscala.AudioSpace
|
|
import com.twitter.util.Future
|
|
|
|
class ScheduledSpaceSpeakerPushCandidate(
|
|
candidate: RawCandidate with ScheduledSpaceSpeakerCandidate,
|
|
hostUser: Option[User],
|
|
copyIds: CopyIds,
|
|
audioSpaceStore: ReadableStore[String, AudioSpace]
|
|
)(
|
|
implicit val statsScoped: StatsReceiver,
|
|
pushModelScorer: PushMLModelScorer)
|
|
extends PushCandidate
|
|
with ScheduledSpaceSpeakerCandidate
|
|
with ScheduledSpaceSpeakerIbis2Hydrator
|
|
with SpaceCandidateFanoutDetails
|
|
with ScheduledSpaceSpeakerNTabRequestHydrator {
|
|
|
|
override val startTime: Long = candidate.startTime
|
|
|
|
override val hydratedHost: Option[User] = hostUser
|
|
|
|
override val spaceId: String = candidate.spaceId
|
|
|
|
override val hostId: Option[Long] = candidate.hostId
|
|
|
|
override val speakerIds: Option[Seq[Long]] = candidate.speakerIds
|
|
|
|
override val listenerIds: Option[Seq[Long]] = candidate.listenerIds
|
|
|
|
override val frigateNotification: FrigateNotification = candidate.frigateNotification
|
|
|
|
override val pushCopyId: Option[Int] = copyIds.pushCopyId
|
|
|
|
override val ntabCopyId: Option[Int] = copyIds.ntabCopyId
|
|
|
|
override val copyAggregationId: Option[String] = copyIds.aggregationId
|
|
|
|
override val target: Target = candidate.target
|
|
|
|
override val weightedOpenOrNtabClickModelScorer: PushMLModelScorer = pushModelScorer
|
|
|
|
override lazy val audioSpaceFut: Future[Option[AudioSpace]] = audioSpaceStore.get(spaceId)
|
|
|
|
override val spaceFanoutMetadata: Option[SpaceMetadata] = None
|
|
|
|
override val statsReceiver: StatsReceiver =
|
|
statsScoped.scope("ScheduledSpaceSpeakerCandidate")
|
|
}
|
|
|
|
case class ScheduledSpaceSpeakerCandidatePredicates(config: Config)
|
|
extends BasicSendHandlerPredicates[ScheduledSpaceSpeakerPushCandidate] {
|
|
|
|
implicit val statsReceiver: StatsReceiver = config.statsReceiver.scope(getClass.getSimpleName)
|
|
|
|
override val preCandidateSpecificPredicates: List[
|
|
NamedPredicate[ScheduledSpaceSpeakerPushCandidate]
|
|
] = List(
|
|
SpacePredicate.scheduledSpaceStarted(
|
|
config.audioSpaceStore
|
|
),
|
|
PredicatesForCandidate.paramPredicate(FeatureSwitchParams.EnableScheduledSpaceSpeakers)
|
|
)
|
|
}
|