Skip to content

Commit

Permalink
Update Lag.scala
Browse files Browse the repository at this point in the history
  • Loading branch information
WarpWing authored Apr 20, 2024
1 parent 67331a8 commit 7a91564
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions src/main/scala/Lag.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package lila.ws

import com.github.blemale.scaffeine.{ Cache, Scaffeine }

import lila.ws.ipc.LilaIn
import lila.ws.util.Domain

Expand All @@ -13,24 +12,26 @@ final class Lag(lilaRedis: Lila, groupedWithin: util.GroupedWithin):
private val maxMillis = 5000

private val trustedStats: Cache[User.Id, TrustedMillis] = Scaffeine()
.expireAfterWrite(1 hour)
.expireAfterWrite(1.hour)
.build[User.Id, TrustedMillis]()

export trustedStats.getIfPresent as sessionLag

private val clientReports = groupedWithin[(User.Id, Int)](256, 947.millis): lags =>
private val clientReports = groupedWithin[(User.Id, Int)](256, 947.millis) { lags =>
lilaRedis.emit.site(LilaIn.Lags(lags.toMap))
}

export clientReports.apply as recordClientLag

def recordTrustedLag(millis: Int, userId: Option[User.Id], domain: Domain) =
Monitor.lag.roundFrameLag(millis, domain)
userId.foreach: uid =>
userId.foreach { uid =>
trustedStats.put(
uid,
sessionLag(uid)
.fold(millis): prev =>
val weight = if (millis < prev) trustedNormalRefreshFactor else trustedSpikeRefreshFactor
val cappedMillis = millis.min(maxMillis)
(prev * (1 - weight) + cappedMillis * weight).toInt
sessionLag(uid).fold(millis) { prev =>
val weight = if (millis < prev) trustedNormalRefreshFactor else trustedSpikeRefreshFactor
val cappedMillis = millis.min(maxMillis)
(prev * (1 - weight) + cappedMillis * weight).toInt
}
)
}

0 comments on commit 7a91564

Please sign in to comment.