mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-13 22:58:54 +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.
146 lines
6.0 KiB
Scala
146 lines
6.0 KiB
Scala
package com.twitter.visibility.builder.users
|
|
|
|
import com.twitter.finagle.stats.StatsReceiver
|
|
import com.twitter.visibility.builder.FeatureMapBuilder
|
|
import com.twitter.visibility.common.user_result.UserVisibilityResultHelper
|
|
import com.twitter.visibility.features.AuthorBlocksViewer
|
|
import com.twitter.visibility.features.AuthorIsDeactivated
|
|
import com.twitter.visibility.features.AuthorIsErased
|
|
import com.twitter.visibility.features.AuthorIsOffboarded
|
|
import com.twitter.visibility.features.AuthorIsProtected
|
|
import com.twitter.visibility.features.AuthorIsSuspended
|
|
import com.twitter.visibility.features.AuthorIsUnavailable
|
|
import com.twitter.visibility.features.ViewerBlocksAuthor
|
|
import com.twitter.visibility.features.ViewerMutesAuthor
|
|
import com.twitter.visibility.models.UserUnavailableStateEnum
|
|
|
|
case class UserUnavailableFeatures(statsReceiver: StatsReceiver) {
|
|
|
|
private[this] val scopedStatsReceiver = statsReceiver.scope("user_unavailable_features")
|
|
private[this] val suspendedAuthorStats = scopedStatsReceiver.scope("suspended_author")
|
|
private[this] val deactivatedAuthorStats = scopedStatsReceiver.scope("deactivated_author")
|
|
private[this] val offboardedAuthorStats = scopedStatsReceiver.scope("offboarded_author")
|
|
private[this] val erasedAuthorStats = scopedStatsReceiver.scope("erased_author")
|
|
private[this] val protectedAuthorStats = scopedStatsReceiver.scope("protected_author")
|
|
private[this] val authorBlocksViewerStats = scopedStatsReceiver.scope("author_blocks_viewer")
|
|
private[this] val viewerBlocksAuthorStats = scopedStatsReceiver.scope("viewer_blocks_author")
|
|
private[this] val viewerMutesAuthorStats = scopedStatsReceiver.scope("viewer_mutes_author")
|
|
private[this] val unavailableStats = scopedStatsReceiver.scope("unavailable")
|
|
|
|
def forState(state: UserUnavailableStateEnum): FeatureMapBuilder => FeatureMapBuilder = {
|
|
builder =>
|
|
builder
|
|
.withConstantFeature(AuthorIsSuspended, isSuspended(state))
|
|
.withConstantFeature(AuthorIsDeactivated, isDeactivated(state))
|
|
.withConstantFeature(AuthorIsOffboarded, isOffboarded(state))
|
|
.withConstantFeature(AuthorIsErased, isErased(state))
|
|
.withConstantFeature(AuthorIsProtected, isProtected(state))
|
|
.withConstantFeature(AuthorBlocksViewer, authorBlocksViewer(state))
|
|
.withConstantFeature(ViewerBlocksAuthor, viewerBlocksAuthor(state))
|
|
.withConstantFeature(ViewerMutesAuthor, viewerMutesAuthor(state))
|
|
.withConstantFeature(AuthorIsUnavailable, isUnavailable(state))
|
|
}
|
|
|
|
private[this] def isSuspended(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.Suspended =>
|
|
suspendedAuthorStats.counter().incr()
|
|
true
|
|
case UserUnavailableStateEnum.Filtered(result)
|
|
if UserVisibilityResultHelper.isDropSuspendedAuthor(result) =>
|
|
suspendedAuthorStats.counter().incr()
|
|
suspendedAuthorStats.counter("filtered").incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def isDeactivated(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.Deactivated =>
|
|
deactivatedAuthorStats.counter().incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def isOffboarded(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.Offboarded =>
|
|
offboardedAuthorStats.counter().incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def isErased(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.Erased =>
|
|
erasedAuthorStats.counter().incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def isProtected(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.Protected =>
|
|
protectedAuthorStats.counter().incr()
|
|
true
|
|
case UserUnavailableStateEnum.Filtered(result)
|
|
if UserVisibilityResultHelper.isDropProtectedAuthor(result) =>
|
|
protectedAuthorStats.counter().incr()
|
|
protectedAuthorStats.counter("filtered").incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def authorBlocksViewer(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.AuthorBlocksViewer =>
|
|
authorBlocksViewerStats.counter().incr()
|
|
true
|
|
case UserUnavailableStateEnum.Filtered(result)
|
|
if UserVisibilityResultHelper.isDropAuthorBlocksViewer(result) =>
|
|
authorBlocksViewerStats.counter().incr()
|
|
authorBlocksViewerStats.counter("filtered").incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def viewerBlocksAuthor(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.ViewerBlocksAuthor =>
|
|
viewerBlocksAuthorStats.counter().incr()
|
|
true
|
|
case UserUnavailableStateEnum.Filtered(result)
|
|
if UserVisibilityResultHelper.isDropViewerBlocksAuthor(result) =>
|
|
viewerBlocksAuthorStats.counter().incr()
|
|
viewerBlocksAuthorStats.counter("filtered").incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def viewerMutesAuthor(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.ViewerMutesAuthor =>
|
|
viewerMutesAuthorStats.counter().incr()
|
|
true
|
|
case UserUnavailableStateEnum.Filtered(result)
|
|
if UserVisibilityResultHelper.isDropViewerMutesAuthor(result) =>
|
|
viewerMutesAuthorStats.counter().incr()
|
|
viewerMutesAuthorStats.counter("filtered").incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
|
|
private[this] def isUnavailable(state: UserUnavailableStateEnum): Boolean =
|
|
state match {
|
|
case UserUnavailableStateEnum.Unavailable =>
|
|
unavailableStats.counter().incr()
|
|
true
|
|
case UserUnavailableStateEnum.Filtered(result)
|
|
if UserVisibilityResultHelper.isDropUnspecifiedAuthor(result) =>
|
|
unavailableStats.counter().incr()
|
|
unavailableStats.counter("filtered").incr()
|
|
true
|
|
case _ => false
|
|
}
|
|
}
|