the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/service/HomeMixerAlertConfig.scala
twitter-team ef4c5eb65e Twitter Recommendation Algorithm
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.
2023-03-31 17:36:31 -05:00

66 lines
2.9 KiB
Scala

package com.twitter.home_mixer.service
import com.twitter.conversions.DurationOps._
import com.twitter.product_mixer.core.functional_component.common.alert.Destination
import com.twitter.product_mixer.core.functional_component.common.alert.EmptyResponseRateAlert
import com.twitter.product_mixer.core.functional_component.common.alert.LatencyAlert
import com.twitter.product_mixer.core.functional_component.common.alert.NotificationGroup
import com.twitter.product_mixer.core.functional_component.common.alert.P99
import com.twitter.product_mixer.core.functional_component.common.alert.Percentile
import com.twitter.product_mixer.core.functional_component.common.alert.SuccessRateAlert
import com.twitter.product_mixer.core.functional_component.common.alert.predicate.TriggerIfAbove
import com.twitter.product_mixer.core.functional_component.common.alert.predicate.TriggerIfBelow
import com.twitter.product_mixer.core.functional_component.common.alert.predicate.TriggerIfLatencyAbove
import com.twitter.util.Duration
/**
* Notifications (email, pagerduty, etc) can be specific per-alert but it is common for multiple
* products to share notification configuration.
*/
object HomeMixerAlertConfig {
val DefaultNotificationGroup: NotificationGroup = NotificationGroup(
warn = Destination(emails = Seq("")),
critical = Destination(emails = Seq(""))
)
object BusinessHours {
val DefaultNotificationGroup: NotificationGroup = NotificationGroup(
warn = Destination(emails = Seq("")),
critical = Destination(emails = Seq(""))
)
def defaultEmptyResponseRateAlert(warnThreshold: Double = 50, criticalThreshold: Double = 80) =
EmptyResponseRateAlert(
notificationGroup = DefaultNotificationGroup,
warnPredicate = TriggerIfAbove(warnThreshold),
criticalPredicate = TriggerIfAbove(criticalThreshold)
)
def defaultSuccessRateAlert(
threshold: Double = 99.5,
warnDatapointsPastThreshold: Int = 20,
criticalDatapointsPastThreshold: Int = 30,
duration: Int = 30
) = SuccessRateAlert(
notificationGroup = DefaultNotificationGroup,
warnPredicate = TriggerIfBelow(threshold, warnDatapointsPastThreshold, duration),
criticalPredicate = TriggerIfBelow(threshold, criticalDatapointsPastThreshold, duration),
)
def defaultLatencyAlert(
latencyThreshold: Duration = 200.millis,
warningDatapointsPastThreshold: Int = 15,
criticalDatapointsPastThreshold: Int = 30,
duration: Int = 30,
percentile: Percentile = P99
): LatencyAlert = LatencyAlert(
notificationGroup = DefaultNotificationGroup,
percentile = percentile,
warnPredicate =
TriggerIfLatencyAbove(latencyThreshold, warningDatapointsPastThreshold, duration),
criticalPredicate =
TriggerIfLatencyAbove(latencyThreshold, criticalDatapointsPastThreshold, duration)
)
}
}