package net.pterodactylus.sone.template import com.codahale.metrics.* import net.pterodactylus.sone.utils.* import net.pterodactylus.util.template.* /** * [Filter] that renders a [Histogram] as a table row. */ class HistogramRenderer : Filter { override fun format(templateContext: TemplateContext, data: Any?, parameters: Map?): Any? { templateContext["metricName"] = (parameters?.get("name") as String?)?.dotToCamel()?.let { "Page.Metrics.$it.Title" } (data as? Histogram)?.snapshot?.run { templateContext["count"] = data.count templateContext["min"] = min templateContext["max"] = max templateContext["mean"] = mean templateContext["median"] = median templateContext["percentile75"] = get75thPercentile() templateContext["percentile95"] = get95thPercentile() templateContext["percentile98"] = get98thPercentile() templateContext["percentile99"] = get99thPercentile() templateContext["percentile999"] = get999thPercentile() } return template.render(templateContext) } } private val template = """ <% metricName|l10n|html> <% count|html> <% min|duration scale=='μs'|html> <% max|duration scale=='μs'|html> <% mean|duration scale=='μs'|html> <% median|duration scale=='μs'|html> <% percentile75|duration scale=='μs'|html> <% percentile95|duration scale=='μs'|html> <% percentile98|duration scale=='μs'|html> <% percentile99|duration scale=='μs'|html> <% percentile999|duration scale=='μs'|html> """.asTemplate() private fun String.dotToCamel() = split(".").joinToString("", transform = String::capitalize)