Skip to content

Commit c8582af

Browse files
jcrossleyjenkins
authored and
jenkins
committed
finagle/finagle-core: Add record method to SLOStatsFilter for external usage
Problem We want to be able to use this filter outside of Service[Req, Rep] contexts. Solution Add a `record` method so that usages outside of services can use it. Differential Revision: https://phabricator.twitter.biz/D1192334
1 parent 6310972 commit c8582af

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

finagle-core/src/main/scala/com/twitter/finagle/filter/SLOStatsFilter.scala

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -115,26 +115,30 @@ class SLOStatsFilter[Req, Rep](
115115
def apply(request: Req, service: Service[Req, Rep]): Future[Rep] = {
116116
val start = nowNanos()
117117
service(request).respond { response =>
118-
if (!isIgnorable(response)) {
119-
if (requestToSLODefinition.isDefinedAt(request)) {
120-
val sloDefinition = requestToSLODefinition(request)
121-
var violated = false
122-
if (nowNanos() - start > sloDefinition.latency.inNanoseconds) {
123-
violated = true
124-
statsReceiver.counter(sloDefinition.scope, "violations", "latency").incr()
125-
}
126-
127-
if (isFailure(request, response)) {
128-
violated = true
129-
statsReceiver.counter(sloDefinition.scope, "violations", "failures").incr()
130-
}
131-
132-
if (violated) {
133-
statsReceiver.counter(sloDefinition.scope, "violations", "total").incr()
134-
}
135-
136-
statsReceiver.counter(sloDefinition.scope, "total").incr()
118+
record(request, response, nowNanos() - start)
119+
}
120+
}
121+
122+
def record(request: Req, response: Try[Rep], durationNanos: Long): Unit = {
123+
if (!isIgnorable(response)) {
124+
if (requestToSLODefinition.isDefinedAt(request)) {
125+
val sloDefinition = requestToSLODefinition(request)
126+
var violated = false
127+
if (durationNanos > sloDefinition.latency.inNanoseconds) {
128+
violated = true
129+
statsReceiver.counter(sloDefinition.scope, "violations", "latency").incr()
130+
}
131+
132+
if (isFailure(request, response)) {
133+
violated = true
134+
statsReceiver.counter(sloDefinition.scope, "violations", "failures").incr()
135+
}
136+
137+
if (violated) {
138+
statsReceiver.counter(sloDefinition.scope, "violations", "total").incr()
137139
}
140+
141+
statsReceiver.counter(sloDefinition.scope, "total").incr()
138142
}
139143
}
140144
}

0 commit comments

Comments
 (0)