74 lines
2.7 KiB
Scala
74 lines
2.7 KiB
Scala
package com.twitter.recos.user_video_graph
|
|
|
|
import com.twitter.finagle.thrift.ClientId
|
|
import com.twitter.finagle.tracing.Trace
|
|
import com.twitter.finagle.tracing.TraceId
|
|
import com.twitter.recos.decider.EndpointLoadShedder
|
|
import com.twitter.recos.user_video_graph.thriftscala._
|
|
import com.twitter.util.Duration
|
|
import com.twitter.util.Future
|
|
import com.twitter.util.Timer
|
|
import scala.concurrent.duration.MILLISECONDS
|
|
import com.twitter.logging.Logger
|
|
import com.twitter.recos.user_tweet_graph.relatedTweetHandlers.ConsumersBasedRelatedTweetsHandler
|
|
import com.twitter.recos.user_video_graph.relatedTweetHandlers.ProducerBasedRelatedTweetsHandler
|
|
import com.twitter.recos.user_video_graph.relatedTweetHandlers.TweetBasedRelatedTweetsHandler
|
|
|
|
object UserVideoGraph {
|
|
def traceId: TraceId = Trace.id
|
|
def clientId: Option[ClientId] = ClientId.current
|
|
}
|
|
|
|
class UserVideoGraph(
|
|
tweetBasedRelatedTweetsHandler: TweetBasedRelatedTweetsHandler,
|
|
producerBasedRelatedTweetsHandler: ProducerBasedRelatedTweetsHandler,
|
|
consumersBasedRelatedTweetsHandler: ConsumersBasedRelatedTweetsHandler,
|
|
endpointLoadShedder: EndpointLoadShedder
|
|
)(
|
|
implicit timer: Timer)
|
|
extends thriftscala.UserVideoGraph.MethodPerEndpoint {
|
|
|
|
private val defaultTimeout: Duration = Duration(50, MILLISECONDS)
|
|
private val EmptyResponse = Future.value(RelatedTweetResponse())
|
|
private val log = Logger()
|
|
|
|
override def tweetBasedRelatedTweets(
|
|
request: TweetBasedRelatedTweetRequest
|
|
): Future[RelatedTweetResponse] =
|
|
endpointLoadShedder("videoGraphTweetBasedRelatedTweets") {
|
|
tweetBasedRelatedTweetsHandler(request).raiseWithin(defaultTimeout)
|
|
}.rescue {
|
|
case EndpointLoadShedder.LoadSheddingException =>
|
|
EmptyResponse
|
|
case e =>
|
|
log.info("user-video-graph_tweetBasedRelatedTweets" + e)
|
|
EmptyResponse
|
|
}
|
|
|
|
override def producerBasedRelatedTweets(
|
|
request: ProducerBasedRelatedTweetRequest
|
|
): Future[RelatedTweetResponse] =
|
|
endpointLoadShedder("producerBasedRelatedTweets") {
|
|
producerBasedRelatedTweetsHandler(request).raiseWithin(defaultTimeout)
|
|
}.rescue {
|
|
case EndpointLoadShedder.LoadSheddingException =>
|
|
EmptyResponse
|
|
case e =>
|
|
log.info("user-video-graph_producerBasedRelatedTweets" + e)
|
|
EmptyResponse
|
|
}
|
|
|
|
override def consumersBasedRelatedTweets(
|
|
request: ConsumersBasedRelatedTweetRequest
|
|
): Future[RelatedTweetResponse] =
|
|
endpointLoadShedder("consumersBasedRelatedTweets") {
|
|
consumersBasedRelatedTweetsHandler(request).raiseWithin(defaultTimeout)
|
|
}.rescue {
|
|
case EndpointLoadShedder.LoadSheddingException =>
|
|
EmptyResponse
|
|
case e =>
|
|
log.info("user-video-graph_consumersBasedRelatedTweets" + e)
|
|
EmptyResponse
|
|
}
|
|
}
|