šŸ”€ Merge ā€œrelease/v81ā€ into ā€œmasterā€
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / template / HistogramRenderer.kt
1 package net.pterodactylus.sone.template
2
3 import com.codahale.metrics.*
4 import net.pterodactylus.sone.utils.*
5 import net.pterodactylus.util.template.*
6
7 /**
8  * [Filter] that renders a [Histogram] as a table row.
9  */
10 class HistogramRenderer : Filter {
11
12         override fun format(templateContext: TemplateContext, data: Any?, parameters: Map<String, Any?>?): Any? {
13                 templateContext["metricName"] = (parameters?.get("name") as String?)?.dotToCamel()?.let { "Page.Metrics.$it.Title" }
14                 (data as? Histogram)?.snapshot?.run {
15                         templateContext["count"] = data.count
16                         templateContext["min"] = min
17                         templateContext["max"] = max
18                         templateContext["mean"] = mean
19                         templateContext["median"] = median
20                         templateContext["percentile75"] = get75thPercentile()
21                         templateContext["percentile95"] = get95thPercentile()
22                         templateContext["percentile98"] = get98thPercentile()
23                         templateContext["percentile99"] = get99thPercentile()
24                         templateContext["percentile999"] = get999thPercentile()
25                 }
26                 return template.render(templateContext)
27         }
28
29 }
30
31 private val template = """<tr>
32         <td><% metricName|l10n|html></td>
33         <td class="numeric"><% count|html></td>
34         <td class="numeric"><% min|duration scale=='Ī¼s'|html></td>
35         <td class="numeric"><% max|duration scale=='Ī¼s'|html></td>
36         <td class="numeric"><% mean|duration scale=='Ī¼s'|html></td>
37         <td class="numeric"><% median|duration scale=='Ī¼s'|html></td>
38         <td class="numeric"><% percentile75|duration scale=='Ī¼s'|html></td>
39         <td class="numeric"><% percentile95|duration scale=='Ī¼s'|html></td>
40         <td class="numeric"><% percentile98|duration scale=='Ī¼s'|html></td>
41         <td class="numeric"><% percentile99|duration scale=='Ī¼s'|html></td>
42         <td class="numeric"><% percentile999|duration scale=='Ī¼s'|html></td>
43 </tr>""".asTemplate()
44
45 private fun String.dotToCamel() =
46                 split(".").joinToString("", transform = String::capitalize)