monitor regulator extra points (as micropoints)

pull/5022/head
Thibault Duplessis 2019-04-20 14:14:46 +07:00
parent 53e68e74b2
commit 09d63704d9
2 changed files with 6 additions and 2 deletions

View File

@ -171,6 +171,9 @@ object mon {
object distribution {
def byPerfAndRating(perfKey: String, rating: Int): Rate = rate(s"rating.distribution.$perfKey.$rating")
}
object regulator {
def micropoints(perfKey: String) = rec(s"rating.regulator.$perfKey")
}
}
object round {

View File

@ -4,16 +4,17 @@ case object RatingRegulator {
def apply(factors: RatingFactors)(perfType: PerfType, before: Perf, after: Perf): Perf =
factors.get(perfType).filter(1!=).fold(after) {
apply(_, before, after)
apply(_, perfType, before, after)
}
def apply(factor: RatingFactor, before: Perf, after: Perf): Perf =
def apply(factor: RatingFactor, perfType: PerfType, before: Perf, after: Perf): Perf =
if ({
(after.nb == before.nb + 1) && // after playing one game
(after.glicko.rating > before.glicko.rating) // and gaining rating
}) {
val diff = (after.glicko.rating - before.glicko.rating).abs
val extra = diff * factor.value
lila.mon.rating.regulator.micropoints(perfType.key)((extra * 1000 * 1000).toLong)
after.copy(
glicko = after.glicko.copy(
rating = after.glicko.rating + extra