mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-15 23:58:47 +02:00
![twitter-team](/assets/img/avatar_default.png)
Please note we have force-pushed a new initial commit in order to remove some publicly-available Twitter user information. Note that this process may be required in the future.
66 lines
2.0 KiB
Scala
66 lines
2.0 KiB
Scala
package com.twitter.cr_mixer.source_signal
|
|
|
|
import com.twitter.cr_mixer.config.TimeoutConfig
|
|
import com.twitter.cr_mixer.model.ModuleNames
|
|
import com.twitter.cr_mixer.model.SourceInfo
|
|
import com.twitter.cr_mixer.param.FrsParams
|
|
import com.twitter.cr_mixer.param.GlobalParams
|
|
import com.twitter.cr_mixer.source_signal.FrsStore.FrsQueryResult
|
|
import com.twitter.cr_mixer.source_signal.SourceFetcher.FetcherQuery
|
|
import com.twitter.cr_mixer.thriftscala.SourceType
|
|
import com.twitter.finagle.stats.StatsReceiver
|
|
import com.twitter.simclusters_v2.common.UserId
|
|
import com.twitter.simclusters_v2.thriftscala.InternalId
|
|
import com.twitter.storehaus.ReadableStore
|
|
import com.twitter.util.Future
|
|
import javax.inject.Singleton
|
|
import javax.inject.Inject
|
|
import javax.inject.Named
|
|
|
|
@Singleton
|
|
case class FrsSourceSignalFetcher @Inject() (
|
|
@Named(ModuleNames.FrsStore) frsStore: ReadableStore[FrsStore.Query, Seq[FrsQueryResult]],
|
|
override val timeoutConfig: TimeoutConfig,
|
|
globalStats: StatsReceiver)
|
|
extends SourceSignalFetcher {
|
|
|
|
override protected val stats: StatsReceiver = globalStats.scope(identifier)
|
|
override type SignalConvertType = UserId
|
|
|
|
override def isEnabled(query: FetcherQuery): Boolean = {
|
|
query.params(FrsParams.EnableSourceParam)
|
|
}
|
|
|
|
override def fetchAndProcess(query: FetcherQuery): Future[Option[Seq[SourceInfo]]] = {
|
|
// Fetch raw signals
|
|
val rawSignals = frsStore
|
|
.get(FrsStore.Query(query.userId, query.params(GlobalParams.UnifiedMaxSourceKeyNum)))
|
|
.map {
|
|
_.map {
|
|
_.map {
|
|
_.userId
|
|
}
|
|
}
|
|
}
|
|
// Process signals
|
|
rawSignals.map {
|
|
_.map { frsUsers =>
|
|
convertSourceInfo(SourceType.FollowRecommendation, frsUsers)
|
|
}
|
|
}
|
|
}
|
|
|
|
override def convertSourceInfo(
|
|
sourceType: SourceType,
|
|
signals: Seq[SignalConvertType]
|
|
): Seq[SourceInfo] = {
|
|
signals.map { signal =>
|
|
SourceInfo(
|
|
sourceType = sourceType,
|
|
internalId = InternalId.UserId(signal),
|
|
sourceEventTime = None
|
|
)
|
|
}
|
|
}
|
|
}
|